On Tue, Mar 19, 2024 at 1:32 AM <xiubli@xxxxxxxxxx> wrote: > > From: Xiubo Li <xiubli@xxxxxxxxxx> > > In case of hitting the file EOF the ceph_read_iter() needs to > retrieve the file size from MDS, and the Fr caps is not a neccessary. > > URL: https://patchwork.kernel.org/project/ceph-devel/list/?series=819323 > Reported-by: Frank Hsiao 蕭法宣 <frankhsiao@xxxxxxxx> > Signed-off-by: Xiubo Li <xiubli@xxxxxxxxxx> > Tested-by: Frank Hsiao 蕭法宣 <frankhsiao@xxxxxxxx> > --- > fs/ceph/file.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/fs/ceph/file.c b/fs/ceph/file.c > index c35878427985..a85f95c941fc 100644 > --- a/fs/ceph/file.c > +++ b/fs/ceph/file.c > @@ -2191,14 +2191,16 @@ static ssize_t ceph_read_iter(struct kiocb *iocb, struct iov_iter *to) > int statret; > struct page *page = NULL; > loff_t i_size; > + int mask = CEPH_STAT_CAP_SIZE; > if (retry_op == READ_INLINE) { > page = __page_cache_alloc(GFP_KERNEL); > if (!page) > return -ENOMEM; > } > > - statret = __ceph_do_getattr(inode, page, > - CEPH_STAT_CAP_INLINE_DATA, !!page); > + if (retry_op == READ_INLINE) > + mask = CEPH_STAT_CAP_INLINE_DATA; Hi Xiubo, This introduces an additional retry_op == READ_INLINE branch right below an existing one. Should this be: int mask = CEPH_STAT_CAP_SIZE; if (retry_op == READ_INLINE) { page = __page_cache_alloc(GFP_KERNEL); if (!page) return -ENOMEM; mask = CEPH_STAT_CAP_INLINE_DATA; } Thanks, Ilya