diff options
author | Anand Avati <avati@gluster.com> | 2010-09-03 13:58:48 +0000 |
---|---|---|
committer | Vijay Bellur <vijay@dev.gluster.com> | 2010-09-04 01:45:06 -0700 |
commit | ac60a2a7f3c7b07830669e282d9fc796cbc78f38 (patch) | |
tree | e99cb728b67e18498440fd55c2ab46b0a5c16d06 | |
parent | 2822157056d8347518f7e1b8bf9ee04bea7286ae (diff) |
gfid: changes in inode management
- incorporate usage of uuid (gfid) as the key for finding inodes
- deprecate inode number/generation number based inode_get
- undo code specific to generation numbers (attic list etc.)
Signed-off-by: Anand V. Avati <avati@blackhole.gluster.com>
Signed-off-by: Anand V. Avati <avati@amp.gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
BUG: 971 (dynamic volume management)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=971
-rw-r--r-- | libglusterfs/src/inode.c | 270 | ||||
-rw-r--r-- | libglusterfs/src/inode.h | 23 | ||||
-rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 2 | ||||
-rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 1 | ||||
-rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 25 | ||||
-rw-r--r-- | xlators/nfs/server/src/mount3.c | 6 | ||||
-rw-r--r-- | xlators/nfs/server/src/nfs3-helpers.c | 3 | ||||
-rw-r--r-- | xlators/protocol/legacy/server/src/server-protocol.c | 7 | ||||
-rw-r--r-- | xlators/protocol/legacy/server/src/server-resolve.c | 6 | ||||
-rw-r--r-- | xlators/protocol/server/src/server-resolve.c | 6 | ||||
-rw-r--r-- | xlators/protocol/server/src/server3_1-fops.c | 8 |
11 files changed, 82 insertions, 275 deletions
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c index 67f4183b4..45d151ef0 100644 --- a/libglusterfs/src/inode.c +++ b/libglusterfs/src/inode.c @@ -73,34 +73,16 @@ hash_dentry (inode_t *parent, const char *name, int mod) static int -hash_name (ino_t par, const char *name, int mod) +hash_gfid (uuid_t uuid, int mod) { - int hash = 0; int ret = 0; - hash = *name; - if (hash) { - for (name += 1; *name != '\0'; name++) { - hash = (hash << 5) - hash + *name; - } - } - ret = (hash + par) % mod; + ret = uuid[15] + (uuid[14] << 8); return ret; } -static int -hash_inode (ino_t ino, int mod) -{ - int hash = 0; - - hash = ino % mod; - - return hash; -} - - static void __dentry_hash (dentry_t *dentry) { @@ -173,12 +155,6 @@ __inode_unhash (inode_t *inode) if (!inode) return; - if (!list_empty (&inode->hash)) { - if (inode->in_attic) - inode->table->attic_size--; - inode->in_attic = 0; - } - list_del_init (&inode->hash); } @@ -203,56 +179,13 @@ __inode_hash (inode_t *inode) return; table = inode->table; - hash = hash_inode (inode->ino, table->hashsize); + hash = hash_gfid (inode->gfid, 65536); list_del_init (&inode->hash); list_add (&inode->hash, &table->inode_hash[hash]); } -static inode_t * -__inode_search (inode_table_t *table, ino_t ino) -{ - int hash = 0; - inode_t *inode = NULL; - inode_t *tmp = NULL; - - if (!table) - return NULL; - - hash = hash_inode (ino, table->hashsize); - - list_for_each_entry (tmp, &table->inode_hash[hash], hash) { - if (tmp->ino == ino) { - inode = tmp; - break; - } - } - - return inode; -} - - -static inode_t * -__inode_search_attic (inode_table_t *table, ino_t ino, uint64_t gen) -{ - inode_t *inode = NULL; - inode_t *tmp = NULL; - - if (!table) - return NULL; - - list_for_each_entry (tmp, &table->attic, hash) { - if (tmp->ino == ino && tmp->generation == gen) { - inode = tmp; - break; - } - } - - return inode; -} - - static dentry_t * __dentry_search_for_inode (inode_t *inode, ino_t par, const char *name) { @@ -273,47 +206,6 @@ __dentry_search_for_inode (inode_t *inode, ino_t par, const char *name) } -dentry_t * -dentry_search_for_inode (inode_t *inode, ino_t par, const char *name) -{ - dentry_t *dentry = NULL; - - if (!inode || !name) - return NULL; - - pthread_mutex_lock (&inode->table->lock); - { - dentry = __dentry_search_for_inode (inode, par, name); - } - pthread_mutex_unlock (&inode->table->lock); - - return dentry; -} - - -static dentry_t * -__dentry_search (inode_table_t *table, ino_t par, const char *name) -{ - int hash = 0; - dentry_t *dentry = NULL; - dentry_t *tmp = NULL; - - if (!table || !name) - return NULL; - - hash = hash_name (par, name, table->hashsize); - - list_for_each_entry (tmp, &table->name_hash[hash], hash) { - if (tmp->parent->ino == par && !strcmp (tmp->name, name)) { - dentry = tmp; - break; - } - } - - return dentry; -} - - static void __inode_destroy (inode_t *inode) { @@ -616,35 +508,6 @@ __inode_forget (inode_t *inode, uint64_t nlookup) } -inode_t * -inode_search (inode_table_t *table, ino_t ino, const char *name) -{ - inode_t *inode = NULL; - dentry_t *dentry = NULL; - - if (!table) - return NULL; - - pthread_mutex_lock (&table->lock); - { - if (!name) { - inode = __inode_search (table, ino); - } else { - dentry = __dentry_search (table, ino, name); - - if (dentry) - inode = dentry->inode; - } - - if (inode) - __inode_ref (inode); - } - pthread_mutex_unlock (&table->lock); - - return inode; -} - - dentry_t * __dentry_grep (inode_table_t *table, inode_t *parent, const char *name) { @@ -694,23 +557,46 @@ inode_grep (inode_table_t *table, inode_t *parent, const char *name) inode_t * -__inode_get (inode_table_t *table, ino_t ino, uint64_t gen) +inode_get (inode_table_t *table, ino_t ino, uint64_t gen) +{ + return NULL; +} + + +static int +__is_root_gfid (uuid_t gfid) +{ + uuid_t root; + int ret; + + memset (root, 0, 16); + root[15] = 1; + + ret = uuid_compare (gfid, root); + + return ret; +} + + +inode_t * +__inode_find (inode_table_t *table, uuid_t gfid) { inode_t *inode = NULL; + inode_t *tmp = NULL; + int hash = 0; if (!table) - return NULL; - - if (ino == 1) { - inode = table->root; goto out; - } - inode = __inode_search (table, ino); + if (__is_root_gfid (gfid) == 0) + return table->root; + + hash = hash_gfid (gfid, 65536); - if (gen) { - if (!inode || inode->generation != gen) { - inode = __inode_search_attic (table, ino, gen); + list_for_each_entry (tmp, &table->inode_hash[hash], hash) { + if (uuid_compare (tmp->gfid, gfid) == 0) { + inode = tmp; + break; } } @@ -720,7 +606,7 @@ out: inode_t * -inode_get (inode_table_t *table, ino_t ino, uint64_t gen) +inode_find (inode_table_t *table, uuid_t gfid) { inode_t *inode = NULL; @@ -729,7 +615,7 @@ inode_get (inode_table_t *table, ino_t ino, uint64_t gen) pthread_mutex_lock (&table->lock); { - inode = __inode_get (table, ino, gen); + inode = __inode_find (table, gfid); if (inode) __inode_ref (inode); } @@ -739,36 +625,6 @@ inode_get (inode_table_t *table, ino_t ino, uint64_t gen) } -static int -__inode_atticize (inode_t *inode) -{ - inode_table_t *table = NULL; - - if (!inode) - return -1; - - table = inode->table; - - __inode_unhash (inode); - - list_add (&inode->hash, &table->attic); - inode->in_attic = 1; - table->attic_size++; - - return 0; -} - - -uint64_t -inode_gen_from_stat (struct iatt *iatt) -{ - if (!iatt) - return 0; - - return (uint64_t) iatt->ia_gen; -} - - static inode_t * __inode_link (inode_t *inode, inode_t *parent, const char *name, struct iatt *iatt) @@ -779,7 +635,7 @@ __inode_link (inode_t *inode, inode_t *parent, const char *name, inode_table_t *table = NULL; inode_t *link_inode = NULL; - if (!inode || !iatt) + if (!inode) return NULL; table = inode->table; @@ -788,31 +644,21 @@ __inode_link (inode_t *inode, inode_t *parent, const char *name, link_inode = inode; - if (iatt->ia_ino == 1 && inode != table->root) { - gf_log (table->name, GF_LOG_ERROR, - "inode_link called with iatt->ia_ino = 1. " - "inode=%"PRId64"/%"PRId64 "parent=%"PRId64"/%"PRId64 - " name=%s", - inode ? inode->generation:0 , inode ? inode->ino:0, - parent ? parent->generation:0 , parent ? parent->ino:0, - name); - return link_inode; - } - if (!__is_inode_hashed (inode)) { + if (!iatt) + return NULL; + + if (uuid_is_null (iatt->ia_gfid)) + return NULL; + + uuid_copy (inode->gfid, iatt->ia_gfid); inode->ino = iatt->ia_ino; inode->ia_type = iatt->ia_type; - inode->generation = inode_gen_from_stat (iatt); - old_inode = __inode_search (table, inode->ino); + old_inode = __inode_find (table, inode->gfid); if (old_inode) { - if (old_inode->generation < inode->generation) { - __inode_atticize (old_inode); - __inode_hash (inode); - } else { - link_inode = old_inode; - } + link_inode = old_inode; } else { __inode_hash (inode); } @@ -842,7 +688,7 @@ inode_link (inode_t *inode, inode_t *parent, const char *name, inode_table_t *table = NULL; inode_t *linked_inode = NULL; - if (!inode || !iatt) + if (!inode) return NULL; table = inode->table; @@ -1163,14 +1009,15 @@ inode_table_prune (inode_table_t *table) static void __inode_table_init_root (inode_table_t *table) { - inode_t *root = NULL; - struct iatt iatt = {0, }; + inode_t *root = NULL; + struct iatt iatt = {0, }; if (!table) return; root = __inode_create (table); + iatt.ia_gfid[15] = 1; iatt.ia_ino = 1; iatt.ia_type = IA_IFDIR; @@ -1210,7 +1057,7 @@ inode_table_new (size_t lru_limit, xlator_t *xl) return NULL; } - new->inode_hash = (void *)GF_CALLOC (new->hashsize, + new->inode_hash = (void *)GF_CALLOC (65536, sizeof (struct list_head), gf_common_mt_list_head); if (!new->inode_hash) { @@ -1234,19 +1081,18 @@ inode_table_new (size_t lru_limit, xlator_t *xl) GF_FREE (new); } - for (i=0; i<new->hashsize; i++) { + for (i = 0; i < 65536; i++) { INIT_LIST_HEAD (&new->inode_hash[i]); } - for (i=0; i<new->hashsize; i++) { + for (i = 0; i < new->hashsize; i++) { INIT_LIST_HEAD (&new->name_hash[i]); } INIT_LIST_HEAD (&new->active); INIT_LIST_HEAD (&new->lru); INIT_LIST_HEAD (&new->purge); - INIT_LIST_HEAD (&new->attic); ret = gf_asprintf (&new->name, "%s/inode", xl->name); if (-1 == ret) { @@ -1509,6 +1355,7 @@ inode_dump (inode_t *inode, char *prefix) int ret = -1; xlator_t *xl = NULL; int i = 0; + char uuidbuf[256]; if (!inode) return; @@ -1521,10 +1368,11 @@ inode_dump (inode_t *inode, char *prefix) return; } + uuid_unparse (inode->gfid, uuidbuf); + gf_proc_dump_build_key(key, prefix, "gfid"); + gf_proc_dump_write(key, "%s", uuidbuf); gf_proc_dump_build_key(key, prefix, "nlookup"); gf_proc_dump_write(key, "%ld", inode->nlookup); - gf_proc_dump_build_key(key, prefix, "generation"); - gf_proc_dump_write(key, "%ld", inode->generation); gf_proc_dump_build_key(key, prefix, "ref"); gf_proc_dump_write(key, "%u", inode->ref); gf_proc_dump_build_key(key, prefix, "ino"); diff --git a/libglusterfs/src/inode.h b/libglusterfs/src/inode.h index a0bb8f8b5..71d533669 100644 --- a/libglusterfs/src/inode.h +++ b/libglusterfs/src/inode.h @@ -60,13 +60,9 @@ struct _inode_table { struct list_head purge; /* list of inodes to be purged soon */ uint32_t purge_size; /* count of inodes in purge list */ - struct list_head attic; /* list of inodes which do not have the latest generation - number. inode_t's @hash is linked with @attic. It is - otherwise linked with @inode_hash */ - uint32_t attic_size; struct mem_pool *inode_pool; /* memory pool for inodes */ struct mem_pool *dentry_pool; /* memory pool for dentrys */ - struct mem_pool *fd_mem_pool; /* memory pool for fd_t */ + struct mem_pool *fd_mem_pool; /* memory pool for fd_t */ }; @@ -98,8 +94,6 @@ struct _inode { uuid_t gfid; gf_lock_t lock; uint64_t nlookup; - uint64_t generation; - uint32_t in_attic; /* whether @hash is linked with @inode_hash or @attic */ uint32_t ref; /* reference count on this inode */ ino_t ino; /* inode number in the storage (persistent) */ ia_type_t ia_type; /* what kind of file */ @@ -119,9 +113,6 @@ inode_t * inode_new (inode_table_t *table); inode_t * -inode_search (inode_table_t *table, ino_t ino, const char *name); - -inode_t * inode_link (inode_t *inode, inode_t *parent, const char *name, struct iatt *stbuf); @@ -154,28 +145,28 @@ inode_grep (inode_table_t *table, inode_t *parent, const char *name); inode_t * inode_get (inode_table_t *table, ino_t ino, uint64_t gen); +inode_t * +inode_find (inode_table_t *table, uuid_t gfid); + int inode_path (inode_t *inode, const char *name, char **bufp); inode_t * inode_from_path (inode_table_t *table, const char *path); -dentry_t * -dentry_search_for_inode (inode_t *inode, ino_t par, const char *name); - int __inode_ctx_put (inode_t *inode, xlator_t *xlator, uint64_t value); int inode_ctx_put (inode_t *inode, xlator_t *xlator, uint64_t value); -int +int __inode_ctx_get (inode_t *inode, xlator_t *xlator, uint64_t *value); -int +int inode_ctx_get (inode_t *inode, xlator_t *xlator, uint64_t *value); -int +int inode_ctx_del (inode_t *inode, xlator_t *xlator, uint64_t *value); int diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index 38e58ba95..22bb4322e 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -626,8 +626,6 @@ afr_lookup_done (call_frame_t *frame, xlator_t *this, struct iatt *lookup_buf) if (local->cont.lookup.inode->ino) { local->cont.lookup.buf.ia_ino = local->cont.lookup.inode->ino; - local->cont.lookup.buf.ia_gen = - local->cont.lookup.inode->generation; } } diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index a1b486494..cef73a9d6 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -289,7 +289,6 @@ dht_revalidate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, local->op_ret = 0; local->stbuf.ia_ino = local->ia_ino; - local->stbuf.ia_gen = local->loc.inode->generation; if (local->loc.parent) local->postparent.ia_ino = local->loc.parent->ino; diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index aea0f88b0..973091948 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -145,14 +145,6 @@ fuse_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this, state->loc.name, buf); if (linked_inode != inode) { - gf_log ("glusterfs-fuse", GF_LOG_WARNING, - "%s(%s) inode (ptr=%p, ino=%"PRId64", " - "gen=%"PRId64") found conflict (ptr=%p, " - "ino=%"PRId64", gen=%"PRId64")", - gf_fop_list[frame->root->op], - state->loc.path, inode, inode->ino, - inode->generation, linked_inode, - linked_inode->ino, linked_inode->generation); } inode_lookup (linked_inode); @@ -161,8 +153,6 @@ fuse_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this, /* should we do linked_node or inode */ feo.nodeid = inode_to_fuse_nodeid (linked_inode); - feo.generation = linked_inode->generation; - inode_unref (linked_inode); feo.entry_valid = @@ -1445,14 +1435,6 @@ fuse_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, state->loc.name, buf); if (linked_inode != inode) { - gf_log ("glusterfs-fuse", GF_LOG_WARNING, - "create(%s) inode (ptr=%p, ino=%"PRId64", " - "gen=%"PRId64") found conflict (ptr=%p, " - "ino=%"PRId64", gen=%"PRId64")", - state->loc.path, inode, inode->ino, - inode->generation, linked_inode, - linked_inode->ino, linked_inode->generation); - /* VERY racy code (if used anywhere else) -- don't do this without understanding @@ -1470,8 +1452,6 @@ fuse_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, feo.nodeid = inode_to_fuse_nodeid (linked_inode); - feo.generation = linked_inode->generation; - feo.entry_valid = calc_timeout_sec (priv->entry_timeout); feo.entry_valid_nsec = calc_timeout_nsec (priv->entry_timeout); feo.attr_valid = calc_timeout_sec (priv->attribute_timeout); @@ -2933,6 +2913,7 @@ fuse_first_lookup (xlator_t *this) xlator_t *xl = NULL; dict_t *dict = NULL; struct fuse_first_lookup stub; + uuid_t gfid; priv = this->private; @@ -2954,6 +2935,10 @@ fuse_first_lookup (xlator_t *this) frame->local = &stub; + memset (gfid, 0, 16); + gfid[15] = 1; + + STACK_WIND (frame, fuse_first_lookup_cbk, xl, xl->fops->lookup, &loc, dict); dict_unref (dict); diff --git a/xlators/nfs/server/src/mount3.c b/xlators/nfs/server/src/mount3.c index 2a7a36c8f..c61cf0a48 100644 --- a/xlators/nfs/server/src/mount3.c +++ b/xlators/nfs/server/src/mount3.c @@ -306,8 +306,8 @@ mnt3svc_mount_inode (rpcsvc_request_t *req, struct mount3_state *ms, ret = nfs_inode_loc_fill (exportinode, &exportloc); if (ret < 0) { gf_log (GF_MNT, GF_LOG_ERROR, "Loc fill failed for export inode" - ": ino %"PRIu64", gen: %"PRIu64", volume: %s", - exportinode->ino, exportinode->generation, xl->name); + ": ino %"PRIu64", volume: %s", + exportinode->ino, xl->name); goto err; } @@ -446,7 +446,7 @@ __mnt3_resolve_export_subdir_comp (mnt3_resolve_t *mres) goto err; parino = mres->resolveloc.inode->ino; - pargen = mres->resolveloc.inode->generation; + /* Wipe the contents of the previous component */ nfs_loc_wipe (&mres->resolveloc); ret = nfs_entry_loc_fill (mres->exp->vol->itable, parino, pargen, diff --git a/xlators/nfs/server/src/nfs3-helpers.c b/xlators/nfs/server/src/nfs3-helpers.c index c10954ab9..5a5a0b29d 100644 --- a/xlators/nfs/server/src/nfs3-helpers.c +++ b/xlators/nfs/server/src/nfs3-helpers.c @@ -2580,7 +2580,6 @@ nfs3_fh_resolve_found_entry (nfs3_call_state_t *cs, gf_dirent_t *candidate) return -EFAULT; dirino = cs->resolvedloc.inode->ino; - dirgen = cs->resolvedloc.inode->generation; nfs_loc_wipe (&cs->resolvedloc); ret = nfs_entry_loc_fill (cs->vol->itable, dirino, dirgen, @@ -2644,7 +2643,6 @@ nfs3_fh_resolve_found_parent (nfs3_call_state_t *cs, gf_dirent_t *candidate) return -EFAULT; dirino = cs->resolvedloc.inode->ino; - dirgen = cs->resolvedloc.inode->generation; nfs_loc_wipe (&cs->resolvedloc); ret = nfs_entry_loc_fill (cs->vol->itable, dirino, dirgen, @@ -2862,7 +2860,6 @@ nfs3_fh_resolve_check_response (nfs3_call_state_t *cs, gf_dirent_t *candidate, return ret; dirino = cs->resolvedloc.inode->ino; - dirgen = cs->resolvedloc.inode->generation; switch (response) { diff --git a/xlators/protocol/legacy/server/src/server-protocol.c b/xlators/protocol/legacy/server/src/server-protocol.c index 35d58ae99..56acc59b7 100644 --- a/xlators/protocol/legacy/server/src/server-protocol.c +++ b/xlators/protocol/legacy/server/src/server-protocol.c @@ -2068,13 +2068,6 @@ server_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, state->loc.name, stbuf); if (link_inode != inode) { - gf_log (this->name, GF_LOG_DEBUG, - "create(%s) inode (ptr=%p, ino=%"PRId64", " - "gen=%"PRId64") found conflict (ptr=%p, " - "ino=%"PRId64", gen=%"PRId64")", - state->loc.path, inode, inode->ino, - inode->generation, link_inode, - link_inode->ino, link_inode->generation); /* VERY racy code (if used anywhere else) diff --git a/xlators/protocol/legacy/server/src/server-resolve.c b/xlators/protocol/legacy/server/src/server-resolve.c index 63351fd34..f08ec1c06 100644 --- a/xlators/protocol/legacy/server/src/server-resolve.c +++ b/xlators/protocol/legacy/server/src/server-resolve.c @@ -354,7 +354,8 @@ resolve_entry_simple (call_frame_t *frame) goto out; } - if (parent->ino != 1 && parent->generation != resolve->gen) { +// if (parent->ino != 1 && parent->generation != resolve->gen) { + if (0) { /* simple resolution is decisive - request was for a stale handle */ resolve->op_ret = -1; @@ -468,7 +469,8 @@ resolve_inode_simple (call_frame_t *frame) goto out; } - if (inode->ino != 1 && inode->generation != resolve->gen) { +// if (inode->ino != 1 && inode->generation != resolve->gen) { + if (0) { resolve->op_ret = -1; resolve->op_errno = ENOENT; ret = -1; diff --git a/xlators/protocol/server/src/server-resolve.c b/xlators/protocol/server/src/server-resolve.c index ec955b1e8..eba34bdf7 100644 --- a/xlators/protocol/server/src/server-resolve.c +++ b/xlators/protocol/server/src/server-resolve.c @@ -349,7 +349,8 @@ resolve_entry_simple (call_frame_t *frame) goto out; } - if (parent->ino != 1 && parent->generation != resolve->gen) { +// if (parent->ino != 1 && parent->generation != resolve->gen) { + if (0) { /* simple resolution is decisive - request was for a stale handle */ resolve->op_ret = -1; @@ -457,7 +458,8 @@ resolve_inode_simple (call_frame_t *frame) goto out; } - if (inode->ino != 1 && inode->generation != resolve->gen) { +// if (inode->ino != 1 && inode->generation != resolve->gen) { + if (0) { resolve->op_ret = -1; resolve->op_errno = ENOENT; ret = -1; diff --git a/xlators/protocol/server/src/server3_1-fops.c b/xlators/protocol/server/src/server3_1-fops.c index c73f3df15..7748ef813 100644 --- a/xlators/protocol/server/src/server3_1-fops.c +++ b/xlators/protocol/server/src/server3_1-fops.c @@ -1369,14 +1369,6 @@ server_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, state->loc.name, stbuf); if (link_inode != inode) { - gf_log (this->name, GF_LOG_DEBUG, - "create(%s) inode (ptr=%p, ino=%"PRId64", " - "gen=%"PRId64") found conflict (ptr=%p, " - "ino=%"PRId64", gen=%"PRId64")", - state->loc.path, inode, inode->ino, - inode->generation, link_inode, - link_inode->ino, link_inode->generation); - /* VERY racy code (if used anywhere else) -- don't do this without understanding |