diff --git a/fs/io-wq.c b/fs/io-wq.c
index 2dd43bdb9c7b6d96d9cceb031409fc85992e17d7..b7c1fa932cb36a95f9580c5ca180472c661df334 100644
--- a/fs/io-wq.c
+++ b/fs/io-wq.c
@@ -1063,7 +1063,11 @@ static void io_wq_destroy(struct io_wq *wq)
 
 	for_each_node(node) {
 		struct io_wqe *wqe = wq->wqes[node];
-		WARN_ON_ONCE(!wq_list_empty(&wqe->work_list));
+		struct io_cb_cancel_data match = {
+			.fn		= io_wq_work_match_all,
+			.cancel_all	= true,
+		};
+		io_wqe_cancel_pending_work(wqe, &match);
 		kfree(wqe);
 	}
 	io_wq_put_hash(wq->hash);