NFSD: Fix last write offset handling in layoutcommit
The data type of loca_last_write_offset is newoffset4 and is switched on a boolean value, no_newoffset, that indicates if a previous write occurred or not. If no_newoffset is FALSE, an offset is not given. This means that client does not try to update the file size. Thus, server should not try to calculate new file size and check if it fits into the segment range. See RFC 8881, section 12.5.4.2. Sometimes the current incorrect logic may cause clients to hang when trying to sync an inode. If layoutcommit fails, the client marks the inode as dirty again. Fixes: 9cf514cc ("nfsd: implement pNFS operations") Cc: stable@vger.kernel.org Co-developed-by:Konstantin Evtushenko <koevtushenko@yandex.com> Signed-off-by:
Konstantin Evtushenko <koevtushenko@yandex.com> Signed-off-by:
Sergey Bashirov <sergeybashirov@gmail.com> Reviewed-by:
Christoph Hellwig <hch@lst.de> Reviewed-by:
Jeff Layton <jlayton@kernel.org> Signed-off-by:
Chuck Lever <chuck.lever@oracle.com>
Loading
-
mentioned in commit 61e8a8c4
-
mentioned in commit 702d8d6e
-
mentioned in commit daa0ff17
-
mentioned in commit c8966188
-
mentioned in commit 4138321e
-
mentioned in commit e518a9d2
-
mentioned in commit 7ee0a7b9
-
mentioned in commit a82a50e9
-
mentioned in commit 8e69c8f3
-
mentioned in commit 68d615f4
-
mentioned in commit 0570c78e
-
mentioned in commit a17a423c
-
mentioned in commit ece8e2bf
-
mentioned in commit 2a052e2a
Please sign in to comment