diff options
| -rw-r--r-- | xlators/cluster/stripe/src/stripe.c | 4 | ||||
| -rw-r--r-- | xlators/cluster/stripe/src/stripe.h | 17 | 
2 files changed, 21 insertions, 0 deletions
diff --git a/xlators/cluster/stripe/src/stripe.c b/xlators/cluster/stripe/src/stripe.c index 44a00ee1216..86cc66f59c1 100644 --- a/xlators/cluster/stripe/src/stripe.c +++ b/xlators/cluster/stripe/src/stripe.c @@ -3314,6 +3314,8 @@ stripe_readv (call_frame_t *frame, xlator_t *this, fd_t *fd,          fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;          stripe_size = fctx->stripe_size; +        STRIPE_VALIDATE_FCTX (fctx, err); +          if (!stripe_size) {                  gf_log (this->name, GF_LOG_DEBUG,                          "Wrong stripe size for the file"); @@ -3459,6 +3461,8 @@ stripe_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,          fctx = (stripe_fd_ctx_t *)(long)tmp_fctx;          stripe_size = fctx->stripe_size; +        STRIPE_VALIDATE_FCTX (fctx, err); +          /* File has to be stripped across the child nodes */          for (idx = 0; idx< count; idx ++) {                  total_size += vector[idx].iov_len; diff --git a/xlators/cluster/stripe/src/stripe.h b/xlators/cluster/stripe/src/stripe.h index 2d245dac902..607dc9e74d4 100644 --- a/xlators/cluster/stripe/src/stripe.h +++ b/xlators/cluster/stripe/src/stripe.h @@ -64,6 +64,23 @@                  }                                               \          } while (0) +#define STRIPE_VALIDATE_FCTX(fctx, label) do {                  \ +        int     idx = 0;                                        \ +        if (!fctx) {                                            \ +                op_errno = EINVAL;                              \ +                goto label;                                     \ +        }                                                       \ +        for (idx = 0; idx < fctx->stripe_count; idx++) {        \ +                if (!fctx->xl_array[idx]) {                     \ +                        gf_log (this->name, GF_LOG_ERROR,       \ +                                "fctx->xl_array[%d] is NULL",   \ +                                idx);                           \ +                        op_errno = ESTALE;                      \ +                        goto label;                             \ +                }                                               \ +        }                                                       \ +       } while (0) +  typedef struct stripe_xattr_sort {          int32_t  pos;          int32_t  xattr_len;  | 
