]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: (unnested) file/subdir stats for dir, too
authorSage Weil <sage@newdream.net>
Sun, 25 May 2008 20:17:31 +0000 (13:17 -0700)
committerSage Weil <sage@newdream.net>
Sun, 25 May 2008 20:17:31 +0000 (13:17 -0700)
src/include/types.h
src/kernel/dir.c
src/mds/Locker.cc
src/messages/MClientReply.h

index 807e8fefd0e49b08076262aaf9373be6a03bca95..aac8974ff6a1358a5b2504e9a81f6dedae2ec585 100644 (file)
@@ -246,6 +246,7 @@ struct inode_t {
   uint64_t   time_warp_seq;  // count of (potential) mtime/atime timewarps (i.e., utimes())
 
   // dirfrag, recursive accounting
+  uint64_t nfiles, nsubdirs;
   nested_info_t accounted_nested;  // what dirfrag has seen
   nested_info_t nested;            // inline summation for child dirfrags.
   /*
@@ -277,7 +278,10 @@ static inline void encode(const inode_t &i, bufferlist &bl) {
   ::encode(i.max_size, bl);
   ::encode(i.mtime, bl);
   ::encode(i.atime, bl);
+  ::encode(i.nfiles, bl);
+  ::encode(i.nsubdirs, bl);
   ::encode(i.nested, bl);
+  ::encode(i.accounted_nested, bl);
   ::encode(i.version, bl);
   ::encode(i.file_data_version, bl);
 }
@@ -295,7 +299,10 @@ static inline void decode(inode_t &i, bufferlist::iterator &p) {
   ::decode(i.max_size, p);
   ::decode(i.mtime, p);
   ::decode(i.atime, p);
+  ::decode(i.nfiles, p);
+  ::decode(i.nsubdirs, p);
   ::decode(i.nested, p);
+  ::decode(i.accounted_nested, p);
   ::decode(i.version, p);
   ::decode(i.file_data_version, p);
 }
index 76818154ec090db5ef62a039ca36a2e7ebee24c6..df63a3ebf22197f5386a7e3a5e7619f8ce6dd8e5 100644 (file)
@@ -641,14 +641,14 @@ static ssize_t ceph_read_dir(struct file *file, char __user *buf, size_t size,
                        return -ENOMEM;
                cf->dir_info_len = 
                        sprintf(cf->dir_info, 
-                               "entries:  %20lld\n"
-                               "files:    %20lld\n"
-                               "subdirs:  %20lld\n"
-                               "rentries: %20lld\n"
-                               "rfiles:   %20lld\n"
-                               "rsubdirs: %20lld\n"
-                               "rbytes:   %20lld\n"
-                               "rctime:   %10ld.%09ld\n",
+                               "entries:   %20lld\n"
+                               " files:    %20lld\n"
+                               " subdirs:  %20lld\n"
+                               "rentries:  %20lld\n"
+                               " rfiles:   %20lld\n"
+                               " rsubdirs: %20lld\n"
+                               "rbytes:    %20lld\n"
+                               "rctime:    %10ld.%09ld\n",
                                ci->i_files + ci->i_subdirs,
                                ci->i_files,
                                ci->i_subdirs,
index 3351ebee40d84fc69e398ef37002bdd390becff3..f2e0f9aae57b47325da468d2962ba9f73583383c 100644 (file)
@@ -1332,6 +1332,8 @@ void Locker::predirty_nested(Mutation *mut, EMetaBlob *blob,
       dout(10) << "predirty_nested updating size/mtime on " << *pin << dendl;
       if (pf->fraginfo.mtime > pi->mtime)
        pi->mtime = pf->fraginfo.mtime;
+      pi->nfiles += pf->fraginfo.nfiles - pf->accounted_fraginfo.nfiles;
+      pi->nsubdirs += pf->fraginfo.nsubdirs - pf->accounted_fraginfo.nsubdirs;
       pi->size += pf->fraginfo.size() - pf->accounted_fraginfo.size();
       pf->accounted_fraginfo = pf->fraginfo;
     }
index 9587139b5a5e431685ba954b400dde87c6c3ed40..b51d4cf041acb575c40c1e29441b2f6fed49b5e2 100644 (file)
@@ -104,12 +104,14 @@ struct InodeStat {
   inodeno_t ino;
   version_t version;
   ceph_file_layout layout;
-  utime_t ctime, mtime, atime, rctime;
+  utime_t ctime, mtime, atime;
   unsigned mode, uid, gid, nlink, rdev;
   loff_t size, max_size, nested_size;
   version_t time_warp_seq;
-  nested_info_t nested;
 
+  uint64_t nfiles, nsubdirs;
+  nested_info_t nested;
+  
   string  symlink;   // symlink content (if symlink)
   fragtree_t dirfragtree;
   map<string, bufferptr> xattrs;
@@ -138,6 +140,8 @@ struct InodeStat {
     max_size = e.max_size;
     rdev = e.rdev;
 
+    nfiles = e.files;
+    nsubdirs = e.subdirs;
     nested.rctime.decode_timeval(&e.rctime);
     nested.rbytes = e.rbytes;
     nested.rfiles = e.rfiles;
@@ -178,6 +182,8 @@ struct InodeStat {
     e.size = in->inode.size;
     e.max_size = in->inode.max_size;
 
+    e.files = in->inode.nfiles;
+    e.subdirs = in->inode.nsubdirs;
     in->inode.nested.rctime.encode_timeval(&e.rctime);
     e.rbytes = in->inode.nested.rbytes;
     e.rfiles = in->inode.nested.rfiles;