diff options
| author | Mohammed Junaid Ahmed <junaid@gluster.com> | 2011-03-14 22:22:04 +0000 | 
|---|---|---|
| committer | Vijay Bellur <vijay@dev.gluster.com> | 2011-03-16 00:32:07 -0700 | 
| commit | fa4e997970fb0e1d0abaae742a35701bcb576150 (patch) | |
| tree | 7e886b693682d47fca1bda082198a5c534b8a986 | |
| parent | 031eee923d8fd79bc1cf78b7b24fe82e44186848 (diff) | |
storage/posix: Added GF_XATTROP_ADD_LONG_ARRAY flag to perform 64bit xattrop operations.
Signed-off-by: Junaid <junaid@gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
BUG: 2473 (Support for volume and directory level quota)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2473
| -rw-r--r-- | libglusterfs/src/glusterfs.h | 1 | ||||
| -rw-r--r-- | xlators/storage/posix/src/posix.c | 21 | 
2 files changed, 18 insertions, 4 deletions
diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h index bbb865db983..a3fa58516e4 100644 --- a/libglusterfs/src/glusterfs.h +++ b/libglusterfs/src/glusterfs.h @@ -217,6 +217,7 @@ typedef enum {  typedef enum {  	GF_XATTROP_ADD_ARRAY, +        GF_XATTROP_ADD_ARRAY64  } gf_xattrop_flags_t; diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index f95c9f8ffbc..6ede55ffafa 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -3513,6 +3513,14 @@ __add_array (int32_t *dest, int32_t *src, int count)  	}  } +static void +__add_long_array (int64_t *dest, int64_t *src, int count) +{ +        int i = 0; +        for (i = 0; i < count; i++) { +                dest[i] = hton64 (ntoh64 (dest[i]) + ntoh64 (src[i])); +        } +}  /**   * xattrop - xattr operations - for internal use by GlusterFS @@ -3526,7 +3534,7 @@ do_xattrop (call_frame_t *frame, xlator_t *this,              loc_t *loc, fd_t *fd, gf_xattrop_flags_t optype, dict_t *xattr)  {  	char            *real_path = NULL; -	int32_t         *array = NULL; +        char            *array     = NULL;  	int              size = 0;  	int              count = 0; @@ -3574,8 +3582,8 @@ do_xattrop (call_frame_t *frame, xlator_t *this,          }  	while (trav && inode) { -		count = trav->value->len / sizeof (int32_t); -		array = GF_CALLOC (count, sizeof (int32_t), +		count = trav->value->len; +		array = GF_CALLOC (count, sizeof (char),                                     gf_posix_mt_int32_t);                  LOCK (&inode->lock); @@ -3616,10 +3624,15 @@ do_xattrop (call_frame_t *frame, xlator_t *this,                          switch (optype) {                          case GF_XATTROP_ADD_ARRAY: -                                __add_array (array, (int32_t *) trav->value->data,  +                                __add_array ((int32_t *) array, (int32_t *) trav->value->data,                                               trav->value->len / 4);                                  break; +                        case GF_XATTROP_ADD_ARRAY64: +                                __add_long_array ((int64_t *) array, (int64_t *) trav->value->data, +                                                  trav->value->len / 8); +                                break; +                          default:                                  gf_log (this->name, GF_LOG_ERROR,                                          "Unknown xattrop type (%d) on %s. Please send "  | 
