From 872d73f945364002f0fa31762e6976db5b4b3c19 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. Signed-off-by: Yao Zongyou --- 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 f21216698be35..fa3d373a0f242 100644 --- a/src/rgw/rgw_file.cc +++ b/src/rgw/rgw_file.cc @@ -1159,6 +1159,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 @@ -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 */ -- 2.39.5