[Bugs] [Bug 1191497] New: Stripe translator wrongly calculating vector size and count

bugzilla at redhat.com bugzilla at redhat.com
Wed Feb 11 11:57:19 UTC 2015


https://bugzilla.redhat.com/show_bug.cgi?id=1191497

            Bug ID: 1191497
           Summary: Stripe translator wrongly calculating vector size and
                    count
           Product: GlusterFS
           Version: mainline
         Component: stripe
          Severity: medium
          Assignee: bugs at gluster.org
          Reporter: rkavunga at redhat.com
                CC: bugs at gluster.org, gluster-bugs at redhat.com



Description of problem:

If we are trying to write more than 3 gb file through a fuse mount with write
behind loaded, It will give transport endpoint disconnected error for rdma
transport. 

When write-behind aggregates two or more write request,. then that request will
reach in stripe writev with vector count > 1. Stripe translator will try to cut
the total size as chunks of stripe-size. When it tries to cut the a request
with vector count>1, the calculation is went wrong here 

3718 
3719                 fill_size = (local->stripe_size - 
3720                              ((offset + offset_offset) %
local->stripe_size)); 
3721                 if (fill_size > remaining_size) 
3722                         fill_size = remaining_size; 
3723  
3724                 remaining_size -= fill_size; 
3725  
3726                 tmp_count = iov_subset (vector, count, offset_offset, 
3727                                         offset_offset + fill_size, NULL); 
3728                 tmp_vec = GF_CALLOC (tmp_count, sizeof (struct iovec), 
3729                                      gf_stripe_mt_iovec); 
3730                 if (!tmp_vec) { 
3731                         op_errno = ENOMEM; 
3732                         goto err; 
3733                 } 
3734                 tmp_count = iov_subset (vector, count, offset_offset, 
3735                                         offset_offset + fill_size,
tmp_vec); 
3736  

When calculating the new vector with striped size, it generates a new invalid
vector with a valid address and the vector size as zero from iov_subset ().

If this request comes in rdma transport, rdma is not expecting to send a vector
with length as zero. So it will give an error from rdma transport. 

Version-Release number of selected component (if applicable):

mainline.

How reproducible:

50%

Steps to Reproduce:
1. Create a stripe 3 distributed volume with transport type as rdma
2. start the volume. 
3. mount the volume using fuse mount.
4. run dd if=/dev/zero of=/mnt/file1.txt bs=1M count=600 or run iozone -Rac -i
0 -g 8G (on mount point)

Actual results:

write fails with Transport end point is not connected

Expected results:

Should complete the write without any error.

Additional info:

-- 
You are receiving this mail because:
You are on the CC list for the bug.
You are the assignee for the bug.


More information about the Bugs mailing list