Re: [PATCH v3 1/4] ceph: add __ceph_get_caps helper support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 10/28/21 6:44 PM, Jeff Layton wrote:
I see your cover letter for this series on the list. You may just be
running across how gmail's (infuriating) labeling works? I don't think
they ever show up in patchwork though (since they don't have patches in
them).

Okay, I searched the cover-letters everywhere, still couldn't see them suddenly since last week :-(



-- Jeff


On Thu, 2021-10-28 at 17:23 +0800, Xiubo Li wrote:
Hi Jeff,

Not sure why the cover-letter is not displayed in both the mail list and
ceph patchwork, locally it was successfully sent out.

Any idea ?

Thanks

-- Xiubo


On 10/28/21 5:14 PM, xiubli@xxxxxxxxxx wrote:
From: Xiubo Li <xiubli@xxxxxxxxxx>

Signed-off-by: Xiubo Li <xiubli@xxxxxxxxxx>
---
   fs/ceph/caps.c  | 19 +++++++++++++------
   fs/ceph/super.h |  2 ++
   2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index d628dcdbf869..4e2a588465c5 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -2876,10 +2876,9 @@ int ceph_try_get_caps(struct inode *inode, int need, int want,
    * due to a small max_size, make sure we check_max_size (and possibly
    * ask the mds) so we don't get hung up indefinitely.
    */
-int ceph_get_caps(struct file *filp, int need, int want, loff_t endoff, int *got)
+int __ceph_get_caps(struct inode *inode, struct ceph_file_info *fi, int need,
+		    int want, loff_t endoff, int *got)
   {
-	struct ceph_file_info *fi = filp->private_data;
-	struct inode *inode = file_inode(filp);
   	struct ceph_inode_info *ci = ceph_inode(inode);
   	struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
   	int ret, _got, flags;
@@ -2888,7 +2887,7 @@ int ceph_get_caps(struct file *filp, int need, int want, loff_t endoff, int *got
   	if (ret < 0)
   		return ret;
- if ((fi->fmode & CEPH_FILE_MODE_WR) &&
+	if (fi && (fi->fmode & CEPH_FILE_MODE_WR) &&
   	    fi->filp_gen != READ_ONCE(fsc->filp_gen))
   		return -EBADF;
@@ -2896,7 +2895,7 @@ int ceph_get_caps(struct file *filp, int need, int want, loff_t endoff, int *got while (true) {
   		flags &= CEPH_FILE_MODE_MASK;
-		if (atomic_read(&fi->num_locks))
+		if (fi && atomic_read(&fi->num_locks))
   			flags |= CHECK_FILELOCK;
   		_got = 0;
   		ret = try_get_cap_refs(inode, need, want, endoff,
@@ -2941,7 +2940,7 @@ int ceph_get_caps(struct file *filp, int need, int want, loff_t endoff, int *got
   				continue;
   		}
- if ((fi->fmode & CEPH_FILE_MODE_WR) &&
+		if (fi && (fi->fmode & CEPH_FILE_MODE_WR) &&
   		    fi->filp_gen != READ_ONCE(fsc->filp_gen)) {
   			if (ret >= 0 && _got)
   				ceph_put_cap_refs(ci, _got);
@@ -3004,6 +3003,14 @@ int ceph_get_caps(struct file *filp, int need, int want, loff_t endoff, int *got
   	return 0;
   }
+int ceph_get_caps(struct file *filp, int need, int want, loff_t endoff, int *got)
+{
+	struct ceph_file_info *fi = filp->private_data;
+	struct inode *inode = file_inode(filp);
+
+	return __ceph_get_caps(inode, fi, need, want, endoff, got);
+}
+
   /*
    * Take cap refs.  Caller must already know we hold at least one ref
    * on the caps in question or we don't know this is safe.
diff --git a/fs/ceph/super.h b/fs/ceph/super.h
index 7f3976b3319d..027d5f579ba0 100644
--- a/fs/ceph/super.h
+++ b/fs/ceph/super.h
@@ -1208,6 +1208,8 @@ extern int ceph_encode_dentry_release(void **p, struct dentry *dn,
   				      struct inode *dir,
   				      int mds, int drop, int unless);
+extern int __ceph_get_caps(struct inode *inode, struct ceph_file_info *fi,
+			   int need, int want, loff_t endoff, int *got);
   extern int ceph_get_caps(struct file *filp, int need, int want,
   			 loff_t endoff, int *got);
   extern int ceph_try_get_caps(struct inode *inode,




[Index of Archives]     [CEPH Users]     [Ceph Large]     [Ceph Dev]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux