Commit 9722324e authored by Corentin Chary's avatar Corentin Chary Committed by Artem Bityutskiy

UBIFS: support mounting of UBI volume character devices

This patch makes it possible to mount UBI character device
nodes, and use something like:

$ mount -t ubifs /dev/ubi_volume_name /mnt/ubifs

instead of the old restrictive 'nodev' semantics:

$ mount -t ubifs ubi0_0 /mnt/ubifs

[Comments and the patch were amended a bit by Artem]
Signed-off-by: default avatarCorentin Chary <corentincj@iksaif.net>
Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
parent b5710284
...@@ -1842,22 +1842,32 @@ const struct super_operations ubifs_super_operations = { ...@@ -1842,22 +1842,32 @@ const struct super_operations ubifs_super_operations = {
* @name: UBI volume name * @name: UBI volume name
* @mode: UBI volume open mode * @mode: UBI volume open mode
* *
* There are several ways to specify UBI volumes when mounting UBIFS: * The primary method of mounting UBIFS is by specifying the UBI volume
* o ubiX_Y - UBI device number X, volume Y; * character device node path. However, UBIFS may also be mounted withoug any
* o ubiY - UBI device number 0, volume Y; * character device node using one of the following methods:
*
* o ubiX_Y - mount UBI device number X, volume Y;
* o ubiY - mount UBI device number 0, volume Y;
* o ubiX:NAME - mount UBI device X, volume with name NAME; * o ubiX:NAME - mount UBI device X, volume with name NAME;
* o ubi:NAME - mount UBI device 0, volume with name NAME. * o ubi:NAME - mount UBI device 0, volume with name NAME.
* *
* Alternative '!' separator may be used instead of ':' (because some shells * Alternative '!' separator may be used instead of ':' (because some shells
* like busybox may interpret ':' as an NFS host name separator). This function * like busybox may interpret ':' as an NFS host name separator). This function
* returns ubi volume object in case of success and a negative error code in * returns UBI volume description object in case of success and a negative
* case of failure. * error code in case of failure.
*/ */
static struct ubi_volume_desc *open_ubi(const char *name, int mode) static struct ubi_volume_desc *open_ubi(const char *name, int mode)
{ {
struct ubi_volume_desc *ubi;
int dev, vol; int dev, vol;
char *endptr; char *endptr;
/* First, try to open using the device node path method */
ubi = ubi_open_volume_path(name, mode);
if (!IS_ERR(ubi))
return ubi;
/* Try the "nodev" method */
if (name[0] != 'u' || name[1] != 'b' || name[2] != 'i') if (name[0] != 'u' || name[1] != 'b' || name[2] != 'i')
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment