]> www.infradead.org Git - users/hch/misc.git/commitdiff
blktrace: don't centralize grabbing q->debugfs_mutex in blk_trace_ioctl
authorMing Lei <ming.lei@redhat.com>
Thu, 28 Nov 2024 12:50:26 +0000 (20:50 +0800)
committerJens Axboe <axboe@kernel.dk>
Mon, 16 Dec 2024 13:58:30 +0000 (06:58 -0700)
Call each handler directly and the handler do grab q->debugfs_mutex,
prepare for killing dependency between ->debug_mutex and ->mmap_lock.

Signed-off-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20241128125029.4152292-2-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
kernel/trace/blktrace.c

index 8fd292d34d8984c3cbea54a3297bd2280c603957..f01aae3a2f7bfe8dcdc486611a8a94e37405c83f 100644 (file)
@@ -732,34 +732,32 @@ int blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg)
        int ret, start = 0;
        char b[BDEVNAME_SIZE];
 
-       mutex_lock(&q->debugfs_mutex);
-
        switch (cmd) {
        case BLKTRACESETUP:
                snprintf(b, sizeof(b), "%pg", bdev);
-               ret = __blk_trace_setup(q, b, bdev->bd_dev, bdev, arg);
+               ret = blk_trace_setup(q, b, bdev->bd_dev, bdev, arg);
                break;
 #if defined(CONFIG_COMPAT) && defined(CONFIG_X86_64)
        case BLKTRACESETUP32:
                snprintf(b, sizeof(b), "%pg", bdev);
+               mutex_lock(&q->debugfs_mutex);
                ret = compat_blk_trace_setup(q, b, bdev->bd_dev, bdev, arg);
+               mutex_unlock(&q->debugfs_mutex);
                break;
 #endif
        case BLKTRACESTART:
                start = 1;
                fallthrough;
        case BLKTRACESTOP:
-               ret = __blk_trace_startstop(q, start);
+               ret = blk_trace_startstop(q, start);
                break;
        case BLKTRACETEARDOWN:
-               ret = __blk_trace_remove(q);
+               ret = blk_trace_remove(q);
                break;
        default:
                ret = -ENOTTY;
                break;
        }
-
-       mutex_unlock(&q->debugfs_mutex);
        return ret;
 }