diff options
| author | Amar Tumballi <amar@gluster.com> | 2012-01-21 20:05:55 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@gluster.com> | 2012-01-25 02:26:51 -0800 | 
| commit | 49c325d949b2df06572df7dd3825735fb9c8cd6f (patch) | |
| tree | bfd7fd3c21610ac4fc6ab57f36f09259fb0636f2 /xlators/debug | |
| parent | d7ecaaa1ed0f88869812ea17cb64a102a74c8c1c (diff) | |
complete the implementation of missing 'f**xattr()' fops
in debug/* and cluster/* translators and a syncop_fsetxattr()
added a test case for testing the working of 'f-fop()' on
fuse mount.
Change-Id: I0c2aeeb30a0fb382ef2495cca1e66b00abaffd35
Signed-off-by: Amar Tumballi <amar@gluster.com>
BUG: 766571
Reviewed-on: http://review.gluster.com/802
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@gluster.com>
Diffstat (limited to 'xlators/debug')
| -rw-r--r-- | xlators/debug/error-gen/src/error-gen.c | 129 | ||||
| -rw-r--r-- | xlators/debug/io-stats/src/io-stats.c | 76 | 
2 files changed, 205 insertions, 0 deletions
diff --git a/xlators/debug/error-gen/src/error-gen.c b/xlators/debug/error-gen/src/error-gen.c index 7e776332f09..ca2ce488fa9 100644 --- a/xlators/debug/error-gen/src/error-gen.c +++ b/xlators/debug/error-gen/src/error-gen.c @@ -113,6 +113,15 @@ sys_error_t error_no_list[] = {          [GF_FOP_REMOVEXATTR]       = { .error_no_count = 4,                                      .error_no = {EACCES,EBADF,ENAMETOOLONG,                                                   EINTR}}, +        [GF_FOP_FSETXATTR]          = { .error_no_count = 4, +                                        .error_no = {EACCES,EBADF,EINTR, +                                                     ENAMETOOLONG}}, +        [GF_FOP_FGETXATTR]          = { .error_no_count = 4, +                                        .error_no = {EACCES,EBADF,ENAMETOOLONG, +                                                     EINTR}}, +        [GF_FOP_FREMOVEXATTR]       = { .error_no_count = 4, +                                        .error_no = {EACCES,EBADF,ENAMETOOLONG, +                                                     EINTR}},          [GF_FOP_OPENDIR]           = { .error_no_count = 8,                                      .error_no = {EACCES,EEXIST,EFAULT,                                                   EISDIR,EMFILE, @@ -286,6 +295,12 @@ get_fop_int (char **op_no_str)                  return GF_FOP_GETXATTR;          else if (!strcmp ((*op_no_str), "removexattr"))                  return GF_FOP_REMOVEXATTR; +        else if (!strcmp ((*op_no_str), "fsetxattr")) +                return GF_FOP_FSETXATTR; +        else if (!strcmp ((*op_no_str), "fgetxattr")) +                return GF_FOP_FGETXATTR; +        else if (!strcmp ((*op_no_str), "fremovexattr")) +                return GF_FOP_FREMOVEXATTR;          else if (!strcmp ((*op_no_str), "opendir"))                  return GF_FOP_OPENDIR;          else if (!strcmp ((*op_no_str), "readdir")) @@ -1410,6 +1425,80 @@ error_gen_getxattr (call_frame_t *frame, xlator_t *this, loc_t *loc,  	return 0;  } +int +error_gen_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, +                         int32_t op_ret, int32_t op_errno) +{ +	STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno); + +	return 0; +} + + +int +error_gen_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, +                     dict_t *dict, int32_t flags) +{ +	int              op_errno = 0; +        eg_t            *egp = NULL; +        int              enable = 1; + +        egp = this->private; +        enable = egp->enable[GF_FOP_FSETXATTR]; + +        if (enable) +                op_errno = error_gen (this, GF_FOP_FSETXATTR); + +	if (op_errno) { +		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno)); +		STACK_UNWIND_STRICT (fsetxattr, frame, -1, op_errno); +		return 0; +	} + +	STACK_WIND (frame, error_gen_fsetxattr_cbk, +		    FIRST_CHILD(this), +		    FIRST_CHILD(this)->fops->fsetxattr, +		    fd, dict, flags); +	return 0; +} + + +int +error_gen_fgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, +                         int32_t op_ret, int32_t op_errno, dict_t *dict) +{ +	STACK_UNWIND_STRICT (fgetxattr, frame, op_ret, op_errno, dict); +	return 0; +} + + +int +error_gen_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, +                     const char *name) +{ +	int              op_errno = 0; +        eg_t            *egp = NULL; +        int              enable = 1; + +        egp = this->private; +        enable = egp->enable[GF_FOP_FGETXATTR]; + +        if (enable) +                op_errno = error_gen (this, GF_FOP_FGETXATTR); + +	if (op_errno) { +		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno)); +		STACK_UNWIND_STRICT (fgetxattr, frame, -1, op_errno, NULL); +		return 0; +	} + +	STACK_WIND (frame, error_gen_fgetxattr_cbk, +		    FIRST_CHILD(this), +		    FIRST_CHILD(this)->fops->fgetxattr, +		    fd, name); +	return 0; +} +  int  error_gen_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this, @@ -1524,6 +1613,43 @@ error_gen_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,  	return 0;  } +int +error_gen_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, +			   int32_t op_ret, int32_t op_errno) +{ +	STACK_UNWIND_STRICT (fremovexattr, frame, op_ret, op_errno); + +	return 0; +} + + +int +error_gen_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd, +                        const char *name) +{ +	int              op_errno = 0; +        eg_t            *egp = NULL; +        int              enable = 1; + +        egp = this->private; +        enable = egp->enable[GF_FOP_FREMOVEXATTR]; + +        if (enable) +                op_errno = error_gen (this, GF_FOP_FREMOVEXATTR); + +	if (op_errno) { +		GF_ERROR(this, "unwind(-1, %s)", strerror (op_errno)); +		STACK_UNWIND_STRICT (fremovexattr, frame, -1, op_errno); +		return 0; +	} + +	STACK_WIND (frame, error_gen_fremovexattr_cbk, +		    FIRST_CHILD(this), +		    FIRST_CHILD(this)->fops->fremovexattr, +		    fd, name); +	return 0; +} +  int  error_gen_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this, @@ -2008,6 +2134,9 @@ struct xlator_fops fops = {  	.setxattr    = error_gen_setxattr,  	.getxattr    = error_gen_getxattr,  	.removexattr = error_gen_removexattr, +	.fsetxattr    = error_gen_fsetxattr, +	.fgetxattr    = error_gen_fgetxattr, +	.fremovexattr = error_gen_fremovexattr,  	.opendir     = error_gen_opendir,  	.readdir     = error_gen_readdir,  	.readdirp    = error_gen_readdirp, diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c index 923470b8757..e47b062eebf 100644 --- a/xlators/debug/io-stats/src/io-stats.c +++ b/xlators/debug/io-stats/src/io-stats.c @@ -1636,6 +1636,35 @@ io_stats_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          return 0;  } +int +io_stats_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, +                        int32_t op_ret, int32_t op_errno) +{ +        UPDATE_PROFILE_STATS (frame, FSETXATTR); +        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno); +        return 0; +} + + +int +io_stats_fgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, +                        int32_t op_ret, int32_t op_errno, dict_t *dict) +{ +        UPDATE_PROFILE_STATS (frame, FGETXATTR); +        STACK_UNWIND_STRICT (fgetxattr, frame, op_ret, op_errno, dict); +        return 0; +} + + +int +io_stats_fremovexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, +                           int32_t op_ret, int32_t op_errno) +{ +        UPDATE_PROFILE_STATS (frame, FREMOVEXATTR); +        STACK_UNWIND_STRICT (fremovexattr, frame, op_ret, op_errno); +        return 0; +} +  int  io_stats_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, @@ -2205,6 +2234,50 @@ io_stats_removexattr (call_frame_t *frame, xlator_t *this,  int +io_stats_fsetxattr (call_frame_t *frame, xlator_t *this, +                    fd_t *fd, dict_t *dict, +                    int32_t flags) +{ +        START_FOP_LATENCY (frame); + +        STACK_WIND (frame, io_stats_fsetxattr_cbk, +                    FIRST_CHILD(this), +                    FIRST_CHILD(this)->fops->fsetxattr, +                    fd, dict, flags); +        return 0; +} + + +int +io_stats_fgetxattr (call_frame_t *frame, xlator_t *this, +                    fd_t *fd, const char *name) +{ +        START_FOP_LATENCY (frame); + +        STACK_WIND (frame, io_stats_fgetxattr_cbk, +                    FIRST_CHILD(this), +                    FIRST_CHILD(this)->fops->fgetxattr, +                    fd, name); +        return 0; +} + + +int +io_stats_fremovexattr (call_frame_t *frame, xlator_t *this, +                       fd_t *fd, const char *name) +{ +        START_FOP_LATENCY (frame); + +        STACK_WIND (frame, io_stats_fremovexattr_cbk, +                    FIRST_CHILD(this), +                    FIRST_CHILD(this)->fops->fremovexattr, +                    fd, name); + +        return 0; +} + + +int  io_stats_opendir (call_frame_t *frame, xlator_t *this,                    loc_t *loc, fd_t *fd)  { @@ -2681,6 +2754,9 @@ struct xlator_fops fops = {          .setxattr    = io_stats_setxattr,          .getxattr    = io_stats_getxattr,          .removexattr = io_stats_removexattr, +        .fsetxattr    = io_stats_fsetxattr, +        .fgetxattr    = io_stats_fgetxattr, +        .fremovexattr = io_stats_fremovexattr,          .opendir     = io_stats_opendir,          .readdir     = io_stats_readdir,          .readdirp    = io_stats_readdirp,  | 
