From: Sage Weil Date: Wed, 30 Nov 2016 22:35:51 +0000 (-0500) Subject: os/bluestore: deep copy on partial bufferptrs on setattr X-Git-Tag: v11.1.0~84^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8d144f94deb29ed06e92d9ceab098494ebeb1c1d;p=ceph.git os/bluestore: deep copy on partial bufferptrs on setattr Otherwise we may inadvertantly pin larger buffers in memory. Fixes: http://tracker.ceph.com/issues/18093 Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index a4405fb2aa7..bba2e44478c 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -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)"