diff mbox series

回覆: [PATCH v3 1/2] ceph: skip copying the data extends the file EOF

Message ID SEZPR04MB6972BF98FD1F4CD9D6C93516B72C2@SEZPR04MB6972.apcprd04.prod.outlook.com
State New
Headers show
Series ceph: skip copying the data extends the file EOF | expand

Commit Message

Frank Hsiao 蕭法宣 March 19, 2024, 8:02 a.m. UTC
Thanks Ilya for pointing this out.
I've tested the new patch and it looks good.

Reviewed-by: Frank Hsiao 蕭法宣 <frankhsiao@qnap.com>
Tested-by: Frank Hsiao 蕭法宣 <frankhsiao@qnap.com>
diff mbox series

Patch

diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 24a003eaa5e0..c35878427985 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -1200,7 +1200,12 @@  ssize_t __ceph_sync_read(struct inode *inode, loff_t *ki_pos,
                }

                idx = 0;
-               left = ret > 0 ? ret : 0;
+               if (ret <= 0)
+                       left = 0;
+               else if (off + ret > i_size)
+                       left = i_size - off;
+               else
+                       left = ret;
                while (left > 0) {
                        size_t plen, copied;

@@ -1229,15 +1234,13 @@  ssize_t __ceph_sync_read(struct inode *inode, loff_t *ki_pos,
        }

        if (ret > 0) {
-               if (off > *ki_pos) {
-                       if (off >= i_size) {
-                               *retry_op = CHECK_EOF;
-                               ret = i_size - *ki_pos;
-                               *ki_pos = i_size;
-                       } else {
-                               ret = off - *ki_pos;
-                               *ki_pos = off;
-                       }
+               if (off >= i_size) {
+                       *retry_op = CHECK_EOF;
+                       ret = i_size - *ki_pos;
+                       *ki_pos = i_size;
+               } else {
+                       ret = off - *ki_pos;
+                       *ki_pos = off;
                }

                if (last_objver)