diff options
Diffstat (limited to 'xlators/nfs/server/src/nfs3-fh.h')
-rw-r--r-- | xlators/nfs/server/src/nfs3-fh.h | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/xlators/nfs/server/src/nfs3-fh.h b/xlators/nfs/server/src/nfs3-fh.h index 4ee4423951c..987063e7407 100644 --- a/xlators/nfs/server/src/nfs3-fh.h +++ b/xlators/nfs/server/src/nfs3-fh.h @@ -29,13 +29,14 @@ #include "xdr-nfs3.h" #include "iatt.h" #include <sys/types.h> +#include "uuid.h" /* BIG FAT WARNING: The file handle code is tightly coupled to NFSv3 file * handles for now. This will change if and when we need v4. */ #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 + sizeof (uint16_t) + sizeof (uint16_t) + sizeof (uint64_t) + sizeof(uint64_t)) +#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 @@ -46,6 +47,7 @@ typedef uint16_t 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 nfs3_fh_exportid_to_index(exprtid) ((uint16_t)exprtid[15]) /* ATTENTION: Change in size of the structure below should be reflected in the * GF_NFSFH_STATIC_SIZE. */ @@ -56,18 +58,28 @@ struct nfs3_fh { */ char ident[2]; + /* UUID that identifies an export. The value stored in exportid + * depends on the usage of gluster nfs. If the DVM is enabled using + * the nfs.dynamic-volumes option then exportid will contain the UUID + * of the volume so that gnfs is able to identify volumes uniquely + * through volume additions,deletions,migrations, etc. + * + * When not using dvm, exportid contains the index of the volume + * based on the position of the volume in the list of subvolumes + * for gnfs. + */ + uuid_t exportid; + + /* File/dir gfid. */ + uuid_t gfid; + /* Number of file/ino hash elements that follow the ino. */ uint16_t hashcount; - /* Basically, the position/index of an xlator among the children of - * the NFS xlator. - */ - uint16_t xlatorid; - uint64_t gen; - uint64_t ino; nfs3_hash_entry_t entryhash[GF_NFSFH_MAXHASHES]; } __attribute__((__packed__)); +#define GF_NFS3FH_STATIC_INITIALIZER {{0},} extern uint32_t nfs3_fh_compute_size (struct nfs3_fh *fh); @@ -76,16 +88,13 @@ extern int nfs3_fh_hash_index_is_beyond (struct nfs3_fh *fh, int hashidx); extern uint16_t -nfs3_fh_hash_entry (ino_t ino, uint64_t gen); +nfs3_fh_hash_entry (uuid_t gfid); extern int nfs3_fh_validate (struct nfs3_fh *fh); -extern xlator_t * -nfs3_fh_to_xlator (xlator_list_t *cl, struct nfs3_fh *fh); - extern struct nfs3_fh -nfs3_fh_build_root_fh (xlator_list_t *cl, xlator_t *xl); +nfs3_fh_build_indexed_root_fh (xlator_list_t *cl, xlator_t *xl); extern int nfs3_fh_is_root_fh (struct nfs3_fh *fh); @@ -103,4 +112,7 @@ nfs3_fh_to_str (struct nfs3_fh *fh, char *str); extern int nfs3_fh_build_parent_fh (struct nfs3_fh *child, struct iatt *newstat, struct nfs3_fh *newfh); + +extern struct nfs3_fh +nfs3_fh_build_uuid_root_fh (uuid_t volumeid); #endif |