summaryrefslogtreecommitdiffstats
path: root/fs/cramfs
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-09-27 22:47:10 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2013-09-29 12:11:14 +0200
commitecb3aaa23b09c41f2ac8364f5ca72779467762e3 (patch)
treeab76b31d8736050aed1a150c5ec7525dd0836e2b /fs/cramfs
parentd4f5bb1e011ac653a167031554f0ac9e028e9e36 (diff)
downloadbarebox-ecb3aaa23b09c41f2ac8364f5ca72779467762e3.tar.gz
barebox-ecb3aaa23b09c41f2ac8364f5ca72779467762e3.tar.xz
fs: cleanup backingstore handling
All filesystem drivers which need a backingstore device do the same ignoring of '/dev/' in the backingstore followed by a cdev_open. Add a helper function for it and let the core handle the cdev. As a side effect this makes sure that fsdev->cdev is also set when a device is mounted without the leading '/dev/' which was previously ignored by the mount code. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'fs/cramfs')
-rw-r--r--fs/cramfs/cramfs.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/fs/cramfs/cramfs.c b/fs/cramfs/cramfs.c
index 99f6d49c2c..8218fcf2af 100644
--- a/fs/cramfs/cramfs.c
+++ b/fs/cramfs/cramfs.c
@@ -422,29 +422,33 @@ static int cramfs_probe(struct device_d *dev)
{
struct fs_device_d *fsdev;
struct cramfs_priv *priv;
+ int ret;
fsdev = dev_to_fs_device(dev);
priv = xmalloc(sizeof(struct cramfs_priv));
dev->priv = priv;
- if (strncmp(fsdev->backingstore, "/dev/", 5))
- return -ENODEV;
+ ret = fsdev_open_cdev(fsdev);
+ if (ret)
+ goto err_out;
- priv->cdev = cdev_by_name(fsdev->backingstore + 5);
- if (!priv->cdev)
- return -ENODEV;
+ priv->cdev = fsdev->cdev;
if (cramfs_read_super(priv)) {
dev_info(dev, "no valid cramfs found\n");
- free(priv);
- return -EINVAL;
+ ret = -EINVAL;
}
priv->curr_base = -1;
cramfs_uncompress_init ();
return 0;
+
+err_out:
+ free(priv);
+
+ return ret;
}
static void cramfs_remove(struct device_d *dev)