diff options
Diffstat (limited to 'xlators/protocol/client/src/client3_1-fops.c')
-rw-r--r-- | xlators/protocol/client/src/client3_1-fops.c | 159 |
1 files changed, 129 insertions, 30 deletions
diff --git a/xlators/protocol/client/src/client3_1-fops.c b/xlators/protocol/client/src/client3_1-fops.c index 6f7808ebb1b..f0b8c0bb52d 100644 --- a/xlators/protocol/client/src/client3_1-fops.c +++ b/xlators/protocol/client/src/client3_1-fops.c @@ -2234,10 +2234,17 @@ client3_1_lookup (call_frame_t *frame, xlator_t *this, loc_copy (&local->loc, args->loc); frame->local = local; - if (args->loc->parent) - memcpy (req.pargfid, args->loc->parent->gfid, 16); - else - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (args->loc->parent) { + if (!uuid_is_null (args->loc->parent->gfid)) + memcpy (req.pargfid, args->loc->parent->gfid, 16); + else + memcpy (req.pargfid, args->loc->pargfid, 16); + } else { + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + } if (args->dict) { content = dict_get (args->dict, GF_CONTENT_KEY); @@ -2346,7 +2353,11 @@ client3_1_stat (call_frame_t *frame, xlator_t *this, if (!(args->loc && args->loc->inode)) goto unwind; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + req.path = (char *)args->loc->path; conf = this->private; @@ -2383,7 +2394,11 @@ client3_1_truncate (call_frame_t *frame, xlator_t *this, if (!(args->loc && args->loc->inode)) goto unwind; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + req.path = (char *)args->loc->path; req.offset = args->offset; @@ -2482,7 +2497,11 @@ client3_1_access (call_frame_t *frame, xlator_t *this, if (!(args->loc && args->loc->inode)) goto unwind; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + req.path = (char *)args->loc->path; req.mask = args->mask; @@ -2522,7 +2541,11 @@ client3_1_readlink (call_frame_t *frame, xlator_t *this, if (!(args->loc && args->loc->inode)) goto unwind; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + req.path = (char *)args->loc->path; req.size = args->size; conf = this->private; @@ -2564,7 +2587,11 @@ client3_1_unlink (call_frame_t *frame, xlator_t *this, if (!(args->loc && args->loc->parent)) goto unwind; - memcpy (req.pargfid, args->loc->parent->gfid, 16); + if (!uuid_is_null (args->loc->parent->gfid)) + memcpy (req.pargfid, args->loc->parent->gfid, 16); + else + memcpy (req.pargfid, args->loc->pargfid, 16); + req.path = (char *)args->loc->path; req.bname = (char *)args->loc->name; conf = this->private; @@ -2604,7 +2631,11 @@ client3_1_rmdir (call_frame_t *frame, xlator_t *this, if (!(args->loc && args->loc->parent)) goto unwind; - memcpy (req.pargfid, args->loc->parent->gfid, 16); + if (!uuid_is_null (args->loc->parent->gfid)) + memcpy (req.pargfid, args->loc->parent->gfid, 16); + else + memcpy (req.pargfid, args->loc->pargfid, 16); + req.path = (char *)args->loc->path; req.bname = (char *)args->loc->name; req.flags = args->flags; @@ -2654,7 +2685,11 @@ client3_1_symlink (call_frame_t *frame, xlator_t *this, loc_copy (&local->loc, args->loc); frame->local = local; - memcpy (req.pargfid, args->loc->parent->gfid, 16); + if (!uuid_is_null (args->loc->parent->gfid)) + memcpy (req.pargfid, args->loc->parent->gfid, 16); + else + memcpy (req.pargfid, args->loc->pargfid, 16); + req.path = (char *)args->loc->path; req.linkname = (char *)args->linkname; req.bname = (char *)args->loc->name; @@ -2720,8 +2755,15 @@ client3_1_rename (call_frame_t *frame, xlator_t *this, args->newloc->parent)) goto unwind; - memcpy (req.oldgfid, args->oldloc->parent->gfid, 16); - memcpy (req.newgfid, args->newloc->parent->gfid, 16); + if (!uuid_is_null (args->oldloc->parent->gfid)) + memcpy (req.oldgfid, args->oldloc->parent->gfid, 16); + else + memcpy (req.oldgfid, args->oldloc->pargfid, 16); + + if (!uuid_is_null (args->newloc->parent->gfid)) + memcpy (req.newgfid, args->newloc->parent->gfid, 16); + else + memcpy (req.newgfid, args->newloc->pargfid, 16); req.oldpath = (char *)args->oldloc->path; req.oldbname = (char *)args->oldloc->name; @@ -2765,8 +2807,15 @@ client3_1_link (call_frame_t *frame, xlator_t *this, args->newloc->parent)) goto unwind; - memcpy (req.oldgfid, args->oldloc->inode->gfid, 16); - memcpy (req.newgfid, args->newloc->parent->gfid, 16); + if (!uuid_is_null (args->oldloc->inode->gfid)) + memcpy (req.oldgfid, args->oldloc->inode->gfid, 16); + else + memcpy (req.oldgfid, args->oldloc->gfid, 16); + + if (!uuid_is_null (args->newloc->parent->gfid)) + memcpy (req.newgfid, args->newloc->parent->gfid, 16); + else + memcpy (req.newgfid, args->newloc->pargfid, 16); local = GF_CALLOC (1, sizeof (*local), gf_client_mt_clnt_local_t); if (!local) { @@ -2826,7 +2875,11 @@ client3_1_mknod (call_frame_t *frame, xlator_t *this, loc_copy (&local->loc, args->loc); frame->local = local; - memcpy (req.pargfid, args->loc->parent->gfid, 16); + if (!uuid_is_null (args->loc->parent->gfid)) + memcpy (req.pargfid, args->loc->parent->gfid, 16); + else + memcpy (req.pargfid, args->loc->pargfid, 16); + req.path = (char *)args->loc->path; req.bname = (char *)args->loc->name; req.mode = args->mode; @@ -2903,7 +2956,11 @@ client3_1_mkdir (call_frame_t *frame, xlator_t *this, loc_copy (&local->loc, args->loc); frame->local = local; - memcpy (req.pargfid, args->loc->parent->gfid, 16); + if (!uuid_is_null (args->loc->parent->gfid)) + memcpy (req.pargfid, args->loc->parent->gfid, 16); + else + memcpy (req.pargfid, args->loc->pargfid, 16); + req.path = (char *)args->loc->path; req.bname = (char *)args->loc->name; req.mode = args->mode; @@ -2980,7 +3037,11 @@ client3_1_create (call_frame_t *frame, xlator_t *this, loc_copy (&local->loc, args->loc); frame->local = local; - memcpy (req.pargfid, args->loc->parent->gfid, 16); + if (!uuid_is_null (args->loc->parent->gfid)) + memcpy (req.pargfid, args->loc->parent->gfid, 16); + else + memcpy (req.pargfid, args->loc->pargfid, 16); + req.path = (char *)args->loc->path; req.bname = (char *)args->loc->name; req.mode = args->mode; @@ -3058,7 +3119,11 @@ client3_1_open (call_frame_t *frame, xlator_t *this, loc_copy (&local->loc, args->loc); frame->local = local; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + req.flags = gf_flags_from_flags (args->flags); req.wbflags = args->wbflags; req.path = (char *)args->loc->path; @@ -3466,7 +3531,11 @@ client3_1_opendir (call_frame_t *frame, xlator_t *this, loc_copy (&local->loc, args->loc); frame->local = local; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + req.path = (char *)args->loc->path; conf = this->private; @@ -3567,9 +3636,12 @@ client3_1_statfs (call_frame_t *frame, xlator_t *this, if (!args->loc) goto unwind; - if (args->loc->inode) - memcpy (req.gfid, args->loc->inode->gfid, 16); - else + if (args->loc->inode) { + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + } else req.gfid[15] = 1; req.path = (char *)args->loc->path; @@ -3611,7 +3683,11 @@ client3_1_setxattr (call_frame_t *frame, xlator_t *this, if (!(args->loc && args->loc->inode)) goto unwind; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + if (args->dict) { ret = dict_allocate_and_serialize (args->dict, &req.dict.dict_val, @@ -3922,7 +3998,10 @@ client3_1_getxattr (call_frame_t *frame, xlator_t *this, local->iobref = rsp_iobref; rsp_iobref = NULL; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); req.namelen = 1; /* Use it as a flag */ req.path = (char *)args->loc->path; req.name = (char *)args->name; @@ -4046,7 +4125,11 @@ client3_1_xattrop (call_frame_t *frame, xlator_t *this, local->iobref = rsp_iobref; rsp_iobref = NULL; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + if (args->dict) { ret = dict_allocate_and_serialize (args->dict, &req.dict.dict_val, @@ -4258,7 +4341,11 @@ client3_1_removexattr (call_frame_t *frame, xlator_t *this, if (!(args->loc && args->loc->inode)) goto unwind; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + req.path = (char *)args->loc->path; req.name = (char *)args->name; @@ -4392,7 +4479,11 @@ client3_1_inodelk (call_frame_t *frame, xlator_t *this, if (!(args->loc && args->loc->inode)) goto unwind; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + if (args->cmd == F_GETLK || args->cmd == F_GETLK64) gf_cmd = GF_LK_GETLK; else if (args->cmd == F_SETLK || args->cmd == F_SETLK64) @@ -4549,7 +4640,11 @@ client3_1_entrylk (call_frame_t *frame, xlator_t *this, if (!(args->loc && args->loc->inode)) goto unwind; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + req.path = (char *)args->loc->path; req.cmd = args->cmd_entrylk; req.type = args->type; @@ -4966,7 +5061,11 @@ client3_1_setattr (call_frame_t *frame, xlator_t *this, if (!(args->loc && args->loc->inode)) goto unwind; - memcpy (req.gfid, args->loc->inode->gfid, 16); + if (!uuid_is_null (args->loc->inode->gfid)) + memcpy (req.gfid, args->loc->inode->gfid, 16); + else + memcpy (req.gfid, args->loc->gfid, 16); + req.path = (char *)args->loc->path; req.valid = args->valid; gf_stat_from_iatt (&req.stbuf, args->stbuf); |