From 8311a6fe363c26dea217d61a4f316f45ad0314bf Mon Sep 17 00:00:00 2001 From: Ksawlii Date: Fri, 13 Dec 2024 19:44:18 +0100 Subject: [PATCH] Revert "io_uring: use kiocb_{start,end}_write() helpers" This reverts commit da59b97e30d485e1acbb4396fc4deee8b79eac2d. --- io_uring/io_uring.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index 3b2c6b77b..f14e1f58d 100755 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -2688,10 +2688,15 @@ out: static void io_req_end_write(struct io_kiocb *req) { + /* + * Tell lockdep we inherited freeze protection from submission + * thread. + */ if (req->flags & REQ_F_ISREG) { - struct io_rw *rw = &req->rw; + struct super_block *sb = file_inode(req->file)->i_sb; - kiocb_end_write(&rw->kiocb); + __sb_writers_acquired(sb, SB_FREEZE_WRITE); + sb_end_write(sb); } } @@ -3784,8 +3789,18 @@ static int io_write(struct io_kiocb *req, unsigned int issue_flags) if (unlikely(ret)) goto out_free; - if (req->flags & REQ_F_ISREG) - kiocb_start_write(kiocb); + /* + * Open-code file_start_write here to grab freeze protection, + * which will be released by another thread in + * io_complete_rw(). Fool lockdep by telling it the lock got + * released so that it doesn't complain about the held lock when + * we return to userspace. + */ + if (req->flags & REQ_F_ISREG) { + sb_start_write(file_inode(req->file)->i_sb); + __sb_writers_release(file_inode(req->file)->i_sb, + SB_FREEZE_WRITE); + } kiocb->ki_flags |= IOCB_WRITE; if (req->file->f_op->write_iter)