From: Shaun Tancheff Date: Tue, 22 Mar 2022 13:08:35 +0000 (-0500) Subject: LU-15670 clio: Disable lockless for DIO with O_APPEND X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=21cb22862eb11e248dff3a2d3c2dfea4091a95d9;p=fs%2Flustre-release.git LU-15670 clio: Disable lockless for DIO with O_APPEND Lockless O_DIRECT with O_APPEND can allow interleaved / racy appends from concurrent I/O. Disable lockless I/O when O_APPEND is set Lustre-change: https://review.whamcloud.com/46890 Lustre-commit: 649d638467c0375797cd59ab7c9ac4113e6c682e HPE-bug-id: LUS-9776 Signed-off-by: Shaun Tancheff Change-Id: I5c56f92c90e631c295f56e5958985f516e1990f8 Reviewed-by: Patrick Farrell Reviewed-by: Andreas Dilger Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/49666 Tested-by: jenkins Tested-by: Maloo --- diff --git a/lustre/llite/file.c b/lustre/llite/file.c index 2e57eea..ab61444 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -1707,6 +1707,8 @@ ll_file_io_generic(const struct lu_env *env, struct vvp_io_args *args, io = vvp_env_thread_io(env); if (file->f_flags & O_DIRECT) { + if (file->f_flags & O_APPEND) + dio_lock = 1; if (!is_sync_kiocb(args->u.normal.via_iocb)) is_aio = true; diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 5bb3691..d70d0a3 100755 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -24546,11 +24546,20 @@ test_398a() { # LU-4198 $LCTL set_param ldlm.namespaces.*-OST0000-osc-ffff*.lru_size=clear - # no lock cached, should use lockless IO and not enqueue new lock + # no lock cached, should use lockless DIO and not enqueue new lock dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 oflag=direct conv=notrunc lock_count=$($LCTL get_param -n \ ldlm.namespaces.$imp_name.lru_size) [[ $lock_count -eq 0 ]] || error "no lock should be held by direct IO" + + $LCTL set_param ldlm.namespaces.*-OST0000-osc-ffff*.lru_size=clear + + # no lock cached, should use locked DIO append + dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 oflag=direct oflag=append \ + conv=notrunc || error "DIO append failed" + lock_count=$($LCTL get_param -n \ + ldlm.namespaces.*-OST0000-osc-ffff*.lru_size) + [[ $lock_count -ne 0 ]] || error "lock still must be held by DIO append" } run_test 398a "direct IO should cancel lock otherwise lockless"