Hi Bravo,
We also have the same kind of problem with our Compellent SAN.
According to Compellent Support, the problem seems to be related to a change merged the version 3.19 of the kernel.
https://git.kernel.org/cgit/linux/k.../?id=34b48db66e08ca1c1bc07cf305d672ac940268dc
Each block device that exists on a Linux system is allocated a queue directory (located at /sys/block/xxx/queue/). This directory contains 2 parameters that are relevant to this problem:
max_hw_sectors_kb (RO)
----------------------
This is the maximum number of kilobytes supported in a single data transfer.
max_sectors_kb (RW)
-------------------
This is the maximum number of kilobytes that the block layer will allow
for a filesystem request. Must be smaller than or equal to the maximum
size allowed by the hardware.
The kernel 3.19 (and above) has changed the way that max_sectors_kb is calculated. In previous kernel releases, the value was always set to 512KB. After this change, the value of max_sectors_kb is set to the value of max_hw_sectors_kb. This essentially increased the maximum size of a single IO transfer to a given block device from 512KB to 32MB.
This change also exposed a problem with the Compellent SAN 10Gb iSCSI driver for IO sizes greater than 8MB. The server process producing large IO may hang or the volume may become unavailable due to the large IO size.
In order to prevent this problem, the max_sectors_kb for each block device must be changed dynamically on the Linux server. For example:
echo 512 > /sys/block/sdc/queue/max_sectors_kb
echo 512 > /sys/block/sdd/queue/max_sectors_kb
...
These changes are not persistent through reboots. An init script must be implemented to run when a given server boots that will modify this parameter for all iSCSI block devices.
You can probably refer to this link to create udev script
http://longwhiteclouds.com/2016/03/06/default-io-size-change-in-linux-kernel/
Yanick