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). -- 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, > -- Jeff Layton <jlayton@xxxxxxxxxx>