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-Tag: 2.15.0-RC3~1 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=649d638467c0375797cd59ab7c9ac4113e6c682e;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 HPE-bug-id: LUS-9776 Signed-off-by: Shaun Tancheff Change-Id: I5c56f92c90e631c295f56e5958985f516e1990f8 Reviewed-on: https://review.whamcloud.com/46890 Reviewed-by: Patrick Farrell Tested-by: jenkins Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Oleg Drokin --- diff --git a/lustre/llite/file.c b/lustre/llite/file.c index 1912240..15ffe4e 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -1664,6 +1664,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 632faa9..30ac527 100755 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -24294,11 +24294,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"