mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 10:01:39 -05:00
selftests: ublk: forbid multiple data copy modes
The kublk mock ublk server allows multiple data copy mode arguments to be passed on the command line (--zero_copy, --get_data, and --auto_zc). The ublk device will be created with all the requested feature flags, however kublk will only use one of the modes to interact with request data (arbitrarily preferring auto_zc over zero_copy over get_data). To clarify the intent of the test, don't allow multiple data copy modes to be specified. --zero_copy and --auto_zc are allowed together for --auto_zc_fallback, which uses both copy modes. Don't set UBLK_F_USER_COPY for zero_copy, as it's a separate feature. Fix the test cases in test_stress_05 passing --get_data along with --zero_copy or --auto_zc. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
committed by
Jens Axboe
parent
d8295408e0
commit
52bc483763
@@ -1613,7 +1613,7 @@ int main(int argc, char *argv[])
|
||||
ctx.queue_depth = strtol(optarg, NULL, 10);
|
||||
break;
|
||||
case 'z':
|
||||
ctx.flags |= UBLK_F_SUPPORT_ZERO_COPY | UBLK_F_USER_COPY;
|
||||
ctx.flags |= UBLK_F_SUPPORT_ZERO_COPY;
|
||||
break;
|
||||
case 'r':
|
||||
value = strtol(optarg, NULL, 10);
|
||||
@@ -1686,6 +1686,15 @@ int main(int argc, char *argv[])
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!!(ctx.flags & UBLK_F_NEED_GET_DATA) +
|
||||
!!(ctx.flags & UBLK_F_USER_COPY) +
|
||||
(ctx.flags & UBLK_F_SUPPORT_ZERO_COPY && !ctx.auto_zc_fallback) +
|
||||
(ctx.flags & UBLK_F_AUTO_BUF_REG && !ctx.auto_zc_fallback) +
|
||||
ctx.auto_zc_fallback > 1) {
|
||||
fprintf(stderr, "too many data copy modes specified\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
i = optind;
|
||||
while (i < argc && ctx.nr_files < MAX_BACK_FILES) {
|
||||
ctx.files[ctx.nr_files++] = argv[i++];
|
||||
|
||||
@@ -58,17 +58,17 @@ done
|
||||
|
||||
if _have_feature "ZERO_COPY"; then
|
||||
for reissue in $(seq 0 1); do
|
||||
ublk_io_and_remove 8G -t null -q 4 -g -z -r 1 -i "$reissue" &
|
||||
ublk_io_and_remove 256M -t loop -q 4 -g -z -r 1 -i "$reissue" "${UBLK_BACKFILES[1]}" &
|
||||
ublk_io_and_remove 8G -t null -q 4 -z -r 1 -i "$reissue" &
|
||||
ublk_io_and_remove 256M -t loop -q 4 -z -r 1 -i "$reissue" "${UBLK_BACKFILES[1]}" &
|
||||
wait
|
||||
done
|
||||
fi
|
||||
|
||||
if _have_feature "AUTO_BUF_REG"; then
|
||||
for reissue in $(seq 0 1); do
|
||||
ublk_io_and_remove 8G -t null -q 4 -g --auto_zc -r 1 -i "$reissue" &
|
||||
ublk_io_and_remove 256M -t loop -q 4 -g --auto_zc -r 1 -i "$reissue" "${UBLK_BACKFILES[1]}" &
|
||||
ublk_io_and_remove 8G -t null -q 4 -g -z --auto_zc --auto_zc_fallback -r 1 -i "$reissue" &
|
||||
ublk_io_and_remove 8G -t null -q 4 --auto_zc -r 1 -i "$reissue" &
|
||||
ublk_io_and_remove 256M -t loop -q 4 --auto_zc -r 1 -i "$reissue" "${UBLK_BACKFILES[1]}" &
|
||||
ublk_io_and_remove 8G -t null -q 4 -z --auto_zc --auto_zc_fallback -r 1 -i "$reissue" &
|
||||
wait
|
||||
done
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user