]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
tools/cephfs/DataScan.cc: fake non-empty dirstat for injected directory 8115/head
authorYan, Zheng <zyan@redhat.com>
Mon, 14 Mar 2016 12:16:55 +0000 (20:16 +0800)
committerYan, Zheng <zyan@redhat.com>
Thu, 17 Mar 2016 13:39:34 +0000 (21:39 +0800)
so that the directory doesn't appear to be empty

Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/tools/cephfs/DataScan.cc
src/tools/cephfs/DataScan.h

index 96732defc40e69b902ab6ddb45bb6b449af221eb..e762a4e9f3d4dfdb0c234d2eb1d89a1f42c0fa8d 100644 (file)
@@ -987,17 +987,18 @@ int DataScan::scan_frags()
     if (r == -EINVAL) {
       derr << "Corrupt fnode on " << oid << dendl;
       if (force_corrupt) {
-        fnode.fragstat.mtime = 0;
-        fnode.fragstat.nfiles = 1;
-        fnode.fragstat.nsubdirs = 0;
+       fnode.fragstat.mtime = 0;
+       fnode.fragstat.nfiles = 1;
+       fnode.fragstat.nsubdirs = 0;
+       fnode.accounted_fragstat = fnode.fragstat;
       } else {
         return r;
       }
     }
 
     InodeStore dentry;
-    build_dir_dentry(obj_name_ino, fnode.fragstat.nfiles,
-        fnode.fragstat.mtime, loaded_layout, &dentry);
+    build_dir_dentry(obj_name_ino, fnode.accounted_fragstat,
+               loaded_layout, &dentry);
 
     // Inject inode to the metadata pool
     if (have_backtrace) {
@@ -1141,7 +1142,9 @@ int MetadataDriver::inject_lost_and_found(
     file_layout_t inherit_layout;
 
     // Construct LF inode
-    build_dir_dentry(CEPH_INO_LOST_AND_FOUND, 1, 0, inherit_layout, &lf_ino);
+    frag_info_t fragstat;
+    fragstat.nfiles = 1,
+    build_dir_dentry(CEPH_INO_LOST_AND_FOUND, fragstat, inherit_layout, &lf_ino);
 
     // Inject link to LF inode in the root dir
     r = inject_linkage(CEPH_INO_ROOT, "lost+found", frag_t(), lf_ino);
@@ -1470,6 +1473,9 @@ int MetadataDriver::find_or_create_dirfrag(
     bufferlist fnode_bl;
     fnode_t blank_fnode;
     blank_fnode.version = 1;
+    // mark it as non-empty
+    blank_fnode.fragstat.nfiles = 1;
+    blank_fnode.accounted_fragstat = blank_fnode.fragstat;
     blank_fnode.damage_flags |= (DAMAGE_STATS | DAMAGE_RSTATS);
     blank_fnode.encode(fnode_bl);
 
@@ -1740,16 +1746,16 @@ void MetadataTool::build_file_dentry(
 }
 
 void MetadataTool::build_dir_dentry(
-    inodeno_t ino, uint64_t nfiles,
-    time_t mtime, const file_layout_t &layout, InodeStore *out)
+    inodeno_t ino, const frag_info_t &fragstat,
+    const file_layout_t &layout, InodeStore *out)
 {
   assert(out != NULL);
 
   out->inode.mode = 0755 | S_IFDIR;
-  out->inode.dirstat.nfiles = nfiles;
-  out->inode.mtime.tv.tv_sec = mtime;
-  out->inode.atime.tv.tv_sec = mtime;
-  out->inode.ctime.tv.tv_sec = mtime;
+  out->inode.dirstat = fragstat;
+  out->inode.mtime.tv.tv_sec = fragstat.mtime;
+  out->inode.atime.tv.tv_sec = fragstat.mtime;
+  out->inode.ctime.tv.tv_sec = fragstat.mtime;
 
   out->inode.layout = layout;
 
index 107ab7462ff33d3c8951535eb4eb0388ac6b61e2..3a6b25ccd9821a5806f17b2c695731126a95f198 100644 (file)
@@ -155,8 +155,8 @@ class MetadataTool
    * Construct a synthetic InodeStore for a directory
    */
   void build_dir_dentry(
-    inodeno_t ino, uint64_t nfiles,
-    time_t mtime,
+    inodeno_t ino,
+    const frag_info_t &fragstat,
     const file_layout_t &layout,
     InodeStore *out);