[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