Skip to contentSkip to conversation

ceph: allow sync_read/write return partial successed size of read/write.

PATCH In review majianpeng 3 participants 3 messages Aug 21, 2013 – Aug 22, 2013 Ceph client

lore
Share & tools
lore

majianpeng

author
#0 lore raw

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
index 69c4669..dd525c5 100644
@@ -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
#1 lore raw
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 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
index 69c4669..dd525c5 100644
@@ -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
#2 lore raw
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 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
index 69c4669..dd525c5 100644
@@ -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