io_uring: clean up io_close
authorPavel Begunkov <asml.silence@gmail.com>
Mon, 2 Mar 2020 20:45:16 +0000 (23:45 +0300)
committerJens Axboe <axboe@kernel.dk>
Tue, 3 Mar 2020 04:26:56 +0000 (21:26 -0700)
Don't abuse labels for plain and straightworward code.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index e92b88455e5ecefc481b1e7c5c1e8da40cec3fe6..950b7b3396ad151300b94fef0f6d22b129792306 100644 (file)
@@ -3030,8 +3030,16 @@ static int io_close(struct io_kiocb *req, struct io_kiocb **nxt,
                return ret;
 
        /* if the file has a flush method, be safe and punt to async */
-       if (req->close.put_file->f_op->flush && !io_wq_current_is_worker())
-               goto eagain;
+       if (req->close.put_file->f_op->flush && force_nonblock) {
+               req->work.func = io_close_finish;
+               /*
+                * Do manual async queue here to avoid grabbing files - we don't
+                * need the files, and it'll cause io_close_finish() to close
+                * the file again and cause a double CQE entry for this request
+                */
+               io_queue_async_work(req);
+               return 0;
+       }
 
        /*
         * No ->flush(), safely close from here and just punt the
@@ -3039,15 +3047,6 @@ static int io_close(struct io_kiocb *req, struct io_kiocb **nxt,
         */
        __io_close_finish(req, nxt);
        return 0;
-eagain:
-       req->work.func = io_close_finish;
-       /*
-        * Do manual async queue here to avoid grabbing files - we don't
-        * need the files, and it'll cause io_close_finish() to close
-        * the file again and cause a double CQE entry for this request
-        */
-       io_queue_async_work(req);
-       return 0;
 }
 
 static int io_prep_sfr(struct io_kiocb *req, const struct io_uring_sqe *sqe)