Commit f77569d2 authored by Jens Axboe's avatar Jens Axboe
Browse files

io_uring/cancel: wire up IORING_ASYNC_CANCEL_OP for sync cancel



Allow usage of IORING_ASYNC_CANCEL_OP through the sync cancelation
API as well.

Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent d7b8b079
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -701,7 +701,9 @@ struct io_uring_sync_cancel_reg {
	__s32				fd;
	__u32				flags;
	struct __kernel_timespec	timeout;
	__u64				pad[4];
	__u8				opcode;
	__u8				pad[7];
	__u64				pad2[3];
};

/*
+8 −3
Original line number Diff line number Diff line
@@ -265,17 +265,22 @@ int io_sync_cancel(struct io_ring_ctx *ctx, void __user *arg)
	struct io_uring_sync_cancel_reg sc;
	struct fd f = { };
	DEFINE_WAIT(wait);
	int ret;
	int ret, i;

	if (copy_from_user(&sc, arg, sizeof(sc)))
		return -EFAULT;
	if (sc.flags & ~CANCEL_FLAGS)
		return -EINVAL;
	if (sc.pad[0] || sc.pad[1] || sc.pad[2] || sc.pad[3])
	for (i = 0; i < ARRAY_SIZE(sc.pad); i++)
		if (sc.pad[i])
			return -EINVAL;
	for (i = 0; i < ARRAY_SIZE(sc.pad2); i++)
		if (sc.pad2[i])
			return -EINVAL;

	cd.data = sc.addr;
	cd.flags = sc.flags;
	cd.opcode = sc.opcode;

	/* we can grab a normal file descriptor upfront */
	if ((cd.flags & IORING_ASYNC_CANCEL_FD) &&