Merge tag 'iomap-6.6-merge-3' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
[platform/kernel/linux-rpi.git] / io_uring / rw.c
index e2166a9..b343503 100644 (file)
@@ -221,17 +221,12 @@ static bool io_rw_should_reissue(struct io_kiocb *req)
 }
 #endif
 
-static void kiocb_end_write(struct io_kiocb *req)
+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 super_block *sb = file_inode(req->file)->i_sb;
+               struct io_rw *rw = io_kiocb_to_cmd(req, struct io_rw);
 
-               __sb_writers_acquired(sb, SB_FREEZE_WRITE);
-               sb_end_write(sb);
+               kiocb_end_write(&rw->kiocb);
        }
 }
 
@@ -244,7 +239,7 @@ static void io_req_io_end(struct io_kiocb *req)
        struct io_rw *rw = io_kiocb_to_cmd(req, struct io_rw);
 
        if (rw->kiocb.ki_flags & IOCB_WRITE) {
-               kiocb_end_write(req);
+               io_req_end_write(req);
                fsnotify_modify(req->file);
        } else {
                fsnotify_access(req->file);
@@ -325,7 +320,7 @@ static void io_complete_rw_iopoll(struct kiocb *kiocb, long res)
        struct io_kiocb *req = cmd_to_io_kiocb(rw);
 
        if (kiocb->ki_flags & IOCB_WRITE)
-               kiocb_end_write(req);
+               io_req_end_write(req);
        if (unlikely(res != req->cqe.res)) {
                if (res == -EAGAIN && io_rw_should_reissue(req)) {
                        req->flags |= REQ_F_REISSUE | REQ_F_PARTIAL_IO;
@@ -914,18 +909,8 @@ int io_write(struct io_kiocb *req, unsigned int issue_flags)
                return ret;
        }
 
-       /*
-        * 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);
-       }
+       if (req->flags & REQ_F_ISREG)
+               kiocb_start_write(kiocb);
        kiocb->ki_flags |= IOCB_WRITE;
 
        /*
@@ -982,7 +967,7 @@ int io_write(struct io_kiocb *req, unsigned int issue_flags)
                                io->bytes_done += ret2;
 
                        if (kiocb->ki_flags & IOCB_WRITE)
-                               kiocb_end_write(req);
+                               io_req_end_write(req);
                        return ret ? ret : -EAGAIN;
                }
 done:
@@ -993,7 +978,7 @@ copy_iov:
                ret = io_setup_async_rw(req, iovec, s, false);
                if (!ret) {
                        if (kiocb->ki_flags & IOCB_WRITE)
-                               kiocb_end_write(req);
+                               io_req_end_write(req);
                        return -EAGAIN;
                }
                return ret;