Whamcloud - gitweb
LU-16465 llite: fix LSOM blocks for ftruncate and close 75/49675/8
authorEtienne AUJAMES <etienne.aujames@cea.fr>
Wed, 18 Jan 2023 09:42:54 +0000 (10:42 +0100)
committerOleg Drokin <green@whamcloud.com>
Tue, 11 Apr 2023 20:08:27 +0000 (20:08 +0000)
commitdfb08bbf77a1362f79c3738cc3952f8db2e46511
tree0136f6a4a97aa678ff6dc5e830d6d5dfcaf770a6
parent483e31e1cc8f234baac77c1a0ac83afdef953074
LU-16465 llite: fix LSOM blocks for ftruncate and close

LSOM is updated on close and setattr request.
For the setattr, clients do not know the numbers blocks yet (OSTs
setattr requests have to finish). So the blocks number is set to 1 by
the server.

The close request send after a ftruncate() will wrongly update LSOM
back to its old blocks number. This is because clients do not update
the inode.i_blocks after an OST setattr.

Then the MDS will denied a client close request to update LSOM to its
correct blocks number. Only truncates are allowed to decrease the
blocks number (server side).

This patch force the client inode update at the end of an OST setattr.
And it tries (if no contention on the inode_size) to update the inode
at the end of an OST fsync or a sync IO.

Update sanity test 806/807 for this use case.

Test-Parameters: testlist=sanity env=ONLY=806,807,ONLY_REPEAT=20
Test-Parameters: fstype=zfs testlist=sanity-flr env=ONLY=70,ONLY_REPEAT=10
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
Change-Id: Ib1afde97071ebae56f0b413ec444403c3cdebd02
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/49675
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Qian Yingjin <qian@ddn.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/llite/file.c
lustre/llite/llite_internal.h
lustre/llite/llite_lib.c
lustre/llite/vvp_io.c
lustre/tests/sanity.sh