* [GIT PULL] Ceph updates for -rc1
@ 2016-01-24 14:51 Sage Weil
0 siblings, 0 replies; 11+ messages in thread
From: Sage Weil @ 2016-01-24 14:51 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, ceph-devel
Hi Linus,
Please pull the following Ceph updates for 4.5-rc1 from
git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git for-linus
The two main changes are aio support in CephFS, and a series that fixes
several issues in the authentication key timeout/renewal code. On top of
that are a variety of cleanups and minor bug fixes.
Thanks!
sage
----------------------------------------------------------------
Geliang Tang (2):
libceph: use list_next_entry instead of list_entry_next
libceph: use list_for_each_entry_safe
Ilya Dryomov (6):
libceph: fix ceph_msg_revoke()
libceph: clear messenger auth_retry flag if we fault
libceph: fix authorizer invalidation, take 2
libceph: invalidate AUTH in addition to a service ticket
libceph: kill off ceph_x_ticket_handler::validity
libceph: remove outdated comment
Markus Elfring (1):
rbd: delete an unnecessary check before rbd_dev_destroy()
Minfei Huang (1):
ceph: Avoid to propagate the invalid page point
Yan, Zheng (4):
ceph: fix double page_unlock() in page_mkwrite()
ceph: Asynchronous IO support
ceph: re-send AIO write request when getting -EOLDSNAP error
ceph: use i_size_{read,write} to get/set i_size
Yaowei Bai (2):
ceph: remove unused functions in ceph_frag.h
ceph: ceph_frag_contains_value can be boolean
drivers/block/rbd.c | 3 +-
fs/ceph/addr.c | 14 +-
fs/ceph/cache.c | 8 +-
fs/ceph/file.c | 509 ++++++++++++++++++++++++++++++-----------
fs/ceph/inode.c | 8 +-
include/linux/ceph/ceph_frag.h | 37 +--
include/linux/ceph/messenger.h | 2 +-
net/ceph/auth_x.c | 49 +++-
net/ceph/auth_x.h | 2 +-
net/ceph/messenger.c | 105 ++++++---
net/ceph/mon_client.c | 4 -
11 files changed, 501 insertions(+), 240 deletions(-)
^ permalink raw reply [flat|nested] 11+ messages in thread* [GIT PULL] Ceph updates for -rc1
@ 2015-07-02 16:29 Sage Weil
0 siblings, 0 replies; 11+ messages in thread
From: Sage Weil @ 2015-07-02 16:29 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, ceph-devel
[-- Attachment #1: Type: TEXT/PLAIN, Size: 4161 bytes --]
Hi Linus,
Please pull the following Ceph updates from
git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git for-linus
We have a pile of bug fixes from Ilya, including a few patches that sync
up the CRUSH code with the latest from userspace. There is also a long
series from Zheng that fixes various issues with snapshots, inline data,
and directory fsync, some simplification and improvement in the cap
release code, and a rework of the caching of directory contents. To top
it off there are a few small fixes and cleanups from Benoit and Hong.
Thanks!
sage
----------------------------------------------------------------
Benoît Canet (2):
libceph: Remove spurious kunmap() of the zero page
libceph: Fix ceph_tcp_sendpage()'s more boolean usage
Hong Zhiguo (1):
libceph: fix wrong name "Ceph filesystem for Linux"
Ilya Dryomov (14):
libceph: use kvfree() instead of open-coding it
libceph: nuke time_sub()
libceph: store timeouts in jiffies, verify user input
libceph: a couple tweaks for wait loops
ceph: simplify two mount_timeout sites
rbd: timeout watch teardown on unmap with mount_timeout
crush: fix crash from invalid 'take' argument
crush: sync up with userspace
rbd: bump queue_max_segments
rbd: terminate rbd_opts_tokens with Opt_err
rbd: store rbd_options in rbd_device
rbd: queue_depth map option
crush: fix a bug in tree bucket decode
rbd: use GFP_NOIO in rbd_obj_request_create()
Yan, Zheng (23):
libceph: properly release STAT request's raw_data_in
libceph: allow setting osd_req_op's flags
ceph: check OSD caps before read/write
ceph: use empty snap context for uninline_data and get_pool_perm
ceph: set i_head_snapc when getting CEPH_CAP_FILE_WR reference
ceph: avoid sending unnessesary FLUSHSNAP message
ceph: take snap_rwsem when accessing snap realm's cached_context
ceph: don't trim auth cap when there are cap snaps
ceph: make sure syncfs flushes all cap snaps
ceph: don't pre-allocate space for cap release messages
ceph: exclude setfilelock requests when calculating oldest tid
ceph: ratelimit warn messages for MDS closes session
ceph: don't include used caps in cap_wanted
ceph: fix flushing caps
ceph: fix directory fsync
ceph: track pending caps flushing accurately
ceph: track pending caps flushing globally
ceph: send TID of the oldest pending caps flush to MDS
ceph: re-send flushing caps (which are revoked) in reconnect stage
ceph: pre-allocate data structure that tracks caps flushing
ceph: switch some GFP_NOFS memory allocation to GFP_KERNEL
ceph: rework dcache readdir
ceph: fix ceph_writepages_start()
drivers/block/rbd.c | 111 ++++--
fs/ceph/acl.c | 4 +-
fs/ceph/addr.c | 308 ++++++++++++---
fs/ceph/caps.c | 836 +++++++++++++++++++++++++++-------------
fs/ceph/dir.c | 383 ++++++++----------
fs/ceph/file.c | 61 ++-
fs/ceph/inode.c | 155 ++++++--
fs/ceph/mds_client.c | 425 +++++++++++---------
fs/ceph/mds_client.h | 23 +-
fs/ceph/snap.c | 173 +++++----
fs/ceph/super.c | 25 +-
fs/ceph/super.h | 125 +++---
fs/ceph/xattr.c | 65 +++-
include/linux/ceph/libceph.h | 21 +-
include/linux/ceph/osd_client.h | 2 +-
include/linux/crush/crush.h | 40 +-
include/linux/crush/hash.h | 6 +
include/linux/crush/mapper.h | 2 +-
net/ceph/ceph_common.c | 50 ++-
net/ceph/crush/crush.c | 13 +-
net/ceph/crush/crush_ln_table.h | 32 +-
net/ceph/crush/hash.c | 8 +-
net/ceph/crush/mapper.c | 148 ++++---
net/ceph/messenger.c | 3 +-
net/ceph/mon_client.c | 13 +-
net/ceph/osd_client.c | 42 +-
net/ceph/osdmap.c | 2 +-
net/ceph/pagevec.c | 5 +-
28 files changed, 2010 insertions(+), 1071 deletions(-)
^ permalink raw reply [flat|nested] 11+ messages in thread* [GIT PULL] Ceph updates for -rc1
@ 2014-01-28 18:40 Sage Weil
2014-01-28 21:10 ` Dave Jones
0 siblings, 1 reply; 11+ messages in thread
From: Sage Weil @ 2014-01-28 18:40 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, ceph-devel, linux-fsdevel
Hi Linus,
Please pull the following Ceph updates from
git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git for-linus
This is a big batch. From Ilya we have:
- rbd support for more than ~250 mapped devices (now uses same scheme
that SCSI does for device major/minor numbering)
- crush updates for new mapping behaviors (will be needed for coming
erasure coding support, among other things)
- preliminary support for tiered storage pools
There is also a big series fixing a pile cephfs bugs with clustered MDSs
from Yan Zheng, ACL support for cephfs from Guangliang Zhao, ceph fscache
improvements from Li Wang, improved behavior when we get ENOSPC from Josh
Durgin, some readv/writev improvements from Majianpeng, and the usual mix
of small cleanups.
Thanks!
sage
----------------------------------------------------------------
Alex Elder (1):
MAINTAINERS: update an e-mail address
Guangliang Zhao (1):
ceph: add acl for cephfs
Ilya Dryomov (51):
rbd: rbd_device::dev_id is an int, format it as such
rbd: tweak "loaded" message and module description
rbd: refactor rbd_init() a bit
rbd: switch to ida for rbd id assignments
rbd: add 'minor' sysfs rbd device attribute
rbd: wire up is_visible() sysfs callback for rbd bus
rbd: add support for single-major device number allocation scheme
rbd: enable extended devt in single-major mode
rbd: introduce rbd_dev_header_unwatch_sync() and switch to it
rbd: tear down watch request if rbd_dev_device_setup() fails
libceph: all features fields must be u64
libceph: update ceph_features.h
crush: pass weight vector size to map function
crush: factor out (trivial) crush_destroy_rule()
crush: reduce scope of some local variables
crush: fix some comments
crush: eliminate CRUSH_MAX_SET result size limitation
crush: return CRUSH_ITEM_UNDEF for failed placements with indep
crush: use breadth-first search for indep mode
crush: add note about r in recursive choose
crush: strip firstn conditionals out of crush_choose, rename
crush: clarify numrep vs endpos
crush: pass parent r value for indep call
crush: new SET_CHOOSE_LEAF_TRIES command
crush: apply chooseleaf_tries to firstn mode too
crush: add SET_CHOOSE_TRIES rule step
crush: CHOOSE_LEAF -> CHOOSELEAF throughout
crush: generalize descend_once
crush: add set_choose_local_[fallback_]tries steps
crush: attempts -> tries
crush: fix crush_choose_firstn comment
crush: support new indep mode and SET_* steps (crush v2) by default
libceph: use CEPH_MON_PORT when the specified port is 0
libceph: rename ceph_msg::front_max to front_alloc_len
libceph: rename front to front_len in get_reply()
libceph: fix preallocation check in get_reply()
libceph: add ceph_kv{malloc,free}() and switch to them
libceph: dout() is missing a newline
libceph: start using oloc abstraction
libceph: move ceph_file_layout helpers to ceph_fs.h
libceph: rename MAX_OBJ_NAME_SIZE to CEPH_MAX_OID_NAME_LEN
libceph: introduce and start using oid abstraction
libceph: replace ceph_calc_ceph_pg() with ceph_oloc_oid_to_pg()
libceph: CEPH_OSD_FLAG_* enum update
libceph: add ceph_pg_pool_by_id()
libceph: follow {read,write}_tier fields on osd request submission
libceph: rename ceph_osd_request::r_{oloc,oid} to r_base_{oloc,oid}
libceph: follow redirect replies from osds
libceph: support CEPH_FEATURE_OSD_CACHEPOOL feature
ceph: fix dout() compile warnings in ceph_filemap_fault()
ceph: cast PAGE_SIZE to size_t in ceph_sync_write()
J. Bruce Fields (1):
ceph: trivial comment fix
Josh Durgin (2):
libceph: block I/O when PAUSE or FULL osd map flags are set
libceph: resend all writes after the osdmap loses the full flag
Li Wang (4):
ceph: Clean up if error occurred in finish_read()
ceph: Add necessary clean up if invalid reply received in handle_reply()
ceph fscache: Introduce a routine for uncaching single no data page from fscache
ceph fscache: Uncaching no data page from fscache in readpage()
Libo Chen (1):
fs: ceph: new helper: file_inode(file)
Yan, Zheng (13):
ceph: drop unconnected inodes
ceph: check caps in filemap_fault and page_mkwrite
ceph: handle cap export race in try_flush_caps()
ceph: use ceph_seq_cmp() to compare migrate_seq
ceph: fix cache revoke race
ceph: fix trim caps
ceph: handle -ESTALE reply
ceph: check inode caps in ceph_d_revalidate
ceph: handle session flush message
ceph: remove exported caps when handling cap import message
ceph: add open export target session helper
ceph: add imported caps when handling cap export message
libceph: support CEPH_FEATURE_EXPORT_PEER
majianpeng (2):
ceph: Implement writev/pwritev for sync operation.
ceph: implement readv/preadv for sync operation
Documentation/ABI/testing/sysfs-bus-rbd | 26 ++
MAINTAINERS | 2 +-
drivers/block/rbd.c | 303 ++++++++++++++--------
fs/ceph/Kconfig | 13 +
fs/ceph/Makefile | 1 +
fs/ceph/acl.c | 332 ++++++++++++++++++++++++
fs/ceph/addr.c | 93 ++++++-
fs/ceph/cache.h | 13 +
fs/ceph/caps.c | 338 +++++++++++++++---------
fs/ceph/dir.c | 16 +-
fs/ceph/file.c | 437 ++++++++++++++++++++++----------
fs/ceph/inode.c | 33 ++-
fs/ceph/ioctl.c | 8 +-
fs/ceph/mds_client.c | 132 ++++++----
fs/ceph/mds_client.h | 2 +
fs/ceph/strings.c | 2 +
fs/ceph/super.c | 9 +-
fs/ceph/super.h | 45 +++-
fs/ceph/xattr.c | 60 ++++-
include/linux/ceph/buffer.h | 1 -
include/linux/ceph/ceph_features.h | 101 +++++---
include/linux/ceph/ceph_fs.h | 36 ++-
include/linux/ceph/libceph.h | 19 +-
include/linux/ceph/messenger.h | 13 +-
include/linux/ceph/osd_client.h | 19 +-
include/linux/ceph/osdmap.h | 66 +++--
include/linux/ceph/rados.h | 4 +
include/linux/crush/crush.h | 20 +-
include/linux/crush/mapper.h | 3 +-
net/ceph/buffer.c | 22 +-
net/ceph/ceph_common.c | 24 +-
net/ceph/crush/crush.c | 7 +-
net/ceph/crush/mapper.c | 336 +++++++++++++++++++-----
net/ceph/debugfs.c | 3 +-
net/ceph/messenger.c | 32 +--
net/ceph/mon_client.c | 8 +-
net/ceph/osd_client.c | 283 +++++++++++++++++++--
net/ceph/osdmap.c | 78 ++++--
38 files changed, 2261 insertions(+), 679 deletions(-)
create mode 100644 fs/ceph/acl.c
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [GIT PULL] Ceph updates for -rc1 2014-01-28 18:40 Sage Weil @ 2014-01-28 21:10 ` Dave Jones 2014-01-28 21:48 ` Linus Torvalds 0 siblings, 1 reply; 11+ messages in thread From: Dave Jones @ 2014-01-28 21:10 UTC (permalink / raw) To: Sage Weil; +Cc: torvalds, linux-kernel, ceph-devel, linux-fsdevel On Tue, Jan 28, 2014 at 10:40:16AM -0800, Sage Weil wrote: > Hi Linus, > > Please pull the following Ceph updates from > > git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git for-linus > > This is a big batch. From Ilya we have: > > - rbd support for more than ~250 mapped devices (now uses same scheme > that SCSI does for device major/minor numbering) > - crush updates for new mapping behaviors (will be needed for coming > erasure coding support, among other things) > - preliminary support for tiered storage pools > > There is also a big series fixing a pile cephfs bugs with clustered MDSs > from Yan Zheng, ACL support for cephfs from Guangliang Zhao, ceph fscache > improvements from Li Wang, improved behavior when we get ENOSPC from Josh > Durgin, some readv/writev improvements from Majianpeng, and the usual mix > of small cleanups. This breaks the build for me. fs/ceph/acl.c: In function ‘ceph_init_acl’: fs/ceph/acl.c:216:3: warning: passing argument 1 of ‘posix_acl_create’ from incompatible pointer type [enabled by default] ret = posix_acl_create(&acl, GFP_NOFS, &inode->i_mode); ^ In file included from include/linux/posix_acl_xattr.h:12:0, from fs/ceph/acl.c:25: include/linux/posix_acl.h:96:12: note: expected ‘struct inode *’ but argument is of type ‘struct posix_acl **’ extern int posix_acl_create(struct inode *, umode_t *, struct posix_acl **, ^ fs/ceph/acl.c:216:3: warning: passing argument 2 of ‘posix_acl_create’ makes pointer from integer without a cast [enabled by default] ret = posix_acl_create(&acl, GFP_NOFS, &inode->i_mode); ^ In file included from include/linux/posix_acl_xattr.h:12:0, from fs/ceph/acl.c:25: include/linux/posix_acl.h:96:12: note: expected ‘umode_t *’ but argument is of type ‘unsigned int’ extern int posix_acl_create(struct inode *, umode_t *, struct posix_acl **, ^ fs/ceph/acl.c:216:3: warning: passing argument 3 of ‘posix_acl_create’ from incompatible pointer type [enabled by default] ret = posix_acl_create(&acl, GFP_NOFS, &inode->i_mode); ^ In file included from include/linux/posix_acl_xattr.h:12:0, from fs/ceph/acl.c:25: include/linux/posix_acl.h:96:12: note: expected ‘struct posix_acl **’ but argument is of type ‘umode_t *’ extern int posix_acl_create(struct inode *, umode_t *, struct posix_acl **, ^ fs/ceph/acl.c:216:3: error: too few arguments to function ‘posix_acl_create’ ret = posix_acl_create(&acl, GFP_NOFS, &inode->i_mode); ^ In file included from include/linux/posix_acl_xattr.h:12:0, from fs/ceph/acl.c:25: include/linux/posix_acl.h:96:12: note: declared here extern int posix_acl_create(struct inode *, umode_t *, struct posix_acl **, ^ fs/ceph/acl.c: In function ‘ceph_acl_chmod’: fs/ceph/acl.c:252:2: warning: passing argument 1 of ‘posix_acl_chmod’ from incompatible pointer type [enabled by default] ret = posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode); ^ In file included from include/linux/posix_acl_xattr.h:12:0, from fs/ceph/acl.c:25: include/linux/posix_acl.h:95:12: note: expected ‘struct inode *’ but argument is of type ‘struct posix_acl **’ extern int posix_acl_chmod(struct inode *, umode_t); ^ fs/ceph/acl.c:252:2: error: too many arguments to function ‘posix_acl_chmod’ ret = posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode); ^ In file included from include/linux/posix_acl_xattr.h:12:0, from fs/ceph/acl.c:25: include/linux/posix_acl.h:95:12: note: declared here extern int posix_acl_chmod(struct inode *, umode_t); ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [GIT PULL] Ceph updates for -rc1 2014-01-28 21:10 ` Dave Jones @ 2014-01-28 21:48 ` Linus Torvalds 2014-01-29 6:08 ` Sage Weil 0 siblings, 1 reply; 11+ messages in thread From: Linus Torvalds @ 2014-01-28 21:48 UTC (permalink / raw) To: Dave Jones, Sage Weil, Linus Torvalds, Linux Kernel Mailing List, ceph-devel, linux-fsdevel, Christoph Hellwig, Al Viro, Guangliang Zhao, Li Wang [-- Attachment #1: Type: text/plain, Size: 1629 bytes --] On Tue, Jan 28, 2014 at 1:10 PM, Dave Jones <davej@redhat.com> wrote: > > This breaks the build for me. It is my merge (Christoph's ACL changes came in today through the VFS tree from Al). I was doing the merges today on my laptop (I had jury duty yesterday and today), and so I didn't do the allmodconfig build I would normally do on my (much faster) desktop. Well, actually I did do the full fs builds for the earlier pulls that actually had some conflicts, but not for the ceph pull. The conflict was hidden by the fact that the whole cifs ACL support is new, so there was no data conflict, just a silent semantic conflict between the new smarter ACL helpers and the new ACL use in CIFS. I'm back home now (yay, all the afternoon cases got settled), and I see the problem now. I should have done an allmodconfig build immediately after coming home, but I never even thought of it. Anyway, here's an *untested* conversion to the new posix acl helper infrastructure. I do wonder if ceph_init_acl() could be converted to posix_acl_create(), right now that part is a "non-conversion" - it's just made to use __posix_acl_create() that implements the old interface. Al, Christoph, can you please check my conversion for sanity from a generic posix-acl standpoint? Sage, Guangliang, Li, can you check the actual cifs usage/sanity of the attached patch? Sorry about the messed-up merge. Although I also blame Al, because he's horrible about having his changes in linux-next, so nobody was ever really aware of this semantic conflict. Al. Bad, bad boy. Consider yourself hit with a rolled-up newspaper. Linus [-- Attachment #2: patch.diff --] [-- Type: text/plain, Size: 4685 bytes --] fs/ceph/acl.c | 103 +------------------------------------------------------- fs/ceph/inode.c | 3 +- fs/ceph/super.h | 3 -- fs/ceph/xattr.c | 5 +-- 4 files changed, 6 insertions(+), 108 deletions(-) diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c index 64fddbc1d17b..f6911284c9bd 100644 --- a/fs/ceph/acl.c +++ b/fs/ceph/acl.c @@ -213,7 +213,7 @@ int ceph_init_acl(struct dentry *dentry, struct inode *inode, struct inode *dir) if (ret) goto out_release; } - ret = posix_acl_create(&acl, GFP_NOFS, &inode->i_mode); + ret = __posix_acl_create(&acl, GFP_NOFS, &inode->i_mode); if (ret < 0) goto out; else if (ret > 0) @@ -229,104 +229,3 @@ out_release: out: return ret; } - -int ceph_acl_chmod(struct dentry *dentry, struct inode *inode) -{ - struct posix_acl *acl; - int ret = 0; - - if (S_ISLNK(inode->i_mode)) { - ret = -EOPNOTSUPP; - goto out; - } - - if (!IS_POSIXACL(inode)) - goto out; - - acl = ceph_get_acl(inode, ACL_TYPE_ACCESS); - if (IS_ERR_OR_NULL(acl)) { - ret = PTR_ERR(acl); - goto out; - } - - ret = posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode); - if (ret) - goto out; - ret = ceph_set_acl(dentry, inode, acl, ACL_TYPE_ACCESS); - posix_acl_release(acl); -out: - return ret; -} - -static int ceph_xattr_acl_get(struct dentry *dentry, const char *name, - void *value, size_t size, int type) -{ - struct posix_acl *acl; - int ret = 0; - - if (!IS_POSIXACL(dentry->d_inode)) - return -EOPNOTSUPP; - - acl = ceph_get_acl(dentry->d_inode, type); - if (IS_ERR(acl)) - return PTR_ERR(acl); - if (acl == NULL) - return -ENODATA; - - ret = posix_acl_to_xattr(&init_user_ns, acl, value, size); - posix_acl_release(acl); - - return ret; -} - -static int ceph_xattr_acl_set(struct dentry *dentry, const char *name, - const void *value, size_t size, int flags, int type) -{ - int ret = 0; - struct posix_acl *acl = NULL; - - if (!inode_owner_or_capable(dentry->d_inode)) { - ret = -EPERM; - goto out; - } - - if (!IS_POSIXACL(dentry->d_inode)) { - ret = -EOPNOTSUPP; - goto out; - } - - if (value) { - acl = posix_acl_from_xattr(&init_user_ns, value, size); - if (IS_ERR(acl)) { - ret = PTR_ERR(acl); - goto out; - } - - if (acl) { - ret = posix_acl_valid(acl); - if (ret) - goto out_release; - } - } - - ret = ceph_set_acl(dentry, dentry->d_inode, acl, type); - -out_release: - posix_acl_release(acl); -out: - return ret; -} - -const struct xattr_handler ceph_xattr_acl_default_handler = { - .prefix = POSIX_ACL_XATTR_DEFAULT, - .flags = ACL_TYPE_DEFAULT, - .get = ceph_xattr_acl_get, - .set = ceph_xattr_acl_set, -}; - -const struct xattr_handler ceph_xattr_acl_access_handler = { - .prefix = POSIX_ACL_XATTR_ACCESS, - .flags = ACL_TYPE_ACCESS, - .get = ceph_xattr_acl_get, - .set = ceph_xattr_acl_set, -}; diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 6fc10a7d7c59..8b8b506636cc 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -9,6 +9,7 @@ #include <linux/namei.h> #include <linux/writeback.h> #include <linux/vmalloc.h> +#include <linux/posix_acl.h> #include "super.h" #include "mds_client.h" @@ -1805,7 +1806,7 @@ int ceph_setattr(struct dentry *dentry, struct iattr *attr) __mark_inode_dirty(inode, inode_dirty_flags); if (ia_valid & ATTR_MODE) { - err = ceph_acl_chmod(dentry, inode); + err = posix_acl_chmod(inode, attr->ia_mode); if (err) goto out_put; } diff --git a/fs/ceph/super.h b/fs/ceph/super.h index c299f7d19bf3..345933948b6e 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h @@ -736,15 +736,12 @@ extern void __init ceph_xattr_init(void); extern void ceph_xattr_exit(void); /* acl.c */ -extern const struct xattr_handler ceph_xattr_acl_access_handler; -extern const struct xattr_handler ceph_xattr_acl_default_handler; extern const struct xattr_handler *ceph_xattr_handlers[]; #ifdef CONFIG_CEPH_FS_POSIX_ACL struct posix_acl *ceph_get_acl(struct inode *, int); int ceph_init_acl(struct dentry *, struct inode *, struct inode *); -int ceph_acl_chmod(struct dentry *, struct inode *); void ceph_forget_all_cached_acls(struct inode *inode); #else diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c index c7581f3733c1..898b6565ad3e 100644 --- a/fs/ceph/xattr.c +++ b/fs/ceph/xattr.c @@ -6,6 +6,7 @@ #include <linux/ceph/decode.h> #include <linux/xattr.h> +#include <linux/posix_acl_xattr.h> #include <linux/slab.h> #define XATTR_CEPH_PREFIX "ceph." @@ -17,8 +18,8 @@ */ const struct xattr_handler *ceph_xattr_handlers[] = { #ifdef CONFIG_CEPH_FS_POSIX_ACL - &ceph_xattr_acl_access_handler, - &ceph_xattr_acl_default_handler, + &posix_acl_access_xattr_handler, + &posix_acl_default_xattr_handler, #endif NULL, }; ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [GIT PULL] Ceph updates for -rc1 2014-01-28 21:48 ` Linus Torvalds @ 2014-01-29 6:08 ` Sage Weil 2014-01-29 14:30 ` Sage Weil 0 siblings, 1 reply; 11+ messages in thread From: Sage Weil @ 2014-01-29 6:08 UTC (permalink / raw) To: Linus Torvalds Cc: Dave Jones, Linux Kernel Mailing List, ceph-devel, linux-fsdevel, Christoph Hellwig, Al Viro, Guangliang Zhao, Li Wang, zheng.z.yan Hi Linus, On Tue, 28 Jan 2014, Linus Torvalds wrote: > On Tue, Jan 28, 2014 at 1:10 PM, Dave Jones <davej@redhat.com> wrote: > > > > This breaks the build for me. > > It is my merge (Christoph's ACL changes came in today through the VFS > tree from Al). > > I was doing the merges today on my laptop (I had jury duty yesterday > and today), and so I didn't do the allmodconfig build I would normally > do on my (much faster) desktop. Well, actually I did do the full fs > builds for the earlier pulls that actually had some conflicts, but not > for the ceph pull. The conflict was hidden by the fact that the whole > cifs ACL support is new, so there was no data conflict, just a silent > semantic conflict between the new smarter ACL helpers and the new ACL > use in CIFS. s/cifs/ceph/ :) > I'm back home now (yay, all the afternoon cases got settled), and I > see the problem now. I should have done an allmodconfig build > immediately after coming home, but I never even thought of it. > > Anyway, here's an *untested* conversion to the new posix acl helper > infrastructure. I do wonder if ceph_init_acl() could be converted to > posix_acl_create(), right now that part is a "non-conversion" - it's > just made to use __posix_acl_create() that implements the old > interface. > > Al, Christoph, can you please check my conversion for sanity from a > generic posix-acl standpoint? > > Sage, Guangliang, Li, can you check the actual cifs usage/sanity of > the attached patch? Superficially at least the conversion looks okay to me, but it's not passing my smoke test (it's giving me EOPNOTSUPP for chmod and setxattr when setting an ACL). I'll look at it tomorrow if Guangliang, Li, or Yan don't get there first. I should have caught this before--I knew the ACL changes were coming and forgot to check the merged build beforehand! sage ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [GIT PULL] Ceph updates for -rc1 2014-01-29 6:08 ` Sage Weil @ 2014-01-29 14:30 ` Sage Weil 2014-01-29 16:36 ` Ilya Dryomov 2014-01-30 10:46 ` Christoph Hellwig 0 siblings, 2 replies; 11+ messages in thread From: Sage Weil @ 2014-01-29 14:30 UTC (permalink / raw) To: Linus Torvalds Cc: Dave Jones, Linux Kernel Mailing List, ceph-devel, linux-fsdevel, Christoph Hellwig, Al Viro, Guangliang Zhao, Li Wang, zheng.z.yan On Tue, 28 Jan 2014, Sage Weil wrote: > Hi Linus, > > On Tue, 28 Jan 2014, Linus Torvalds wrote: > > On Tue, Jan 28, 2014 at 1:10 PM, Dave Jones <davej@redhat.com> wrote: > > > > > > This breaks the build for me. > > > > It is my merge (Christoph's ACL changes came in today through the VFS > > tree from Al). > > > > I was doing the merges today on my laptop (I had jury duty yesterday > > and today), and so I didn't do the allmodconfig build I would normally > > do on my (much faster) desktop. Well, actually I did do the full fs > > builds for the earlier pulls that actually had some conflicts, but not > > for the ceph pull. The conflict was hidden by the fact that the whole > > cifs ACL support is new, so there was no data conflict, just a silent > > semantic conflict between the new smarter ACL helpers and the new ACL > > use in CIFS. > > s/cifs/ceph/ :) > > > I'm back home now (yay, all the afternoon cases got settled), and I > > see the problem now. I should have done an allmodconfig build > > immediately after coming home, but I never even thought of it. > > > > Anyway, here's an *untested* conversion to the new posix acl helper > > infrastructure. I do wonder if ceph_init_acl() could be converted to > > posix_acl_create(), right now that part is a "non-conversion" - it's > > just made to use __posix_acl_create() that implements the old > > interface. > > > > Al, Christoph, can you please check my conversion for sanity from a > > generic posix-acl standpoint? > > > > Sage, Guangliang, Li, can you check the actual cifs usage/sanity of > > the attached patch? > > Superficially at least the conversion looks okay to me, but it's not > passing my smoke test (it's giving me EOPNOTSUPP for chmod and setxattr > when setting an ACL). I'll look at it tomorrow if Guangliang, Li, or Yan > don't get there first. The set_acl inode_operation wasn't getting set, and the prototype needed to be adjusted a bit (it doesn't take a dentry anymore). All seems to be well with the below patch. Thanks! sage >From 01baa54e113060eb9147548fe7beb572522a645a Mon Sep 17 00:00:00 2001 From: Sage Weil <sage@inktank.com> Date: Wed, 29 Jan 2014 06:22:25 -0800 Subject: [PATCH] ceph: fix posix ACL hooks The merge of 7221fe4c2 raced with upstream changes in the generic POSIX ACL code (2aeccbe95). Update Ceph to use the new helpers as well by dropping the now-generic functions and setting the set_acl inode op. Signed-off-by: Sage Weil <sage@inktank.com> --- fs/ceph/acl.c | 112 +++----------------------------------------------------- fs/ceph/dir.c | 1 + fs/ceph/inode.c | 5 ++- fs/ceph/super.h | 5 +-- fs/ceph/xattr.c | 5 ++- 5 files changed, 15 insertions(+), 113 deletions(-) diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c index 64fddbc..66d377a 100644 --- a/fs/ceph/acl.c +++ b/fs/ceph/acl.c @@ -107,14 +107,14 @@ struct posix_acl *ceph_get_acl(struct inode *inode, int type) return acl; } -static int ceph_set_acl(struct dentry *dentry, struct inode *inode, - struct posix_acl *acl, int type) +int ceph_set_acl(struct inode *inode, struct posix_acl *acl, int type) { int ret = 0, size = 0; const char *name = NULL; char *value = NULL; struct iattr newattrs; umode_t new_mode = inode->i_mode, old_mode = inode->i_mode; + struct dentry *dentry = d_find_alias(inode); if (acl) { ret = posix_acl_valid(acl); @@ -208,16 +208,15 @@ int ceph_init_acl(struct dentry *dentry, struct inode *inode, struct inode *dir) if (IS_POSIXACL(dir) && acl) { if (S_ISDIR(inode->i_mode)) { - ret = ceph_set_acl(dentry, inode, acl, - ACL_TYPE_DEFAULT); + ret = ceph_set_acl(inode, acl, ACL_TYPE_DEFAULT); if (ret) goto out_release; } - ret = posix_acl_create(&acl, GFP_NOFS, &inode->i_mode); + ret = __posix_acl_create(&acl, GFP_NOFS, &inode->i_mode); if (ret < 0) goto out; else if (ret > 0) - ret = ceph_set_acl(dentry, inode, acl, ACL_TYPE_ACCESS); + ret = ceph_set_acl(inode, acl, ACL_TYPE_ACCESS); else cache_no_acl(inode); } else { @@ -229,104 +228,3 @@ out_release: out: return ret; } - -int ceph_acl_chmod(struct dentry *dentry, struct inode *inode) -{ - struct posix_acl *acl; - int ret = 0; - - if (S_ISLNK(inode->i_mode)) { - ret = -EOPNOTSUPP; - goto out; - } - - if (!IS_POSIXACL(inode)) - goto out; - - acl = ceph_get_acl(inode, ACL_TYPE_ACCESS); - if (IS_ERR_OR_NULL(acl)) { - ret = PTR_ERR(acl); - goto out; - } - - ret = posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode); - if (ret) - goto out; - ret = ceph_set_acl(dentry, inode, acl, ACL_TYPE_ACCESS); - posix_acl_release(acl); -out: - return ret; -} - -static int ceph_xattr_acl_get(struct dentry *dentry, const char *name, - void *value, size_t size, int type) -{ - struct posix_acl *acl; - int ret = 0; - - if (!IS_POSIXACL(dentry->d_inode)) - return -EOPNOTSUPP; - - acl = ceph_get_acl(dentry->d_inode, type); - if (IS_ERR(acl)) - return PTR_ERR(acl); - if (acl == NULL) - return -ENODATA; - - ret = posix_acl_to_xattr(&init_user_ns, acl, value, size); - posix_acl_release(acl); - - return ret; -} - -static int ceph_xattr_acl_set(struct dentry *dentry, const char *name, - const void *value, size_t size, int flags, int type) -{ - int ret = 0; - struct posix_acl *acl = NULL; - - if (!inode_owner_or_capable(dentry->d_inode)) { - ret = -EPERM; - goto out; - } - - if (!IS_POSIXACL(dentry->d_inode)) { - ret = -EOPNOTSUPP; - goto out; - } - - if (value) { - acl = posix_acl_from_xattr(&init_user_ns, value, size); - if (IS_ERR(acl)) { - ret = PTR_ERR(acl); - goto out; - } - - if (acl) { - ret = posix_acl_valid(acl); - if (ret) - goto out_release; - } - } - - ret = ceph_set_acl(dentry, dentry->d_inode, acl, type); - -out_release: - posix_acl_release(acl); -out: - return ret; -} - -const struct xattr_handler ceph_xattr_acl_default_handler = { - .prefix = POSIX_ACL_XATTR_DEFAULT, - .flags = ACL_TYPE_DEFAULT, - .get = ceph_xattr_acl_get, - .set = ceph_xattr_acl_set, -}; - -const struct xattr_handler ceph_xattr_acl_access_handler = { - .prefix = POSIX_ACL_XATTR_ACCESS, - .flags = ACL_TYPE_ACCESS, - .get = ceph_xattr_acl_get, - .set = ceph_xattr_acl_set, -}; diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c index 619616d..6da4df8 100644 --- a/fs/ceph/dir.c +++ b/fs/ceph/dir.c @@ -1303,6 +1303,7 @@ const struct inode_operations ceph_dir_iops = { .listxattr = ceph_listxattr, .removexattr = ceph_removexattr, .get_acl = ceph_get_acl, + .set_acl = ceph_set_acl, .mknod = ceph_mknod, .symlink = ceph_symlink, .mkdir = ceph_mkdir, diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 6fc10a7..32d519d 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -9,6 +9,7 @@ #include <linux/namei.h> #include <linux/writeback.h> #include <linux/vmalloc.h> +#include <linux/posix_acl.h> #include "super.h" #include "mds_client.h" @@ -96,6 +97,7 @@ const struct inode_operations ceph_file_iops = { .listxattr = ceph_listxattr, .removexattr = ceph_removexattr, .get_acl = ceph_get_acl, + .set_acl = ceph_set_acl, }; @@ -1615,6 +1617,7 @@ static const struct inode_operations ceph_symlink_iops = { .listxattr = ceph_listxattr, .removexattr = ceph_removexattr, .get_acl = ceph_get_acl, + .set_acl = ceph_set_acl, }; /* @@ -1805,7 +1808,7 @@ int ceph_setattr(struct dentry *dentry, struct iattr *attr) __mark_inode_dirty(inode, inode_dirty_flags); if (ia_valid & ATTR_MODE) { - err = ceph_acl_chmod(dentry, inode); + err = posix_acl_chmod(inode, attr->ia_mode); if (err) goto out_put; } diff --git a/fs/ceph/super.h b/fs/ceph/super.h index c299f7d..eabf601 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h @@ -718,6 +718,7 @@ extern void ceph_queue_writeback(struct inode *inode); extern int ceph_do_getattr(struct inode *inode, int mask); extern int ceph_permission(struct inode *inode, int mask); extern int ceph_setattr(struct dentry *dentry, struct iattr *attr); +extern int ceph_setattr(struct dentry *dentry, struct iattr *attr); extern int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat); @@ -736,15 +737,13 @@ extern void __init ceph_xattr_init(void); extern void ceph_xattr_exit(void); /* acl.c */ -extern const struct xattr_handler ceph_xattr_acl_access_handler; -extern const struct xattr_handler ceph_xattr_acl_default_handler; extern const struct xattr_handler *ceph_xattr_handlers[]; #ifdef CONFIG_CEPH_FS_POSIX_ACL struct posix_acl *ceph_get_acl(struct inode *, int); +int ceph_set_acl(struct inode *inode, struct posix_acl *acl, int type); int ceph_init_acl(struct dentry *, struct inode *, struct inode *); -int ceph_acl_chmod(struct dentry *, struct inode *); void ceph_forget_all_cached_acls(struct inode *inode); #else diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c index c7581f37..898b656 100644 --- a/fs/ceph/xattr.c +++ b/fs/ceph/xattr.c @@ -6,6 +6,7 @@ #include <linux/ceph/decode.h> #include <linux/xattr.h> +#include <linux/posix_acl_xattr.h> #include <linux/slab.h> #define XATTR_CEPH_PREFIX "ceph." @@ -17,8 +18,8 @@ */ const struct xattr_handler *ceph_xattr_handlers[] = { #ifdef CONFIG_CEPH_FS_POSIX_ACL - &ceph_xattr_acl_access_handler, - &ceph_xattr_acl_default_handler, + &posix_acl_access_xattr_handler, + &posix_acl_default_xattr_handler, #endif NULL, }; -- 1.8.5.1 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [GIT PULL] Ceph updates for -rc1 2014-01-29 14:30 ` Sage Weil @ 2014-01-29 16:36 ` Ilya Dryomov 2014-01-30 10:46 ` Christoph Hellwig 1 sibling, 0 replies; 11+ messages in thread From: Ilya Dryomov @ 2014-01-29 16:36 UTC (permalink / raw) To: Sage Weil Cc: Linus Torvalds, Dave Jones, Linux Kernel Mailing List, Ceph Development, linux-fsdevel, Christoph Hellwig, Al Viro, Guangliang Zhao, Li Wang, Yan, Zheng On Wed, Jan 29, 2014 at 4:30 PM, Sage Weil <sage@inktank.com> wrote: > On Tue, 28 Jan 2014, Sage Weil wrote: >> Hi Linus, >> >> On Tue, 28 Jan 2014, Linus Torvalds wrote: >> > On Tue, Jan 28, 2014 at 1:10 PM, Dave Jones <davej@redhat.com> wrote: >> > > >> > > This breaks the build for me. >> > >> > It is my merge (Christoph's ACL changes came in today through the VFS >> > tree from Al). >> > >> > I was doing the merges today on my laptop (I had jury duty yesterday >> > and today), and so I didn't do the allmodconfig build I would normally >> > do on my (much faster) desktop. Well, actually I did do the full fs >> > builds for the earlier pulls that actually had some conflicts, but not >> > for the ceph pull. The conflict was hidden by the fact that the whole >> > cifs ACL support is new, so there was no data conflict, just a silent >> > semantic conflict between the new smarter ACL helpers and the new ACL >> > use in CIFS. >> >> s/cifs/ceph/ :) >> >> > I'm back home now (yay, all the afternoon cases got settled), and I >> > see the problem now. I should have done an allmodconfig build >> > immediately after coming home, but I never even thought of it. >> > >> > Anyway, here's an *untested* conversion to the new posix acl helper >> > infrastructure. I do wonder if ceph_init_acl() could be converted to >> > posix_acl_create(), right now that part is a "non-conversion" - it's >> > just made to use __posix_acl_create() that implements the old >> > interface. >> > >> > Al, Christoph, can you please check my conversion for sanity from a >> > generic posix-acl standpoint? >> > >> > Sage, Guangliang, Li, can you check the actual cifs usage/sanity of >> > the attached patch? >> >> Superficially at least the conversion looks okay to me, but it's not >> passing my smoke test (it's giving me EOPNOTSUPP for chmod and setxattr >> when setting an ACL). I'll look at it tomorrow if Guangliang, Li, or Yan >> don't get there first. > > The set_acl inode_operation wasn't getting set, and the prototype needed > to be adjusted a bit (it doesn't take a dentry anymore). All seems to be > well with the below patch. > > Thanks! > sage > > > From 01baa54e113060eb9147548fe7beb572522a645a Mon Sep 17 00:00:00 2001 > From: Sage Weil <sage@inktank.com> > Date: Wed, 29 Jan 2014 06:22:25 -0800 > Subject: [PATCH] ceph: fix posix ACL hooks > > The merge of 7221fe4c2 raced with upstream changes in the generic POSIX > ACL code (2aeccbe95). Update Ceph to use the new helpers as well by > dropping the now-generic functions and setting the set_acl inode op. > > Signed-off-by: Sage Weil <sage@inktank.com> > --- > fs/ceph/acl.c | 112 +++----------------------------------------------------- > fs/ceph/dir.c | 1 + > fs/ceph/inode.c | 5 ++- > fs/ceph/super.h | 5 +-- > fs/ceph/xattr.c | 5 ++- > 5 files changed, 15 insertions(+), 113 deletions(-) > > diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c > index 64fddbc..66d377a 100644 > --- a/fs/ceph/acl.c > +++ b/fs/ceph/acl.c > @@ -107,14 +107,14 @@ struct posix_acl *ceph_get_acl(struct inode *inode, int type) > return acl; > } > > -static int ceph_set_acl(struct dentry *dentry, struct inode *inode, > - struct posix_acl *acl, int type) > +int ceph_set_acl(struct inode *inode, struct posix_acl *acl, int type) > { > int ret = 0, size = 0; > const char *name = NULL; > char *value = NULL; > struct iattr newattrs; > umode_t new_mode = inode->i_mode, old_mode = inode->i_mode; > + struct dentry *dentry = d_find_alias(inode); > > if (acl) { > ret = posix_acl_valid(acl); > @@ -208,16 +208,15 @@ int ceph_init_acl(struct dentry *dentry, struct inode *inode, struct inode *dir) > > if (IS_POSIXACL(dir) && acl) { > if (S_ISDIR(inode->i_mode)) { > - ret = ceph_set_acl(dentry, inode, acl, > - ACL_TYPE_DEFAULT); > + ret = ceph_set_acl(inode, acl, ACL_TYPE_DEFAULT); > if (ret) > goto out_release; > } > - ret = posix_acl_create(&acl, GFP_NOFS, &inode->i_mode); > + ret = __posix_acl_create(&acl, GFP_NOFS, &inode->i_mode); > if (ret < 0) > goto out; > else if (ret > 0) > - ret = ceph_set_acl(dentry, inode, acl, ACL_TYPE_ACCESS); > + ret = ceph_set_acl(inode, acl, ACL_TYPE_ACCESS); > else > cache_no_acl(inode); > } else { > @@ -229,104 +228,3 @@ out_release: > out: > return ret; > } > - > -int ceph_acl_chmod(struct dentry *dentry, struct inode *inode) > -{ > - struct posix_acl *acl; > - int ret = 0; > - > - if (S_ISLNK(inode->i_mode)) { > - ret = -EOPNOTSUPP; > - goto out; > - } > - > - if (!IS_POSIXACL(inode)) > - goto out; > - > - acl = ceph_get_acl(inode, ACL_TYPE_ACCESS); > - if (IS_ERR_OR_NULL(acl)) { > - ret = PTR_ERR(acl); > - goto out; > - } > - > - ret = posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode); > - if (ret) > - goto out; > - ret = ceph_set_acl(dentry, inode, acl, ACL_TYPE_ACCESS); > - posix_acl_release(acl); > -out: > - return ret; > -} > - > -static int ceph_xattr_acl_get(struct dentry *dentry, const char *name, > - void *value, size_t size, int type) > -{ > - struct posix_acl *acl; > - int ret = 0; > - > - if (!IS_POSIXACL(dentry->d_inode)) > - return -EOPNOTSUPP; > - > - acl = ceph_get_acl(dentry->d_inode, type); > - if (IS_ERR(acl)) > - return PTR_ERR(acl); > - if (acl == NULL) > - return -ENODATA; > - > - ret = posix_acl_to_xattr(&init_user_ns, acl, value, size); > - posix_acl_release(acl); > - > - return ret; > -} > - > -static int ceph_xattr_acl_set(struct dentry *dentry, const char *name, > - const void *value, size_t size, int flags, int type) > -{ > - int ret = 0; > - struct posix_acl *acl = NULL; > - > - if (!inode_owner_or_capable(dentry->d_inode)) { > - ret = -EPERM; > - goto out; > - } > - > - if (!IS_POSIXACL(dentry->d_inode)) { > - ret = -EOPNOTSUPP; > - goto out; > - } > - > - if (value) { > - acl = posix_acl_from_xattr(&init_user_ns, value, size); > - if (IS_ERR(acl)) { > - ret = PTR_ERR(acl); > - goto out; > - } > - > - if (acl) { > - ret = posix_acl_valid(acl); > - if (ret) > - goto out_release; > - } > - } > - > - ret = ceph_set_acl(dentry, dentry->d_inode, acl, type); > - > -out_release: > - posix_acl_release(acl); > -out: > - return ret; > -} > - > -const struct xattr_handler ceph_xattr_acl_default_handler = { > - .prefix = POSIX_ACL_XATTR_DEFAULT, > - .flags = ACL_TYPE_DEFAULT, > - .get = ceph_xattr_acl_get, > - .set = ceph_xattr_acl_set, > -}; > - > -const struct xattr_handler ceph_xattr_acl_access_handler = { > - .prefix = POSIX_ACL_XATTR_ACCESS, > - .flags = ACL_TYPE_ACCESS, > - .get = ceph_xattr_acl_get, > - .set = ceph_xattr_acl_set, > -}; > diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c > index 619616d..6da4df8 100644 > --- a/fs/ceph/dir.c > +++ b/fs/ceph/dir.c > @@ -1303,6 +1303,7 @@ const struct inode_operations ceph_dir_iops = { > .listxattr = ceph_listxattr, > .removexattr = ceph_removexattr, > .get_acl = ceph_get_acl, > + .set_acl = ceph_set_acl, > .mknod = ceph_mknod, > .symlink = ceph_symlink, > .mkdir = ceph_mkdir, > diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c > index 6fc10a7..32d519d 100644 > --- a/fs/ceph/inode.c > +++ b/fs/ceph/inode.c > @@ -9,6 +9,7 @@ > #include <linux/namei.h> > #include <linux/writeback.h> > #include <linux/vmalloc.h> > +#include <linux/posix_acl.h> > > #include "super.h" > #include "mds_client.h" > @@ -96,6 +97,7 @@ const struct inode_operations ceph_file_iops = { > .listxattr = ceph_listxattr, > .removexattr = ceph_removexattr, > .get_acl = ceph_get_acl, > + .set_acl = ceph_set_acl, > }; > > > @@ -1615,6 +1617,7 @@ static const struct inode_operations ceph_symlink_iops = { > .listxattr = ceph_listxattr, > .removexattr = ceph_removexattr, > .get_acl = ceph_get_acl, > + .set_acl = ceph_set_acl, > }; > > /* > @@ -1805,7 +1808,7 @@ int ceph_setattr(struct dentry *dentry, struct iattr *attr) > __mark_inode_dirty(inode, inode_dirty_flags); > > if (ia_valid & ATTR_MODE) { > - err = ceph_acl_chmod(dentry, inode); > + err = posix_acl_chmod(inode, attr->ia_mode); > if (err) > goto out_put; > } > diff --git a/fs/ceph/super.h b/fs/ceph/super.h > index c299f7d..eabf601 100644 > --- a/fs/ceph/super.h > +++ b/fs/ceph/super.h > @@ -718,6 +718,7 @@ extern void ceph_queue_writeback(struct inode *inode); > extern int ceph_do_getattr(struct inode *inode, int mask); > extern int ceph_permission(struct inode *inode, int mask); > extern int ceph_setattr(struct dentry *dentry, struct iattr *attr); > +extern int ceph_setattr(struct dentry *dentry, struct iattr *attr); > extern int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry, > struct kstat *stat); > > @@ -736,15 +737,13 @@ extern void __init ceph_xattr_init(void); > extern void ceph_xattr_exit(void); > > /* acl.c */ > -extern const struct xattr_handler ceph_xattr_acl_access_handler; > -extern const struct xattr_handler ceph_xattr_acl_default_handler; > extern const struct xattr_handler *ceph_xattr_handlers[]; > > #ifdef CONFIG_CEPH_FS_POSIX_ACL > > struct posix_acl *ceph_get_acl(struct inode *, int); > +int ceph_set_acl(struct inode *inode, struct posix_acl *acl, int type); > int ceph_init_acl(struct dentry *, struct inode *, struct inode *); > -int ceph_acl_chmod(struct dentry *, struct inode *); > void ceph_forget_all_cached_acls(struct inode *inode); > > #else Sage missed the '#define ceph_set_acl NULL' for the !CEPH_FS_POSIX_ACL case. v2 should be in-reply-to this message. Thanks, Ilya ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [GIT PULL] Ceph updates for -rc1 2014-01-29 14:30 ` Sage Weil 2014-01-29 16:36 ` Ilya Dryomov @ 2014-01-30 10:46 ` Christoph Hellwig 1 sibling, 0 replies; 11+ messages in thread From: Christoph Hellwig @ 2014-01-30 10:46 UTC (permalink / raw) To: Sage Weil Cc: Linus Torvalds, Dave Jones, Linux Kernel Mailing List, ceph-devel, linux-fsdevel, Christoph Hellwig, Al Viro, Guangliang Zhao, Li Wang, zheng.z.yan On Wed, Jan 29, 2014 at 06:30:00AM -0800, Sage Weil wrote: > The set_acl inode_operation wasn't getting set, and the prototype needed > to be adjusted a bit (it doesn't take a dentry anymore). All seems to be > well with the below patch. Btw, there's a few minor bits that should go on top of yours: - ->get_acl only gets called after we checked for a cached ACL, so no need to call get_cached_acl again. - no need to check IS_POSIXACL in ->get_acl, without that it should never get set as all the callers that set it already have the check. - you should be able to use the full posix_acl_create in CEPH Untested patch below: diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c index 66d377a..9ab312e 100644 --- a/fs/ceph/acl.c +++ b/fs/ceph/acl.c @@ -66,13 +66,6 @@ struct posix_acl *ceph_get_acl(struct inode *inode, int type) char *value = NULL; struct posix_acl *acl; - if (!IS_POSIXACL(inode)) - return NULL; - - acl = ceph_get_cached_acl(inode, type); - if (acl != ACL_NOT_CACHED) - return acl; - switch (type) { case ACL_TYPE_ACCESS: name = POSIX_ACL_XATTR_ACCESS; @@ -190,41 +183,24 @@ out: int ceph_init_acl(struct dentry *dentry, struct inode *inode, struct inode *dir) { - struct posix_acl *acl = NULL; - int ret = 0; - - if (!S_ISLNK(inode->i_mode)) { - if (IS_POSIXACL(dir)) { - acl = ceph_get_acl(dir, ACL_TYPE_DEFAULT); - if (IS_ERR(acl)) { - ret = PTR_ERR(acl); - goto out; - } - } + struct posix_acl *default_acl, *acl; + int error; - if (!acl) - inode->i_mode &= ~current_umask(); - } + error = posix_acl_create(dir, &inode->i_mode, &default_acl, &acl); + if (error) + return error; - if (IS_POSIXACL(dir) && acl) { - if (S_ISDIR(inode->i_mode)) { - ret = ceph_set_acl(inode, acl, ACL_TYPE_DEFAULT); - if (ret) - goto out_release; - } - ret = __posix_acl_create(&acl, GFP_NOFS, &inode->i_mode); - if (ret < 0) - goto out; - else if (ret > 0) - ret = ceph_set_acl(inode, acl, ACL_TYPE_ACCESS); - else - cache_no_acl(inode); - } else { + if (!default_acl && !acl) cache_no_acl(inode); - } -out_release: - posix_acl_release(acl); -out: - return ret; + if (default_acl) { + error = ceph_set_acl(inode, default_acl, ACL_TYPE_DEFAULT); + posix_acl_release(default_acl); + } + if (acl) { + if (!error) + error = ceph_set_acl(inode, acl, ACL_TYPE_ACCESS); + posix_acl_release(acl); + } + return error; } ^ permalink raw reply [flat|nested] 11+ messages in thread
* [GIT PULL] Ceph updates for -rc1
@ 2012-10-06 18:48 Sage Weil
0 siblings, 0 replies; 11+ messages in thread
From: Sage Weil @ 2012-10-06 18:48 UTC (permalink / raw)
To: torvalds; +Cc: ceph-devel, linux-kernel
Hi Linus,
Please pull the following Ceph changes from
git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git for-linus
The bulk of this pull is a series from Alex that refactors and cleans up
the RBD code to lay the groundwork for supporting the new image format and
evolving feature set. There are also some cleanups in libceph, and for
ceph there's fixed validation of file striping layouts and a bugfix in
the code handling a shrinking MDS cluster.
Thanks!
sage
----------------------------------------------------------------
Alex Elder (62):
rbd: simplify __rbd_init_snaps_header()
rbd: make snap_names_len a u64
rbd: ensure invalid pointers are made null
rbd: use sizeof (object) instead of sizeof (type)
rbd: rearrange rbd_header_from_disk()
rbd: return earlier in rbd_header_from_disk()
rbd: expand rbd_dev_ondisk_valid() checks
rbd: separate reading header from decoding it
ceph: let path portion of mount "device" be optional
rbd: rename block_name -> object_prefix
rbd: add new snapshots at the tail
rbd: handle locking inside __rbd_client_find()
rbd: don't over-allocate space for object prefix
rbd: kill incore snap_names_len
rbd: more cleanup in rbd_header_from_disk()
rbd: move rbd_opts to struct rbd_device
rbd: add read_only rbd map option
rbd: kill notify_timeout option
rbd: bio_chain_clone() cleanups
rbd: drop needless test in rbd_rq_fn()
rbd: check for overflow in rbd_get_num_segments()
rbd: split up rbd_get_segment()
rbd: define rbd_assert()
rbd: rename rbd_id_get()
rbd: rename __rbd_init_snaps_header()
rbd: kill rbd_dev->q
rbd: kill rbd_image_header->total_snaps
rbd: separate mapping info in rbd_dev
rbd: record mapped size
rbd: return snap name from rbd_add_parse_args()
rbd: set mapping name with the rest
rbd: simplify snap_by_name() interface
rbd: do some header initialization earlier
rbd: simplify rbd_init_disk() a bit
rbd: move locking out of rbd_header_set_snap()
rbd: don't register snapshots in bus_add_dev()
rbd: use snaps list in rbd_snap_by_name()
rbd: assign header name later
rbd: defer registering snapshot devices
rbd: call set_snap() before snap_devs_update()
rbd: read the header before registering device
rbd: defer setting device id
rbd: call rbd_init_disk() sooner
rbd: drop dev registration check for new snap
rbd: set initial capacity in rbd_init_disk()
rbd: set up watch before announcing disk
rbd: pass flags to rbd_req_sync_exec()
rbd: support data returned from OSD methods
rbd: define some new format constants
rbd: define rbd_dev_image_id()
rbd: kill create_snap sysfs entry
rbd: don't use index in __rbd_add_snap_dev()
rbd: add an rbd features field
rbd: encapsulate code that gets snapshot info
rbd: lay out header probe infrastructure
rbd: add code to get the size of a v2 rbd image
rbd: get the object prefix for a v2 rbd image
rbd: get image features for a v2 image
rbd: get the snapshot context for a v2 image
rbd: get snapshot name for a v2 image
rbd: update remaining header fields for v2
ceph: avoid 32-bit page index overflow
Iulius Curt (1):
libceph: Fix sparse warning
Sage Weil (5):
libceph: remove unused monc->have_fsid
libceph: check for invalid mapping
ceph: propagate layout error on osd request creation
rbd: BUG on invalid layout
ceph: return EIO on invalid layout on GET_DATALOC ioctl
Wei Yongjun (2):
ceph: use list_move_tail instead of list_del/list_add_tail
ceph: convert to use le32_add_cpu()
Yan, Zheng (1):
ceph: Fix oops when handling mdsmap that decreases max_mds
Documentation/ABI/testing/sysfs-bus-rbd | 18 +-
drivers/block/rbd.c | 1790 ++++++++++++++++++++-----------
drivers/block/rbd_types.h | 27 +-
fs/ceph/addr.c | 19 +-
fs/ceph/caps.c | 2 +-
fs/ceph/file.c | 4 +-
fs/ceph/ioctl.c | 8 +-
fs/ceph/mds_client.c | 3 +-
fs/ceph/super.c | 37 +-
include/linux/ceph/mon_client.h | 1 -
include/linux/ceph/osd_client.h | 2 +-
include/linux/ceph/osdmap.h | 6 +-
net/ceph/mon_client.c | 7 +-
net/ceph/osd_client.c | 47 +-
net/ceph/osdmap.c | 18 +-
net/ceph/pagelist.c | 5 +-
16 files changed, 1302 insertions(+), 692 deletions(-)
^ permalink raw reply [flat|nested] 11+ messages in thread* [GIT PULL] Ceph updates for -rc1
@ 2011-05-25 17:49 Sage Weil
0 siblings, 0 replies; 11+ messages in thread
From: Sage Weil @ 2011-05-25 17:49 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel, ceph-devel
Hi Linus,
Please pull the following Ceph updates for 3.0.0-rc1 (or whatever it ends
up being) from
git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git for-linus
Most of this is a pile of small, rare bugs that the coverity run
turned up. There are also several bug fixes that came up in the real
world, including a messenger race, looping with concurrent syncs, and a
dangling pointer under directory rename thrashing (fsstress). RBD now
notices when the image size changes out from underneath it, and there are
a few improvements in the NFS reexport code to make it more robust.
Thanks!
sage
Sage Weil (23):
ceph: take reference on mds request r_unsafe_dir
libceph: handle connection reopen race with callbacks
libceph: remove unused variable
libceph: fix uninitialized value when no get_authorizer method is set
ceph: use snprintf for dirstat content
libceph: use snprintf for formatting object name
libceph: use snprintf for unknown addrs
ceph: fix rare potential cap leak
libceph: fix osdmap timestamp assignment
ceph: fix broken comparison in readdir loop
libceph: fix TAG_WAIT case
libceph: add missing breaks in addr_set_port
ceph: remove useless check
ceph: check return value for start_request in writepages
rbd: warn on update_snaps failure on notify
rbd: cleanup: make kfree match kmalloc
rbd: use snprintf for disk->disk_name
ceph: use LOOKUPINO to make unconnected nfs fh more reliable
ceph: avoid inode lookup on nfs fh reconnect
rbd: handle online resize of underlying rbd image
libceph: handle new osdmap down/state change encoding
libceph: subscribe to osdmap when cluster is full
ceph: fix cap flush race reentrancy
drivers/block/rbd.c | 27 +++++++++-----
fs/ceph/addr.c | 5 +--
fs/ceph/caps.c | 61 ++++++++++++++++---------------
fs/ceph/dir.c | 7 ++--
fs/ceph/export.c | 25 +++++++++++--
fs/ceph/mds_client.c | 7 +++-
fs/ceph/mds_client.h | 1 +
include/linux/ceph/ceph_fs.h | 1 +
net/ceph/messenger.c | 82 ++++++++++++++++++++++++++++++++----------
net/ceph/osd_client.c | 19 +++++++++-
net/ceph/osdmap.c | 13 +++++--
11 files changed, 173 insertions(+), 75 deletions(-)
^ permalink raw reply [flat|nested] 11+ messages in threadend of thread, other threads:[~2016-01-24 14:51 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-01-24 14:51 [GIT PULL] Ceph updates for -rc1 Sage Weil -- strict thread matches above, loose matches on Subject: below -- 2015-07-02 16:29 Sage Weil 2014-01-28 18:40 Sage Weil 2014-01-28 21:10 ` Dave Jones 2014-01-28 21:48 ` Linus Torvalds 2014-01-29 6:08 ` Sage Weil 2014-01-29 14:30 ` Sage Weil 2014-01-29 16:36 ` Ilya Dryomov 2014-01-30 10:46 ` Christoph Hellwig 2012-10-06 18:48 Sage Weil 2011-05-25 17:49 Sage Weil
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®