|
@@ -652,21 +652,30 @@ static ssize_t reset_store(struct device *dev,
|
|
|
return -ENOMEM;
|
|
|
|
|
|
/* Do not reset an active device! */
|
|
|
- if (bdev->bd_holders)
|
|
|
- return -EBUSY;
|
|
|
+ if (bdev->bd_holders) {
|
|
|
+ ret = -EBUSY;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
|
|
|
ret = kstrtou16(buf, 10, &do_reset);
|
|
|
if (ret)
|
|
|
- return ret;
|
|
|
+ goto out;
|
|
|
|
|
|
- if (!do_reset)
|
|
|
- return -EINVAL;
|
|
|
+ if (!do_reset) {
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
|
|
|
/* Make sure all pending I/O is finished */
|
|
|
fsync_bdev(bdev);
|
|
|
+ bdput(bdev);
|
|
|
|
|
|
zram_reset_device(zram, true);
|
|
|
return len;
|
|
|
+
|
|
|
+out:
|
|
|
+ bdput(bdev);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static void __zram_make_request(struct zram *zram, struct bio *bio, int rw)
|