From 1236e0f2e9e8724569cf5fc7d7d525c7fca6ad77 Mon Sep 17 00:00:00 2001 From: Yao Zongyou Date: Sun, 24 Sep 2017 22:11:22 +0800 Subject: [PATCH] rgw_file: fix write error when the write offset overlaps. Fixes: http://tracker.ceph.com/issues/21455 Signed-off-by: Yao Zongyou (cherry picked from commit 872d73f945364002f0fa31762e6976db5b4b3c19) --- src/rgw/rgw_file.cc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/rgw/rgw_file.cc b/src/rgw/rgw_file.cc index 83df3ddbf01bb..eef9c82e9f128 100644 --- a/src/rgw/rgw_file.cc +++ b/src/rgw/rgw_file.cc @@ -1155,6 +1155,15 @@ namespace rgw { } } + int overlap = 0; + if ((static_cast(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(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 */ -- 2.39.5