target/file: Update hw_max_sectors based on current block_size
authorNicholas Bellinger <nab@linux-iscsi.org>
Thu, 12 Dec 2013 20:24:11 +0000 (12:24 -0800)
committerNicholas Bellinger <nab@linux-iscsi.org>
Thu, 19 Dec 2013 08:18:54 +0000 (00:18 -0800)
commit95cadace8f3959282e76ebf8b382bd0930807d2c
tree2b8773e84f7dc600eba50665d18377f2f130b1e8
parent2853c2b6671509591be09213954d7249ca6ff224
target/file: Update hw_max_sectors based on current block_size

This patch allows FILEIO to update hw_max_sectors based on the current
max_bytes_per_io.  This is required because vfs_[writev,readv]() can accept
a maximum of 2048 iovecs per call, so the enforced hw_max_sectors really
needs to be calculated based on block_size.

This addresses a >= v3.5 bug where block_size=512 was rejecting > 1M
sized I/O requests, because FD_MAX_SECTORS was hardcoded to 2048 for
the block_size=4096 case.

(v2: Use max_bytes_per_io instead of ->update_hw_max_sectors)

Reported-by: Henrik Goldman <hg@x-formation.com>
Cc: <stable@vger.kernel.org> #3.5+
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_device.c
drivers/target/target_core_file.c
drivers/target/target_core_file.h
include/target/target_core_base.h