mirror-linux/include
David Howells 1da29f2c39 netfs, cifs: Fix handling of short DIO read
Short DIO reads, particularly in relation to cifs, are not being handled
correctly by cifs and netfslib.  This can be tested by doing a DIO read of
a file where the size of read is larger than the size of the file.  When it
crosses the EOF, it gets a short read and this gets retried, and in the
case of cifs, the retry read fails, with the failure being translated to
ENODATA.

Fix this by the following means:

 (1) Add a flag, NETFS_SREQ_HIT_EOF, for the filesystem to set when it
     detects that the read did hit the EOF.

 (2) Make the netfslib read assessment stop processing subrequests when it
     encounters one with that flag set.

 (3) Return rreq->transferred, the accumulated contiguous amount read to
     that point, to userspace for a DIO read.

 (4) Make cifs set the flag and clear the error if the read RPC returned
     ENODATA.

 (5) Make cifs set the flag and clear the error if a short read occurred
     without error and the read-to file position is now at the remote inode
     size.

Fixes: 69c3c023af ("cifs: Implement netfslib hooks")
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Steve French <sfrench@samba.org>
cc: Paulo Alcantara <pc@manguebit.com>
cc: Jeff Layton <jlayton@kernel.org>
cc: linux-cifs@vger.kernel.org
cc: netfs@lists.linux.dev
cc: linux-fsdevel@vger.kernel.org
Signed-off-by: Steve French <stfrench@microsoft.com>
2024-08-28 07:47:36 -05:00
..
acpi ACPI: video: Add Dell UART backlight controller detection 2024-08-19 15:58:35 +02:00
asm-generic runtime constants: deal with old decrepit linkers 2024-08-03 08:38:45 -07:00
clocksource
crypto
drm drm/buddy: Add start address support to trim function 2024-08-07 18:19:00 -04:00
dt-bindings
keys
kunit
kvm
linux netfs, cifs: Fix handling of short DIO read 2024-08-28 07:47:36 -05:00
math-emu
media
memory
misc
net kcm: Serialise kcm_sendmsg() for the same socket. 2024-08-19 18:36:12 -07:00
pcmcia
ras
rdma
rv
scsi scsi: core: Fix the return value of scsi_logical_block_count() 2024-08-16 21:02:06 -04:00
soc net: mscc: ocelot: treat 802.1ad tagged traffic as 802.1Q-untagged 2024-08-16 09:59:32 +01:00
sound ASoC: Fixes for v6.11 2024-08-09 09:58:07 +02:00
target
trace rpcrdma: Trace connection registration and unregistration 2024-08-19 11:50:41 -04:00
uapi drm/xe/oa/uapi: Make bit masks unsigned 2024-08-19 10:44:18 -04:00
ufs scsi: ufs: core: Add a quirk for handling broken LSDBS field in controller capabilities register 2024-08-16 21:09:17 -04:00
vdso
video
xen