|
@@ -648,6 +648,12 @@ int blk_trace_startstop(struct request_queue *q, int start)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(blk_trace_startstop);
|
|
|
|
|
|
+/*
|
|
|
+ * When reading or writing the blktrace sysfs files, the references to the
|
|
|
+ * opened sysfs or device files should prevent the underlying block device
|
|
|
+ * from being removed. So no further delete protection is really needed.
|
|
|
+ */
|
|
|
+
|
|
|
/**
|
|
|
* blk_trace_ioctl: - handle the ioctls associated with tracing
|
|
|
* @bdev: the block device
|
|
@@ -665,7 +671,7 @@ int blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg)
|
|
|
if (!q)
|
|
|
return -ENXIO;
|
|
|
|
|
|
- mutex_lock(&bdev->bd_mutex);
|
|
|
+ mutex_lock(&q->blk_trace_mutex);
|
|
|
|
|
|
switch (cmd) {
|
|
|
case BLKTRACESETUP:
|
|
@@ -691,7 +697,7 @@ int blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- mutex_unlock(&bdev->bd_mutex);
|
|
|
+ mutex_unlock(&q->blk_trace_mutex);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -1727,7 +1733,7 @@ static ssize_t sysfs_blk_trace_attr_show(struct device *dev,
|
|
|
if (q == NULL)
|
|
|
goto out_bdput;
|
|
|
|
|
|
- mutex_lock(&bdev->bd_mutex);
|
|
|
+ mutex_lock(&q->blk_trace_mutex);
|
|
|
|
|
|
if (attr == &dev_attr_enable) {
|
|
|
ret = sprintf(buf, "%u\n", !!q->blk_trace);
|
|
@@ -1746,7 +1752,7 @@ static ssize_t sysfs_blk_trace_attr_show(struct device *dev,
|
|
|
ret = sprintf(buf, "%llu\n", q->blk_trace->end_lba);
|
|
|
|
|
|
out_unlock_bdev:
|
|
|
- mutex_unlock(&bdev->bd_mutex);
|
|
|
+ mutex_unlock(&q->blk_trace_mutex);
|
|
|
out_bdput:
|
|
|
bdput(bdev);
|
|
|
out:
|
|
@@ -1788,7 +1794,7 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev,
|
|
|
if (q == NULL)
|
|
|
goto out_bdput;
|
|
|
|
|
|
- mutex_lock(&bdev->bd_mutex);
|
|
|
+ mutex_lock(&q->blk_trace_mutex);
|
|
|
|
|
|
if (attr == &dev_attr_enable) {
|
|
|
if (value)
|
|
@@ -1814,7 +1820,7 @@ static ssize_t sysfs_blk_trace_attr_store(struct device *dev,
|
|
|
}
|
|
|
|
|
|
out_unlock_bdev:
|
|
|
- mutex_unlock(&bdev->bd_mutex);
|
|
|
+ mutex_unlock(&q->blk_trace_mutex);
|
|
|
out_bdput:
|
|
|
bdput(bdev);
|
|
|
out:
|