diff options
| author | Amar Tumballi <amar@gluster.com> | 2012-01-17 05:57:24 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@gluster.com> | 2012-01-25 02:24:20 -0800 | 
| commit | d7ecaaa1ed0f88869812ea17cb64a102a74c8c1c (patch) | |
| tree | 4293106362bf9dec2e6260a4062239a9b7340cc0 /xlators/storage/posix/src | |
| parent | 6c54022f1b1c7f5f458f6a7e783203d11e7f89b5 (diff) | |
core: add 'fremovexattr()' fop
so operations can be done on fd for extended attribute removal
Change-Id: Ie026f1b53793aeb4ae33e96ea5408c7a97f34bf6
Signed-off-by: Amar Tumballi <amar@gluster.com>
BUG: 766571
Reviewed-on: http://review.gluster.com/778
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@gluster.com>
Diffstat (limited to 'xlators/storage/posix/src')
| -rw-r--r-- | xlators/storage/posix/src/posix.c | 54 | 
1 files changed, 54 insertions, 0 deletions
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index f895aec2b..5cfdbd4f5 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -2786,6 +2786,59 @@ out:          return 0;  } +int32_t +posix_fremovexattr (call_frame_t *frame, xlator_t *this, +                    fd_t *fd, const char *name) +{ +        int32_t           op_ret   = -1; +        int32_t           op_errno = 0; +        struct posix_fd * pfd      = NULL; +        int               _fd      = -1; +        uint64_t          tmp_pfd  = 0; +        int               ret      = -1; + +        DECLARE_OLD_FS_ID_VAR; + +        if (!strcmp (GFID_XATTR_KEY, name)) { +                gf_log (this->name, GF_LOG_WARNING, "Remove xattr called" +                        " on gfid for file"); +                goto out; +        } + +        ret = fd_ctx_get (fd, this, &tmp_pfd); +        if (ret < 0) { +                op_errno = -ret; +                gf_log (this->name, GF_LOG_WARNING, +                        "pfd is NULL from fd=%p", fd); +                goto out; +        } +        pfd = (struct posix_fd *)(long)tmp_pfd; + +        _fd = pfd->fd; + + + +        SET_FS_ID (frame->root->uid, frame->root->gid); + +        op_ret = sys_fremovexattr (_fd, name); +        if (op_ret == -1) { +                op_errno = errno; +                if (op_errno != ENOATTR && op_errno != EPERM) +                        gf_log (this->name, GF_LOG_ERROR, +                                "fremovexattr (for %s): %s", +                                name, strerror (op_errno)); +                goto out; +        } + +        op_ret = 0; + +out: +        SET_TO_OLD_FS_ID (); + +        STACK_UNWIND_STRICT (fremovexattr, frame, op_ret, op_errno); +        return 0; +} +  int32_t  posix_fsyncdir (call_frame_t *frame, xlator_t *this, @@ -4037,6 +4090,7 @@ struct xlator_fops fops = {          .getxattr    = posix_getxattr,          .fgetxattr   = posix_fgetxattr,          .removexattr = posix_removexattr, +        .fremovexattr = posix_fremovexattr,          .fsyncdir    = posix_fsyncdir,          .access      = posix_access,          .ftruncate   = posix_ftruncate,  | 
