]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os: fix bluestore onode_t attr leak 7125/head
authorNing Yao <zay11022@gmail.com>
Wed, 6 Jan 2016 09:54:00 +0000 (17:54 +0800)
committerNing Yao <zay11022@gmail.com>
Wed, 6 Jan 2016 09:56:00 +0000 (17:56 +0800)
Signed-off-by: Ning Yao <zay11022@gmail.com>
src/include/buffer.h
src/os/bluestore/BlueStore.cc

index ca575b4de76836595b580274df492e6b9b6d50b0..5a8b05f5125f9b9bbd673a8f832fdaece25efb0a 100644 (file)
@@ -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; }
index bb033fd9496ba74a1f52fd20aff74df57a3405d4..1f2188255ae4fe2737732de54d048d0537370547 100644 (file)
@@ -5550,8 +5550,12 @@ int BlueStore::_setattrs(TransContext *txc,
     goto out;
   }
   for (map<string,bufferptr>::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;