diff options
-rw-r--r-- | drivers/staging/zram/zram_sysfs.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/staging/zram/zram_sysfs.c b/drivers/staging/zram/zram_sysfs.c index 01f9a79aad4..aafcf033001 100644 --- a/drivers/staging/zram/zram_sysfs.c +++ b/drivers/staging/zram/zram_sysfs.c @@ -99,18 +99,23 @@ 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); down_write(&zram->init_lock); if (zram->init_done) @@ -118,6 +123,10 @@ static ssize_t reset_store(struct device *dev, up_write(&zram->init_lock); return len; + +out: + bdput(bdev); + return ret; } static ssize_t num_reads_show(struct device *dev, |