mbox series

[0/6] mm, netfs, cifs: Miscellaneous fixes

Message ID 20240828210249.1078637-1-dhowells@redhat.com (mailing list archive)
Headers show
Series mm, netfs, cifs: Miscellaneous fixes | expand

Message

David Howells Aug. 28, 2024, 9:02 p.m. UTC
Hi Christian, Steve,

Firstly, here are some fixes to DIO read handling and the retrying of
reads, particularly in relation to cifs:

 (1) Fix the missing credit renegotiation in cifs on the retrying of reads.
     The credits we had ended with the original read (or the last retry)
     and to perform a new read we need more credits otherwise the server
     can reject our read with EINVAL.

 (2) Fix the handling of short DIO reads to avoid ENODATA when the read
     retry tries to access a portion of the file after the EOF.

Secondly, some patches fixing cifs copy and zero offload:

 (3) Fix cifs_file_copychunk_range() to not try to partially invalidate
     folios that are only partly covered by the range, but rather flush
     them back and invalidate them.

 (4) Fix filemap_invalidate_inode() to use the correct invalidation
     function so that it doesn't leave partially invalidated folios hanging
     around (which may hide part of the result of an offloaded copy).

 (5) Fix smb3_zero_data() to correctly handle zeroing of data that's
     buffered locally but not yet written back and with the EOF position on
     the server short of the local EOF position.

     Note that this will also affect afs and 9p, particularly with regard
     to direct I/O writes.

And finally, here's an adjustment to debugging statements:

 (6) Adjust three debugging output statements.  Not strictly a fix, so
     could be dropped.  Including the subreq ID in some extra debug lines
     helps a bit, though.

The patches can also be found here:

	https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=netfs-fixes

Thanks,
David

David Howells (6):
  cifs: Fix lack of credit renegotiation on read retry
  netfs, cifs: Fix handling of short DIO read
  cifs: Fix copy offload to flush destination region
  mm: Fix filemap_invalidate_inode() to use
    invalidate_inode_pages2_range()
  cifs: Fix FALLOC_FL_ZERO_RANGE to preflush buffered part of target
    region
  netfs, cifs: Improve some debugging bits

 fs/netfs/io.c            | 21 +++++++++++++-------
 fs/smb/client/cifsfs.c   | 21 ++++----------------
 fs/smb/client/cifsglob.h |  1 +
 fs/smb/client/file.c     | 37 ++++++++++++++++++++++++++++++++----
 fs/smb/client/smb2ops.c  | 26 +++++++++++++++++++------
 fs/smb/client/smb2pdu.c  | 41 +++++++++++++++++++++++++---------------
 fs/smb/client/trace.h    |  1 +
 include/linux/netfs.h    |  1 +
 mm/filemap.c             |  2 +-
 9 files changed, 101 insertions(+), 50 deletions(-)

Comments

Steve French Aug. 29, 2024, 2:47 a.m. UTC | #1
testing is going fine so far with David's series ontop of current mainline

(I see one possible intermittent server bug failure - on test
generic/728 - but no red flags testing so far)

http://smb311-linux-testing.southcentralus.cloudapp.azure.com/#/builders/3/builds/207

On Wed, Aug 28, 2024 at 4:03 PM David Howells <dhowells@redhat.com> wrote:
>
> Hi Christian, Steve,
>
> Firstly, here are some fixes to DIO read handling and the retrying of
> reads, particularly in relation to cifs:
>
>  (1) Fix the missing credit renegotiation in cifs on the retrying of reads.
>      The credits we had ended with the original read (or the last retry)
>      and to perform a new read we need more credits otherwise the server
>      can reject our read with EINVAL.
>
>  (2) Fix the handling of short DIO reads to avoid ENODATA when the read
>      retry tries to access a portion of the file after the EOF.
>
> Secondly, some patches fixing cifs copy and zero offload:
>
>  (3) Fix cifs_file_copychunk_range() to not try to partially invalidate
>      folios that are only partly covered by the range, but rather flush
>      them back and invalidate them.
>
>  (4) Fix filemap_invalidate_inode() to use the correct invalidation
>      function so that it doesn't leave partially invalidated folios hanging
>      around (which may hide part of the result of an offloaded copy).
>
>  (5) Fix smb3_zero_data() to correctly handle zeroing of data that's
>      buffered locally but not yet written back and with the EOF position on
>      the server short of the local EOF position.
>
>      Note that this will also affect afs and 9p, particularly with regard
>      to direct I/O writes.
>
> And finally, here's an adjustment to debugging statements:
>
>  (6) Adjust three debugging output statements.  Not strictly a fix, so
>      could be dropped.  Including the subreq ID in some extra debug lines
>      helps a bit, though.
>
> The patches can also be found here:
>
>         https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=netfs-fixes
>
> Thanks,
> David
>
> David Howells (6):
>   cifs: Fix lack of credit renegotiation on read retry
>   netfs, cifs: Fix handling of short DIO read
>   cifs: Fix copy offload to flush destination region
>   mm: Fix filemap_invalidate_inode() to use
>     invalidate_inode_pages2_range()
>   cifs: Fix FALLOC_FL_ZERO_RANGE to preflush buffered part of target
>     region
>   netfs, cifs: Improve some debugging bits
>
>  fs/netfs/io.c            | 21 +++++++++++++-------
>  fs/smb/client/cifsfs.c   | 21 ++++----------------
>  fs/smb/client/cifsglob.h |  1 +
>  fs/smb/client/file.c     | 37 ++++++++++++++++++++++++++++++++----
>  fs/smb/client/smb2ops.c  | 26 +++++++++++++++++++------
>  fs/smb/client/smb2pdu.c  | 41 +++++++++++++++++++++++++---------------
>  fs/smb/client/trace.h    |  1 +
>  include/linux/netfs.h    |  1 +
>  mm/filemap.c             |  2 +-
>  9 files changed, 101 insertions(+), 50 deletions(-)
>
>