]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
FileStore::_do_fiemap: do not reference fiemap after it is freed 11615/head
authorKefu Chai <kchai@redhat.com>
Wed, 23 Nov 2016 06:48:11 +0000 (14:48 +0800)
committeryaoning <yaoning@unitedstack.com>
Fri, 2 Dec 2016 08:26:51 +0000 (16:26 +0800)
`last` points to fiemap::fm_extends[n], and if fiemap gets freed, we can
not reference any of its fieldis. so we could remember the check result before
freeing it.

Signed-off-by: Kefu Chai <kchai@redhat.com>
(cherry picked from commit c3748fa7737b6c43de2dae5d957fcff01322515c)

Conflicts:
src/os/FileStore.cc
put the parameter is_last in the right place

src/os/FileStore.cc

index 53663241ec5453b31d6e984d7c30f5b4a02a3756..61bad358ff16283f5684cb1076fcefc6f0062aac 100644 (file)
@@ -2957,9 +2957,10 @@ more:
       i++;
       extent++;
     }
+    const bool is_last = last->fe_flags & FIEMAP_EXTENT_LAST;
     free(fiemap);
 
-    if (!(last->fe_flags & FIEMAP_EXTENT_LAST)) {
+    if (!is_last) {
       uint64_t xoffset = last->fe_logical + last->fe_length - offset;
       offset = last->fe_logical + last->fe_length;
       len -= xoffset;