On 3/19/24 21:35, Ilya Dryomov wrote:
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;
}
Look good to me.
Thanks Ilya.
- Xiubo
Thanks,
Ilya