diff options
| -rw-r--r-- | libglusterfs/src/common-utils.h | 2 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-common.h | 1 | ||||
| -rw-r--r-- | xlators/cluster/stripe/src/stripe.c | 7 | 
3 files changed, 9 insertions, 1 deletions
diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h index 6c83a100427..d17573e2da6 100644 --- a/libglusterfs/src/common-utils.h +++ b/libglusterfs/src/common-utils.h @@ -72,6 +72,8 @@ void trap (void);  #define GEOREP "geo-replication"  #define GHADOOP "glusterfs-hadoop" +#define WIPE(statp) do { typeof(*statp) z = {0,}; if (statp) *statp = z; } while (0) +  enum _gf_boolean  {  	_gf_false = 0, diff --git a/xlators/cluster/dht/src/dht-common.h b/xlators/cluster/dht/src/dht-common.h index 5d921239ef4..d79ed955697 100644 --- a/xlators/cluster/dht/src/dht-common.h +++ b/xlators/cluster/dht/src/dht-common.h @@ -219,7 +219,6 @@ struct dht_disk_layout {  };  typedef struct dht_disk_layout dht_disk_layout_t; -#define WIPE(statp) do { typeof(*statp) z = {0,}; if (statp) *statp = z; } while (0)  #define ENTRY_MISSING(op_ret, op_errno) (op_ret == -1 && op_errno == ENOENT) diff --git a/xlators/cluster/stripe/src/stripe.c b/xlators/cluster/stripe/src/stripe.c index bef1eb7495d..1bea7a73382 100644 --- a/xlators/cluster/stripe/src/stripe.c +++ b/xlators/cluster/stripe/src/stripe.c @@ -3556,6 +3556,9 @@ stripe_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          mlocal->replies[index].stbuf  = *stbuf;                          mlocal->replies[index].count  = count;                          mlocal->replies[index].vector = iov_dup (vector, count); +                        if (local->stbuf_size < stbuf->ia_size) +                                local->stbuf_size = stbuf->ia_size; +                        local->stbuf_blocks += stbuf->ia_blocks;                          if (!mlocal->iobref)                                  mlocal->iobref = iobref_new (); @@ -3613,11 +3616,15 @@ stripe_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                   * cause any bugs at higher levels */                  memcpy (&tmp_stbuf, &mlocal->replies[0].stbuf,                          sizeof (struct iatt)); +                tmp_stbuf.ia_size = local->stbuf_size; +                tmp_stbuf.ia_blocks = local->stbuf_blocks;          done:                  /* */                  GF_FREE (mlocal->replies);                  tmp_iobref = mlocal->iobref; +                /* work around for nfs truncated read. Bug 3774 */ +                WIPE (&tmp_stbuf);                  STRIPE_STACK_UNWIND (readv, mframe, op_ret, op_errno, final_vec,                                       final_count, &tmp_stbuf, tmp_iobref);  | 
