From: Ning Yao Date: Wed, 6 Jan 2016 09:54:00 +0000 (+0800) Subject: os: fix bluestore onode_t attr leak X-Git-Tag: v10.0.3~87^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a59b1d49dc4ae023c054fd71be4c05a4bd129a06;p=ceph.git os: fix bluestore onode_t attr leak Signed-off-by: Ning Yao --- diff --git a/src/include/buffer.h b/src/include/buffer.h index ca575b4de768..5a8b05f5125f 100644 --- a/src/include/buffer.h +++ b/src/include/buffer.h @@ -197,6 +197,7 @@ namespace buffer CEPH_BUFFER_API { return (length() % align) == 0; } bool is_n_page_sized() const { return is_n_align_sized(CEPH_PAGE_SIZE); } + bool is_partial() const { return start() > 0 || end() < raw_length(); } // accessors raw *get_raw() const { return _raw; } diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index bb033fd9496b..1f2188255ae4 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -5550,8 +5550,12 @@ int BlueStore::_setattrs(TransContext *txc, goto out; } for (map::const_iterator p = aset.begin(); - p != aset.end(); ++p) - o->onode.attrs[p->first] = p->second; + p != aset.end(); ++p) { + if (p->second.is_partial()) + o->onode.attrs[p->first] = bufferptr(p->second.c_str(), p->second.length()); + else + o->onode.attrs[p->first] = p->second; + } txc->write_onode(o); r = 0;