]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw_file: fix write error when the write offset overlaps. 18433/head
authorYao Zongyou <yaozongyou@vip.qq.com>
Sun, 24 Sep 2017 14:11:22 +0000 (22:11 +0800)
committerAbhishek Lekshmanan <abhishek@suse.com>
Fri, 20 Oct 2017 14:53:49 +0000 (16:53 +0200)
Signed-off-by: Yao Zongyou <yaozongyou@vip.qq.com>
(cherry picked from commit 872d73f945364002f0fa31762e6976db5b4b3c19)

src/rgw/rgw_file.cc

index e941ece9269cb9f693ad3babb4e209f63739de3a..e799861c6adcebfbce516560e343396e536fa581 100644 (file)
@@ -1155,6 +1155,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
@@ -1191,7 +1200,7 @@ namespace rgw {
       rc = -EIO;
     }
 
-    *bytes_written = (rc == 0) ? len : 0;
+    *bytes_written = (rc == 0) ? (len + overlap) : 0;
     return rc;
   } /* RGWFileHandle::write */