diff options
| author | Junaid <junaid@gluster.com> | 2011-03-31 04:28:26 +0000 | 
|---|---|---|
| committer | Vijay Bellur <vijay@dev.gluster.com> | 2011-03-31 05:04:26 -0700 | 
| commit | 1c148f85c5abf561faeb68c699a13c8bd683de5e (patch) | |
| tree | 97c2a75c55d48ea1bce5cc7c6744f22882ee132c | |
| parent | 99779326d09f7ac98bb75bb1432d53c7c320a5c9 (diff) | |
features/marker: Fix memory corruption.
Signed-off-by: Junaid <junaid@gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
BUG: 2629 ()
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2629
| -rw-r--r-- | libglusterfs/src/glusterfs.h | 2 | ||||
| -rw-r--r-- | xlators/features/marker/src/marker-common.c | 5 | ||||
| -rw-r--r-- | xlators/features/marker/src/marker-quota.c | 22 | ||||
| -rw-r--r-- | xlators/features/marker/src/marker-quota.h | 2 | ||||
| -rw-r--r-- | xlators/features/marker/src/marker.c | 10 | 
5 files changed, 24 insertions, 17 deletions
diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h index 7c1d681e9..56b5e2b9c 100644 --- a/libglusterfs/src/glusterfs.h +++ b/libglusterfs/src/glusterfs.h @@ -91,6 +91,8 @@  #define GLUSTERFS_INODELK_COUNT "glusterfs.inodelk-count"  #define GLUSTERFS_ENTRYLK_COUNT "glusterfs.entrylk-count"  #define GLUSTERFS_POSIXLK_COUNT "glusterfs.posixlk-count" +#define QUOTA_SIZE_KEY "trusted.glusterfs.quota.size" +  #define GLUSTERFS_RDMA_INLINE_THRESHOLD       (2048)  #define GLUSTERFS_RDMA_MAX_HEADER_SIZE        (228) /* (sizeof (rdma_header_t)                 \                                                         + RDMA_MAX_SEGMENTS \ diff --git a/xlators/features/marker/src/marker-common.c b/xlators/features/marker/src/marker-common.c index 3e2d7f000..855fb9936 100644 --- a/xlators/features/marker/src/marker-common.c +++ b/xlators/features/marker/src/marker-common.c @@ -49,13 +49,14 @@ marker_force_inode_ctx_get (inode_t *inode, xlator_t *this,          {                  ret = __inode_ctx_get (inode, this, &ctx_int);                  if (ret == 0) -                        *ctx = (marker_inode_ctx_t *) ctx_int; +                        *ctx = (marker_inode_ctx_t *) (unsigned long)ctx_int;                  else {                          *ctx = marker_inode_ctx_new ();                          if (*ctx == NULL)                                  goto unlock; -                        ret = __inode_ctx_put (inode, this, (uint64_t ) *ctx); +                        ret = __inode_ctx_put (inode, this, +                                               (uint64_t )(unsigned long) *ctx);                          if (ret == -1) {                                  GF_FREE (*ctx);                                  goto unlock; diff --git a/xlators/features/marker/src/marker-quota.c b/xlators/features/marker/src/marker-quota.c index 629c5de48..4d5fed66e 100644 --- a/xlators/features/marker/src/marker-quota.c +++ b/xlators/features/marker/src/marker-quota.c @@ -98,6 +98,8 @@ release_lock_on_dirty_inode (call_frame_t *frame, void *cookie, xlator_t *this,          struct gf_flock   lock;          quota_local_t    *local = NULL; +        local = frame->local; +          if (op_ret == -1) {                  local->err = -1; @@ -106,8 +108,6 @@ release_lock_on_dirty_inode (call_frame_t *frame, void *cookie, xlator_t *this,                  return 0;          } -        local = frame->local; -          if (op_ret == 0)                  local->ctx->dirty = 0; @@ -136,13 +136,13 @@ mark_inode_undirty (call_frame_t *frame, void *cookie, xlator_t *this,          quota_local_t *local     = NULL;          marker_conf_t  *priv      = NULL; +        local = (quota_local_t *) frame->local; +          if (op_ret == -1)                  goto err;          priv = (marker_conf_t *) this->private; -        local = (quota_local_t *) frame->local; -          if (!dict)                  goto wind; @@ -288,6 +288,7 @@ get_child_contribution (call_frame_t *frame,                          struct iatt *postparent)  {          int32_t          ret            = -1; +	int32_t		 val	 	= 0;          char             contri_key [512] = {0, };          int64_t         *contri         = NULL;          quota_local_t   *local          = NULL; @@ -324,11 +325,11 @@ get_child_contribution (call_frame_t *frame,  out:          LOCK (&local->lock);          { -                local->dentry_child_count--; +                val = local->dentry_child_count--;          }          UNLOCK (&local->lock); -        if (local->dentry_child_count == 0) { +        if (val== 0) {                  if (local->err) {                          QUOTA_SAFE_DECREMENT (&local->lock, local->ref); @@ -1377,12 +1378,12 @@ start_quota_txn (xlator_t *this, loc_t *loc,          ret = loc_copy (&local->loc, loc);          if (ret < 0) -                goto local_unref; +                goto fr_destroy;          ret = quota_inode_loc_fill (NULL, local->loc.parent,                                      &local->parent_loc);          if (ret < 0) -                goto local_unref; +                goto fr_destroy;          local->ctx = ctx;          local->contri = contri; @@ -1391,9 +1392,6 @@ start_quota_txn (xlator_t *this, loc_t *loc,          return 0; -local_unref: -        quota_local_unref (this, local); -  fr_destroy:          QUOTA_STACK_DESTROY (frame, this); @@ -1557,7 +1555,7 @@ inspect_file_xattr (xlator_t *this,                  ret = dict_get_bin (dict, contri_key, (void **) &contri_int);                  if (ret == 0) { -                        contri_ptr = (int64_t *) contri_int; +                        contri_ptr = (int64_t *)(unsigned long)contri_int;                          contribution->contribution = ntoh64 (*contri_ptr); diff --git a/xlators/features/marker/src/marker-quota.h b/xlators/features/marker/src/marker-quota.h index 4e2e480ab..e709bcac2 100644 --- a/xlators/features/marker/src/marker-quota.h +++ b/xlators/features/marker/src/marker-quota.h @@ -29,8 +29,8 @@  #include "marker-mem-types.h"  #define QUOTA_XATTR_PREFIX "trusted.glusterfs" -#define QUOTA_SIZE_KEY "trusted.glusterfs.quota.size"  #define QUOTA_DIRTY_KEY "trusted.glusterfs.quota.dirty" +  #define CONTRIBUTION "contri"  #define VOL_NAME volname  #define CONTRI_KEY_MAX 512 diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index 43bb58cd8..4062b8d0b 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -1886,11 +1886,17 @@ err:  int32_t  marker_forget (xlator_t *this, inode_t *inode)  { -        marker_inode_ctx_t      *ctx = NULL; +        marker_inode_ctx_t *ctx   = NULL; +        uint64_t            value = 0; -        if (inode_ctx_del (inode, this, (uint64_t *) &ctx) != 0) +        if (inode_ctx_del (inode, this, &value) != 0)                  goto out; +        ctx = (marker_inode_ctx_t *)(unsigned long)value; +        if (ctx == NULL) { +                goto out; +        } +          quota_forget (this, ctx->quota_ctx);          GF_FREE (ctx);  | 
