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 <shaun.tancheff@hpe.com>
Change-Id: I5c56f92c90e631c295f56e5958985f516e1990f8
Reviewed-on: https://review.whamcloud.com/46890
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
io = vvp_env_thread_io(env);
if (file->f_flags & O_DIRECT) {
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;
if (!is_sync_kiocb(args->u.normal.via_iocb))
is_aio = true;
$LCTL set_param ldlm.namespaces.*-OST0000-osc-ffff*.lru_size=clear
$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"
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"
}
run_test 398a "direct IO should cancel lock otherwise lockless"