cdev_by_name() returns a cdev without increasing its reference count. In order to maintain a proper reference counting use cdev_open_by_name() instead and make sure it's closed afterwards when no longer needed. Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> --- arch/arm/mach-rockchip/bbu.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/arm/mach-rockchip/bbu.c b/arch/arm/mach-rockchip/bbu.c index f15b32937c..7715540863 100644 --- a/arch/arm/mach-rockchip/bbu.c +++ b/arch/arm/mach-rockchip/bbu.c @@ -43,6 +43,7 @@ static int rockchip_bbu_mmc_handler(struct bbu_handler *handler, int ret, fd, wr0, wr1; loff_t space; const char *cdevname; + struct cdev *cdev; filetype = file_detect_type(data->image, data->len); if (filetype != filetype_rockchip_rkns_image) { @@ -60,7 +61,12 @@ static int rockchip_bbu_mmc_handler(struct bbu_handler *handler, if (ret) return ret; - space = cdev_unallocated_space(cdev_by_name(cdevname)); + cdev = cdev_open_by_name(cdevname, O_RDONLY); + if (!cdev) + return -ENOENT; + + space = cdev_unallocated_space(cdev); + cdev_close(cdev); if (space < IMG_OFFSET_0 + data->len) { if (!bbu_force(data, "Unallocated space on %s (%lld) is too small for one image\n", -- 2.39.2