[PATCH v2 7/8] ubi: Let ubidetach umount all filesystems before detaching
Sascha Hauer
s.hauer at pengutronix.de
Mon Mar 14 00:32:21 PDT 2016
On Thu, Mar 10, 2016 at 09:29:59AM +0100, Markus Pargmann wrote:
> This patch iterates through all ubi volumes and umounts all filesystems
> that are mounted.
>
> Signed-off-by: Markus Pargmann <mpa at pengutronix.de>
> ---
> drivers/mtd/ubi/build.c | 29 +++++++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
> index 7ee34bc62f30..edaa98b0973c 100644
> --- a/drivers/mtd/ubi/build.c
> +++ b/drivers/mtd/ubi/build.c
> @@ -25,6 +25,7 @@
> * later using the "UBI control device".
> */
>
> +#include <fs.h>
> #include <linux/err.h>
> #include <linux/stringify.h>
> #include <linux/stat.h>
> @@ -713,6 +714,8 @@ out_free:
> int ubi_detach_mtd_dev(int ubi_num, int anyway)
> {
> struct ubi_device *ubi;
> + int vol_id;
> + int ret;
>
> if (ubi_num < 0 || ubi_num >= UBI_MAX_DEVICES)
> return -EINVAL;
> @@ -723,6 +726,32 @@ int ubi_detach_mtd_dev(int ubi_num, int anyway)
>
> ubi->ref_count--;
>
> + ubi_volume_for_each(ubi_num, ubi, vol_id, ret) {
> + struct ubi_volume_desc *vol;
> +
> + vol = ubi_open_volume(ubi_num, vol_id, UBI_READONLY);
> + if (IS_ERR(vol)) {
> + pr_err("Failed to open ubi volume %d %d, %ld\n",
> + ubi_num, vol_id, PTR_ERR(vol));
> + if (anyway)
> + continue;
> +
> + ubi_volume_abort(ubi);
> + return PTR_ERR(vol);
> + }
> +
> + ret = umount_by_cdev(ubi_volume_get_cdev(vol));
> + ubi_close_volume(vol);
> + if (ret) {
> + pr_err("Failed umounting ubi volume %d %d, %d\n",
> + ubi_num, vol_id, ret);
> + if (anyway)
> + continue;
> + ubi_volume_abort(ubi);
> + return ret;
> + }
> + }
Wouldn't the following do it?
void ubi_umount_volumes(struct ubi_device *ubi)
{
int i;
for (i = 0; i < ubi->vtbl_slots; i++) {
struct ubi_volume *vol = ubi->volumes[i];
if (!vol)
continue;
umount_by_cdev(vol->cdev);
}
}
We shouldn't change the UBI code too much as it makes updates harder. If
possible, please move the code to cdev.c which is completely barebox
specific (if needed, we may rename cdev.c to barebox.c)
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the barebox
mailing list