diff options
author | Luis Henriques <lhenriques@suse.com> | 2018-10-15 18:45:57 +0300 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2018-10-22 11:28:23 +0300 |
commit | 2ee9dd958d474252510b8c4dc216aa1dab7ad272 (patch) | |
tree | 176b6bb4260127b5c1ea310c5e742dfc2785f1af /fs/ceph/caps.c | |
parent | 98c4bfe9d89b22d7bfddf6469241658920b6fafe (diff) | |
download | linux-2ee9dd958d474252510b8c4dc216aa1dab7ad272.tar.xz |
ceph: add non-blocking parameter to ceph_try_get_caps()
ceph_try_get_caps currently calls try_get_cap_refs with the nonblock
parameter always set to 'true'. This change adds a new parameter that
allows to set it's value. This will be useful for a follow-up patch that
will need to get two sets of capabilities for two different inodes without
risking a deadlock.
Signed-off-by: Luis Henriques <lhenriques@suse.com>
Reviewed-by: "Yan, Zheng" <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'fs/ceph/caps.c')
-rw-r--r-- | fs/ceph/caps.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index f36946fdfb00..f3496db4bb3e 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c @@ -2673,17 +2673,18 @@ static void check_max_size(struct inode *inode, loff_t endoff) ceph_check_caps(ci, CHECK_CAPS_AUTHONLY, NULL); } -int ceph_try_get_caps(struct ceph_inode_info *ci, int need, int want, int *got) +int ceph_try_get_caps(struct ceph_inode_info *ci, int need, int want, + bool nonblock, int *got) { int ret, err = 0; BUG_ON(need & ~CEPH_CAP_FILE_RD); - BUG_ON(want & ~(CEPH_CAP_FILE_CACHE|CEPH_CAP_FILE_LAZYIO)); + BUG_ON(want & ~(CEPH_CAP_FILE_CACHE|CEPH_CAP_FILE_LAZYIO|CEPH_CAP_FILE_SHARED)); ret = ceph_pool_perm_check(ci, need); if (ret < 0) return ret; - ret = try_get_cap_refs(ci, need, want, 0, true, got, &err); + ret = try_get_cap_refs(ci, need, want, 0, nonblock, got, &err); if (ret) { if (err == -EAGAIN) { ret = 0; |