]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw_file: fix write error when the write offset overlaps. 17809/head
authorYao Zongyou <yaozongyou@vip.qq.com>
Sun, 24 Sep 2017 14:11:22 +0000 (22:11 +0800)
committerYao Zongyou <yaozongyou@vip.qq.com>
Sun, 24 Sep 2017 14:11:22 +0000 (22:11 +0800)
Signed-off-by: Yao Zongyou <yaozongyou@vip.qq.com>
src/rgw/rgw_file.cc

index f21216698be3536622c666bd0c0f07cbcb6dbc69..fa3d373a0f242a19b420fbcbe76126ecf5b0e7a3 100644 (file)
@@ -1159,6 +1159,15 @@ namespace rgw {
       }
     }
 
+    int overlap = 0;
+    if ((static_cast<off_t>(off) < f->write_req->real_ofs) &&
+        ((f->write_req->real_ofs - off) <= len)) {
+      overlap = f->write_req->real_ofs - off;
+      off = f->write_req->real_ofs;
+      buffer = static_cast<char*>(buffer) + overlap;
+      len -= overlap;
+    }
+
     buffer::list bl;
     /* XXXX */
 #if 0
@@ -1195,7 +1204,7 @@ namespace rgw {
       rc = -EIO;
     }
 
-    *bytes_written = (rc == 0) ? len : 0;
+    *bytes_written = (rc == 0) ? (len + overlap) : 0;
     return rc;
   } /* RGWFileHandle::write */