]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: deep copy on partial bufferptrs on setattr
authorSage Weil <sage@redhat.com>
Wed, 30 Nov 2016 22:35:51 +0000 (17:35 -0500)
committerSage Weil <sage@redhat.com>
Wed, 30 Nov 2016 22:35:51 +0000 (17:35 -0500)
Otherwise we may inadvertantly pin larger buffers in
memory.

Fixes: http://tracker.ceph.com/issues/18093
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc

index a4405fb2aa7ec6476864d362a0f47403cf3714e9..bba2e44478c69cb665348590a7b1369ea544661f 100644 (file)
@@ -8289,7 +8289,10 @@ int BlueStore::_setattr(TransContext *txc,
           << " " << name << " (" << val.length() << " bytes)"
           << dendl;
   int r = 0;
-  o->onode.attrs[name] = val;
+  if (val.is_partial())
+    o->onode.attrs[name] = bufferptr(val.c_str(), val.length());
+  else
+    o->onode.attrs[name] = val;
   txc->write_onode(o);
   dout(10) << __func__ << " " << c->cid << " " << o->oid
           << " " << name << " (" << val.length() << " bytes)"