diff options
Diffstat (limited to 'xlators/features/path-convertor/src/path.c')
-rw-r--r-- | xlators/features/path-convertor/src/path.c | 94 |
1 files changed, 24 insertions, 70 deletions
diff --git a/xlators/features/path-convertor/src/path.c b/xlators/features/path-convertor/src/path.c index 8badef38c..b53286104 100644 --- a/xlators/features/path-convertor/src/path.c +++ b/xlators/features/path-convertor/src/path.c @@ -618,65 +618,49 @@ path_link (call_frame_t *frame, } int32_t -path_chmod (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - mode_t mode) +path_setattr_cbk (call_frame_t *frame, + void *cookie, + xlator_t *this, + int32_t op_ret, + int32_t op_errno, + struct stat *preop, + struct stat *postop) { - char *loc_path = (char *)loc->path; - char *tmp_path = NULL; - - if (!(tmp_path = path_this_to_that (this, loc->path))) { - STACK_UNWIND (frame, -1, ENOENT, NULL, NULL); - return 0; - } - loc->path = tmp_path; - - STACK_WIND (frame, - path_common_buf_cbk, - FIRST_CHILD(this), - FIRST_CHILD(this)->fops->chmod, - loc, - mode); - - loc->path = loc_path; - if (tmp_path != loc_path) - FREE (tmp_path); - + STACK_UNWIND (frame, op_ret, op_errno, preop, postop); return 0; } -int32_t -path_chown (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - uid_t uid, - gid_t gid) +int32_t +path_setattr (call_frame_t *frame, + xlator_t *this, + loc_t *loc, + struct stat *stbuf, + int32_t valid) { char *loc_path = (char *)loc->path; char *tmp_path = NULL; - + if (!(tmp_path = path_this_to_that (this, loc->path))) { STACK_UNWIND (frame, -1, ENOENT, NULL, NULL); return 0; } loc->path = tmp_path; - STACK_WIND (frame, - path_common_buf_cbk, - FIRST_CHILD(this), - FIRST_CHILD(this)->fops->chown, - loc, - uid, - gid); + STACK_WIND (frame, + path_setattr_cbk, + FIRST_CHILD(this), + FIRST_CHILD(this)->fops->setattr, + loc, + stbuf, valid); - loc->path = loc_path; + loc->path = loc_path; if (tmp_path != loc_path) FREE (tmp_path); return 0; } + int32_t path_truncate (call_frame_t *frame, xlator_t *this, @@ -706,34 +690,6 @@ path_truncate (call_frame_t *frame, return 0; } -int32_t -path_utimens (call_frame_t *frame, - xlator_t *this, - loc_t *loc, - struct timespec tv[2]) -{ - char *loc_path = (char *)loc->path; - char *tmp_path = NULL; - - if (!(tmp_path = path_this_to_that (this, loc->path))) { - STACK_UNWIND (frame, -1, ENOENT, NULL, NULL); - return 0; - } - loc->path = tmp_path; - - STACK_WIND (frame, - path_common_buf_cbk, - FIRST_CHILD(this), - FIRST_CHILD(this)->fops->utimens, - loc, - tv); - - loc->path = loc_path; - if (tmp_path != loc_path) - FREE (tmp_path); - - return 0; -} int32_t path_open (call_frame_t *frame, @@ -1173,10 +1129,7 @@ struct xlator_fops fops = { .symlink = path_symlink, .rename = path_rename, .link = path_link, - .chmod = path_chmod, - .chown = path_chown, .truncate = path_truncate, - .utimens = path_utimens, .open = path_open, .setxattr = path_setxattr, .getxattr = path_getxattr, @@ -1189,6 +1142,7 @@ struct xlator_fops fops = { .xattrop = path_xattrop, .entrylk = path_entrylk, .inodelk = path_inodelk, + .setattr = path_setattr, }; |