From b4d079f2b5a4d49b2ba7576b272a2a3f3b0d66c8 Mon Sep 17 00:00:00 2001 From: Matt Benjamin Date: Sun, 7 Aug 2016 18:39:33 -0400 Subject: [PATCH] rgw nfs: fix write continuations Signed-off-by: Matt Benjamin --- src/rgw/rgw_file.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/rgw/rgw_file.h b/src/rgw/rgw_file.h index cf2897c6eecd..b9718c167f4a 100644 --- a/src/rgw/rgw_file.h +++ b/src/rgw/rgw_file.h @@ -1935,8 +1935,7 @@ public: RGWPutObjProcessor *processor; buffer::list data; MD5 hash; - off_t last_off; - off_t next_off; + off_t real_ofs; size_t bytes_written; bool multipart; bool eio; @@ -1944,8 +1943,8 @@ public: RGWWriteRequest(CephContext* _cct, RGWUserInfo *_user, RGWFileHandle* _fh, const std::string& _bname, const std::string& _oname) : RGWLibContinuedReq(_cct, _user), bucket_name(_bname), obj_name(_oname), - rgw_fh(_fh), processor(nullptr), last_off(0), next_off(0), - bytes_written(0), multipart(false), eio(false) { + rgw_fh(_fh), processor(nullptr), real_ofs(0), bytes_written(0), + multipart(false), eio(false) { int ret = header_init(); if (ret == 0) { @@ -2018,10 +2017,12 @@ public: } void put_data(off_t off, buffer::list& _bl) { - if (off && (off != (ofs+1))) + if (off != real_ofs) { eio = true; - ofs = off; + } data.claim(_bl); + real_ofs += data.length(); + ofs = off; /* consumed in exec_continue() */ } virtual int exec_start(); -- 2.47.3