We may don't know which UBI is attached on a given MTD device. This adds a function to detach a UBI given a MTD device. Signed-off-by: Markus Pargmann <mpa@xxxxxxxxxxxxxx> --- drivers/mtd/ubi/build.c | 21 +++++++++++++++++++++ include/mtd/ubi-user.h | 1 + 2 files changed, 22 insertions(+) diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c index f51d10cf0d21..7ee34bc62f30 100644 --- a/drivers/mtd/ubi/build.c +++ b/drivers/mtd/ubi/build.c @@ -750,3 +750,24 @@ int ubi_detach_mtd_dev(int ubi_num, int anyway) return 0; } + +/** + * ubi_detach_by_mtd detaches any ubi that of the given MTD + * @param mtd MTD used + * @param anyway detach MTD even if device reference count is not zero + * @return 0 on success, negative errno otherwise + * + * This function returns -EINVAL if the device is not attached + */ +int ubi_detach_by_mtd(struct mtd_info *mtd, bool anyway) +{ + int ubi_num = ubi_num_get_by_mtd(mtd); + + if (ubi_num < 0) { + if (ubi_num == -ENOENT) + return -EINVAL; + return ubi_num; + } + + return ubi_detach_mtd_dev(ubi_num, anyway); +} diff --git a/include/mtd/ubi-user.h b/include/mtd/ubi-user.h index ab1a6630f5ee..90982743cb58 100644 --- a/include/mtd/ubi-user.h +++ b/include/mtd/ubi-user.h @@ -407,6 +407,7 @@ struct ubi_set_vol_prop_req { int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num, int vid_hdr_offset, int max_beb_per1024); int ubi_detach_mtd_dev(int ubi_num, int anyway); +int ubi_detach_by_mtd(struct mtd_info *mtd, bool anyway); int ubi_num_get_by_mtd(struct mtd_info *mtd); #endif /* __UBI_USER_H__ */ -- 2.7.0 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox