Re: [PATCH v2 7/8] ubi: Let ubidetach umount all filesystems before detaching

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxx>
> ---
>  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 |

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux