diff options
| -rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 30 | 
1 files changed, 30 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index 4efc2814729..129acbef0b5 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -9141,6 +9141,7 @@ dht_create (call_frame_t *frame, xlator_t *this,  {          int             op_errno           = -1;          xlator_t       *subvol             = NULL; +        xlator_t       *hashed_subvol      = NULL;          dht_local_t    *local              = NULL;          int             i                  = 0;          dht_conf_t     *conf               = NULL; @@ -9166,6 +9167,35 @@ dht_create (call_frame_t *frame, xlator_t *this,                          DHT_MSG_SUBVOL_INFO,                          "creating %s on %s (got create on %s)",                          local->loc.path, subvol->name, loc->path); + +                /* Since lookup-optimize is enabled by default, we need +                 * to create the linkto file if required. +                 * Note this does not check for decommisioned bricks +                 * and min-free-disk limits as this is a debugging tool +                 * and not expected to be used in production. +                 */ +                hashed_subvol = dht_subvol_get_hashed (this, &local->loc); + +                if (hashed_subvol && (hashed_subvol != subvol)) { +                        /* Create the linkto file and then the data file */ +                        local->params = dict_ref (params); +                        local->flags = flags; +                        local->mode = mode; +                        local->umask = umask; +                        local->cached_subvol = subvol; +                        local->hashed_subvol = hashed_subvol; + +                        dht_linkfile_create (frame, +                                             dht_create_linkfile_create_cbk, +                                             this, subvol, hashed_subvol, +                                             &local->loc); +                        goto done; +                } +                /* We either don't have a hashed subvol or the hashed subvol is +                 * the same as the one specified. No need to create the linkto +                 * file as we expect a lookup everywhere if there are problems +                 * with the parent layout +                 */                  STACK_WIND_COOKIE (frame, dht_create_cbk, subvol,                                     subvol, subvol->fops->create, &local->loc,                                     flags, mode, umask, fd, params);  | 
