ceph: allow sync_read/write return partial successed size of read/write.
PATCH 1/1 ceph: allow sync_read/write return partial successed size of read/write.
Hi Sage:
This patch based on my previous patch"ceph: fix bugs about handling short-read for sync read mode".
I can't see this patch in ceph-client#testing.Maybe you forget it ?
Thanks!
Jianpeng Ma
For sync_read/write, it may do multi stripe operations.If one of those met erro, we return the former successed size rather than a error value. There is a exception for write-operation met -EOLDSNAPC.If this occur,we retry the whole write again.
--- fs/ceph/file.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
fs/ceph/file.c +3 -2
@@ -373,7 +373,7 @@ more: goto more; } -if (ret >=0 ) { +if (read >0 ) { ret = read;/* did we bounce off eof? */ if (pos + left > inode->i_size)
@@ -611,7 +611,8 @@ out:if (check_caps)ceph_check_caps (ceph_inode (inode),CHECK_CAPS_AUTHONLY ,NULL ); - } + }else if (ret != -EOLDSNAPC && written >0 ) + ret = written;return ret; }
Signature · 1 line
1.8.1.2
Quoted 3 lines · majianpeng
Hi Sage:
This patch based on my previous patch"ceph: fix bugs about handling short-read for sync read mode".
I can't see this patch in ceph-client#testing.Maybe you forget it ?
Whoops, I did! I've pulled both patches into the testing branch now.
Yan, did you want to look at this?
sage
Quoted 40 lines
Thanks!
Jianpeng MaFor sync_read/write, it may do multi stripe operations.If one of those met erro, we return the former successed size rather than a error value. There is a exception for write-operation met -EOLDSNAPC.If this occur,we retry the whole write again.
Signed-off-by Jianpeng Ma <[email protected]>--- fs/ceph/file.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)fs/ceph/file.c +3
-2@@ -373,7 +373,7 @@ more: goto more; } -if (ret >=0 ) { +if (read >0 ) { ret = read;/* did we bounce off eof? */ if (pos + left > inode->i_size)@@ -611,7 +611,8 @@ out:if (check_caps)ceph_check_caps (ceph_inode (inode),CHECK_CAPS_AUTHONLY ,NULL ); - } + }else if (ret != -EOLDSNAPC && written >0 ) + ret = written;return ret; }Signature · 2 lines
1.8.1.2 N?????r??y????b?X????v?^?)??{.n?+???z?]z???{ay??????,j??f???h???z??w??????j:+v???w?j?m????????zZ+???????j"??!?i
Quoted 8 lines · Sage Weil
Quoted 3 lines · majianpeng
Hi Sage:
This patch based on my previous patch"ceph: fix bugs about handling short-read for sync read mode".
I can't see this patch in ceph-client#testing.Maybe you forget it ?Whoops, I did! I've pulled both patches into the testing branch now.
Yan, did you want to look at this?
the patch looks good.
Yan, Zheng
Quoted 42 lines
sage
Quoted 40 lines
Thanks!
Jianpeng MaFor sync_read/write, it may do multi stripe operations.If one of those met erro, we return the former successed size rather than a error value. There is a exception for write-operation met -EOLDSNAPC.If this occur,we retry the whole write again.
Signed-off-by Jianpeng Ma <[email protected]>--- fs/ceph/file.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)fs/ceph/file.c +3
-2@@ -373,7 +373,7 @@ more: goto more; } -if (ret >=0 ) { +if (read >0 ) { ret = read;/* did we bounce off eof? */ if (pos + left > inode->i_size)@@ -611,7 +611,8 @@ out:if (check_caps)ceph_check_caps (ceph_inode (inode),CHECK_CAPS_AUTHONLY ,NULL ); - } + }else if (ret != -EOLDSNAPC && written >0 ) + ret = written;return ret; }Signature · 2 lines
1.8.1.2 N?????r??y????b?X????v?^?)??{.n?+???z?]z???{ay??????,j??f???h???z??w??????j:+v???w?j?m????????zZ+???????j"??!?i