diff options
-rw-r--r-- | xlators/nfs/server/src/nfs3-fh.c | 138 | ||||
-rw-r--r-- | xlators/nfs/server/src/nfs3-fh.h | 19 |
2 files changed, 6 insertions, 151 deletions
diff --git a/xlators/nfs/server/src/nfs3-fh.c b/xlators/nfs/server/src/nfs3-fh.c index f41c3f2f1..eb8223924 100644 --- a/xlators/nfs/server/src/nfs3-fh.c +++ b/xlators/nfs/server/src/nfs3-fh.c @@ -59,7 +59,6 @@ nfs3_fh_init (struct nfs3_fh *fh, struct iatt *buf) fh->ident[0] = GF_NFSFH_IDENT0; fh->ident[1] = GF_NFSFH_IDENT1; - fh->hashcount = 0; uuid_copy (fh->gfid, buf->ia_gfid); } @@ -112,66 +111,6 @@ nfs3_fh_is_root_fh (struct nfs3_fh *fh) } -nfs3_hash_entry_t -nfs3_fh_hash_entry (uuid_t gfid) -{ - nfs3_hash_entry_t hash = 0; - int shiftsize = 48; - uint64_t ino = 0; - uint64_t gen = 0; - nfs3_hash_entry_t inomsb = 0; - nfs3_hash_entry_t inolsb = 0; - nfs3_hash_entry_t inols23b = 0; - - nfs3_hash_entry_t genmsb = 0; - nfs3_hash_entry_t genlsb = 0; - nfs3_hash_entry_t genls23b = 0; - - memcpy (&ino, &gfid[8], 8); - hash = ino; - while (shiftsize != 0) { - hash ^= (ino >> shiftsize); - shiftsize -= 16; - } -/* - gf_log ("FILEHANDLE", GF_LOG_TRACE, "INO %"PRIu64, ino); - gf_log ("FILEHANDLE",GF_LOG_TRACE, "PRI HASH %d", hash); -*/ - inomsb = (ino >> 56); -// gf_log ("FILEHANDLE", GF_LOG_TRACE, "inomsb %d", inomsb); - - inolsb = ((ino << 56) >> 56); -// gf_log ("FILEHANDLE", GF_LOG_TRACE, "inolsb %d", inolsb); - - inolsb = (inolsb << 8); -// gf_log ("FILEHANDLE", GF_LOG_TRACE, "inolsb to inomsb %d", inolsb); - inols23b = ((ino << 40) >> 48); -// gf_log ("FILEHANDLE", GF_LOG_TRACE, "inols23b %d", inols23b); - - inols23b = (inols23b << 8); -// gf_log ("FILEHDNALE", GF_LOG_TRACE, "inols23b %d", inols23b); - - memcpy (&gen, &gfid[0], 8); - genmsb = (gen >> 56); -// gf_log ("FILEHANDLE", GF_LOG_TRACE, "inomsb %d", inomsb); - - genlsb = ((gen << 56) >> 56); -// gf_log ("FILEHANDLE", GF_LOG_TRACE, "inolsb %d", inolsb); - - genlsb = (genlsb << 8); -// gf_log ("FILEHANDLE", GF_LOG_TRACE, "inolsb to inomsb %d", inolsb); - - genls23b = ((gen << 40) >> 48); -// gf_log ("FILEHANDLE", GF_LOG_TRACE, "inols23b %d", inols23b); - - genls23b = (genls23b << 8); -// gf_log ("FILEHDNALE", GF_LOG_TRACE, "inols23b %d", inols23b); - - hash ^= inolsb ^ inomsb ^ inols23b ^ genmsb ^ genlsb ^ genls23b; - return hash; - -} - void nfs3_fh_to_str (struct nfs3_fh *fh, char *str) { @@ -181,30 +120,24 @@ nfs3_fh_to_str (struct nfs3_fh *fh, char *str) if ((!fh) || (!str)) return; - sprintf (str, "FH: hashcount %d, exportid %s, gfid %s", - fh->hashcount, uuid_utoa_r (fh->exportid, exportid), + sprintf (str, "FH: exportid %s, gfid %s", + uuid_utoa_r (fh->exportid, exportid), uuid_utoa_r (fh->gfid, gfid)); } void nfs3_log_fh (struct nfs3_fh *fh) { -// int x = 0; char gfidstr[512]; char exportidstr[512]; if (!fh) return; - gf_log ("nfs3-fh", GF_LOG_TRACE, "filehandle: hashcount %d, exportid " - "0x%s, gfid 0x%s", fh->hashcount, + gf_log ("nfs3-fh", GF_LOG_TRACE, "filehandle: exportid " + "0x%s, gfid 0x%s", uuid_utoa_r (fh->exportid, exportidstr), uuid_utoa_r (fh->gfid, gfidstr)); -/* - for (; x < fh->hashcount; ++x) - gf_log ("FILEHANDLE", GF_LOG_TRACE, "Hash %d: %d", x, - fh->entryhash[x]); -*/ } int @@ -216,15 +149,6 @@ nfs3_fh_build_parent_fh (struct nfs3_fh *child, struct iatt *newstat, nfs3_fh_init (newfh, newstat); uuid_copy (newfh->exportid, child->exportid); - if (newstat->ia_ino == 1) - goto done; - - newfh->hashcount = child->hashcount - 1; - memcpy (newfh->entryhash, child->entryhash, - newfh->hashcount * GF_NFSFH_ENTRYHASH_SIZE); - -done: -// nfs3_log_fh (newfh); return 0; } @@ -246,35 +170,12 @@ int nfs3_fh_build_child_fh (struct nfs3_fh *parent, struct iatt *newstat, struct nfs3_fh *newfh) { - int hashcount = 0; - int entry = 0; - if ((!parent) || (!newstat) || (!newfh)) return -1; nfs3_fh_init (newfh, newstat); uuid_copy (newfh->exportid, parent->exportid); - newfh->hashcount = parent->hashcount + 1; - /* Only copy the hashes that are available in the parent file - * handle. */ - if (parent->hashcount > GF_NFSFH_MAXHASHES) - hashcount = GF_NFSFH_MAXHASHES; - else - hashcount = parent->hashcount; - - memcpy (newfh->entryhash, parent->entryhash, - hashcount * GF_NFSFH_ENTRYHASH_SIZE); - - /* Do not insert parent dir hash if there is no space left in the hash - * array of the child entry. */ - if (newfh->hashcount <= GF_NFSFH_MAXHASHES) { - entry = newfh->hashcount - 1; - newfh->entryhash[entry] = nfs3_fh_hash_entry (parent->gfid); - } - -// nfs3_log_fh (newfh); - return 0; } @@ -282,34 +183,5 @@ nfs3_fh_build_child_fh (struct nfs3_fh *parent, struct iatt *newstat, uint32_t nfs3_fh_compute_size (struct nfs3_fh *fh) { - uint32_t fhlen = 0; - - if (!fh) - return 0; - - if (fh->hashcount <= GF_NFSFH_MAXHASHES) - fhlen = nfs3_fh_hashcounted_size (fh->hashcount); - else - fhlen = nfs3_fh_hashcounted_size (GF_NFSFH_MAXHASHES); - - return fhlen; + return GF_NFSFH_STATIC_SIZE; } - - -/* 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) -{ - if (!fh) - return 1; - - if (fh->hashcount >= hashidx) - return 0; - else - return 1; - - return 1; -} - diff --git a/xlators/nfs/server/src/nfs3-fh.h b/xlators/nfs/server/src/nfs3-fh.h index 3be043ed3..a9002afe7 100644 --- a/xlators/nfs/server/src/nfs3-fh.h +++ b/xlators/nfs/server/src/nfs3-fh.h @@ -36,16 +36,7 @@ #define GF_NFSFH_IDENT0 ':' #define GF_NFSFH_IDENT1 'O' #define GF_NFSFH_IDENT_SIZE (sizeof(char) * 2) -#define GF_NFSFH_STATIC_SIZE (GF_NFSFH_IDENT_SIZE + (2*sizeof (uuid_t)) + sizeof (uint16_t)) -#define GF_NFSFH_MAX_HASH_BYTES (NFS3_FHSIZE - GF_NFSFH_STATIC_SIZE) - -/* Each hash element in the file handle is of 2 bytes thus giving - * us theoretically 65536 unique entries in a directory. - */ -typedef uint16_t nfs3_hash_entry_t; -#define GF_NFSFH_ENTRYHASH_SIZE (sizeof (nfs3_hash_entry_t)) -#define GF_NFSFH_MAXHASHES ((int)(GF_NFSFH_MAX_HASH_BYTES / GF_NFSFH_ENTRYHASH_SIZE)) -#define nfs3_fh_hashcounted_size(hcount) (GF_NFSFH_STATIC_SIZE + (hcount * GF_NFSFH_ENTRYHASH_SIZE)) +#define GF_NFSFH_STATIC_SIZE (GF_NFSFH_IDENT_SIZE + (2*sizeof (uuid_t))) #define nfs3_fh_exportid_to_index(exprtid) ((uint16_t)exprtid[15]) /* ATTENTION: Change in size of the structure below should be reflected in the @@ -72,11 +63,6 @@ struct nfs3_fh { /* File/dir gfid. */ uuid_t gfid; - - /* Number of file/ino hash elements that follow the ino. */ - uint16_t hashcount; - - nfs3_hash_entry_t entryhash[GF_NFSFH_MAXHASHES]; } __attribute__((__packed__)); #define GF_NFS3FH_STATIC_INITIALIZER {{0},} @@ -84,9 +70,6 @@ struct nfs3_fh { extern uint32_t nfs3_fh_compute_size (struct nfs3_fh *fh); -extern int -nfs3_fh_hash_index_is_beyond (struct nfs3_fh *fh, int hashidx); - extern uint16_t nfs3_fh_hash_entry (uuid_t gfid); |