Patchwork [BUG:1378,05/12] nfs3: Logging and comments made more accurate

login
register
Submitter Shehjar Tikoo
Date 2010-08-31 12:20:30
Message ID <1283257237-18659-5-git-send-email-shehjart@gluster.com>
Download mbox | patch
Permalink /patch/4420/
State Accepted
Delegated to: Anand Avati
Headers show

Comments

Shehjar Tikoo - 2010-08-31 12:20:30
From: Shehjar Tikoo <shehjart@gluster.com>


Signed-off-by: Shehjar Tikoo <shehjart@gluster.com>
---
 xlators/nfs/server/src/nfs3-fh.c      |    4 ++++
 xlators/nfs/server/src/nfs3-helpers.c |   31 ++++++++++++++++++++-----------
 2 files changed, 24 insertions(+), 11 deletions(-)

Patch

diff --git a/xlators/nfs/server/src/nfs3-fh.c b/xlators/nfs/server/src/nfs3-fh.c
index 5a5d9aa..7a7a06d 100644
--- a/xlators/nfs/server/src/nfs3-fh.c
+++ b/xlators/nfs/server/src/nfs3-fh.c
@@ -276,6 +276,10 @@  nfs3_fh_compute_size (struct nfs3_fh *fh)
         return fhlen;
 }
 
+
+/* There is no point searching at a directory level which is beyond that of
+ * the hashcount given in the file handle.
+ */
 int
 nfs3_fh_hash_index_is_beyond (struct nfs3_fh *fh, int hashidx)
 {
diff --git a/xlators/nfs/server/src/nfs3-helpers.c b/xlators/nfs/server/src/nfs3-helpers.c
index 35dd0ae..653b6ec 100644
--- a/xlators/nfs/server/src/nfs3-helpers.c
+++ b/xlators/nfs/server/src/nfs3-helpers.c
@@ -2507,8 +2507,8 @@  nfs3_fh_resolve_check_entry (struct nfs3_fh *fh, gf_dirent_t *candidate,
         ia = &candidate->d_stat;
         if ((ia->ia_gen == fh->gen) && (ia->ia_ino == fh->ino)) {
                 gf_log (GF_NFS3, GF_LOG_TRACE, "Found entry: gen: %"PRId64
-                        " ino: %"PRId64", name: %s", ia->ia_gen, ia->ia_ino,
-                        candidate->d_name);
+                        " ino: %"PRId64", name: %s, hashcount %d", ia->ia_gen,
+                        ia->ia_ino, candidate->d_name, hashidx);
                 ret = GF_NFS3_FHRESOLVE_FOUND;
                 goto found_entry;
         }
@@ -2522,8 +2522,8 @@  nfs3_fh_resolve_check_entry (struct nfs3_fh *fh, gf_dirent_t *candidate,
                 goto found_entry;
         entryhash = fh->entryhash[hashidx];
         if (entryhash == nfs3_fh_hash_entry (ia->ia_ino, ia->ia_gen)) {
-                gf_log (GF_NFS3, GF_LOG_TRACE, "Found hash match: %s: %d",
-                        candidate->d_name, entryhash);
+                gf_log (GF_NFS3, GF_LOG_TRACE, "Found hash match: %s: %d, "
+                        "hashidx: %d", candidate->d_name, entryhash, hashidx);
                 ret = GF_NFS3_FHRESOLVE_DIRFOUND;
                 goto found_entry;
         }
@@ -2776,7 +2776,7 @@  nfs3_fh_resolve_dir_hard (nfs3_call_state_t *cs, uint64_t ino, uint64_t gen,
 
         nfs_user_root_create (&nfu);
         gf_log (GF_NFS3, GF_LOG_TRACE, "FH hard dir resolution: ino:"
-                " %"PRIu64", gen: %"PRIu64", entry: %s, hashidx: %d",
+                " %"PRIu64", gen: %"PRIu64", entry: %s, next hashcount: %d",
                 ino, gen, entry, cs->hashidx);
         ret = nfs_entry_loc_fill (cs->vol->itable, ino, gen, entry,
                                   &cs->resolvedloc, NFS_RESOLVE_CREATE);
@@ -2922,16 +2922,18 @@  nfs3_fh_resolve_inode_hard (nfs3_call_state_t *cs)
         nfs_loc_wipe (&cs->resolvedloc);
         if (nfs3_fh_hash_index_is_beyond (&cs->resolvefh, cs->hashidx)) {
                 gf_log (GF_NFS3, GF_LOG_TRACE, "Hash index is beyond: idx %d, "
-                        " fh idx: %d", cs->hashidx, cs->resolvefh.hashcount);
+                        " fh hashcount: %d", cs->hashidx,
+                        cs->resolvefh.hashcount);
                 nfs3_call_resume_estale (cs);
                 ret = 0;
                 goto out;
         }
 
         nfs_user_root_create (&nfu);
-        gf_log (GF_NFS3, GF_LOG_TRACE, "FH hard resolution: ino:"
-                " %"PRIu64", gen: %"PRIu64", hashidx: %d", cs->resolvefh.ino,
-                cs->resolvefh.gen, cs->hashidx);
+        gf_log (GF_NFS3, GF_LOG_TRACE, "FH hard resolution for: ino:"
+                " %"PRIu64", gen: %"PRIu64", hashcount: %d, current hashidx "
+                "%d", cs->resolvefh.ino, cs->resolvefh.gen,
+                cs->resolvefh.hashcount, cs->hashidx);
         ret = nfs_ino_loc_fill (cs->vol->itable, 1, 0, &cs->resolvedloc);
 
         if (ret == 0) {
@@ -3040,9 +3042,16 @@  nfs3_fh_resolve_and_resume (nfs3_call_state_t *cs, struct nfs3_fh *fh,
         cs->resolvefh = *fh;
         cs->hashidx = 0;
 
-        if (!entry)
+        /* Check if the resolution is:
+         * a. fh resolution
+         *
+         * or
+         *
+         * b. (fh, basename) resolution
+         */
+        if (!entry)     /* a */
                 ret = nfs3_fh_resolve_inode (cs);
-        else {
+        else {          /* b */
                 cs->resolventry = gf_strdup (entry);
                 if (!cs->resolventry)
                         goto err;