FAT: Fix error path
- forward the return value of chk_mounted to detect whether mount succeeded - free resources on mount failure Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
d94579abaf
commit
38a1971e5b
18
fs/fat/fat.c
18
fs/fat/fat.c
|
@ -376,6 +376,7 @@ static int fat_probe(struct device_d *dev)
|
||||||
struct fs_device_d *fsdev = dev_to_fs_device(dev);
|
struct fs_device_d *fsdev = dev_to_fs_device(dev);
|
||||||
struct fat_priv *priv = xzalloc(sizeof(struct fat_priv));
|
struct fat_priv *priv = xzalloc(sizeof(struct fat_priv));
|
||||||
char *backingstore = fsdev->backingstore;
|
char *backingstore = fsdev->backingstore;
|
||||||
|
int ret;
|
||||||
|
|
||||||
dev->priv = priv;
|
dev->priv = priv;
|
||||||
|
|
||||||
|
@ -383,13 +384,24 @@ static int fat_probe(struct device_d *dev)
|
||||||
backingstore += 5;
|
backingstore += 5;
|
||||||
|
|
||||||
priv->cdev = cdev_open(backingstore, O_RDWR);
|
priv->cdev = cdev_open(backingstore, O_RDWR);
|
||||||
if (!priv->cdev)
|
if (!priv->cdev) {
|
||||||
return -EINVAL;
|
ret = -ENOENT;
|
||||||
|
goto err_open;
|
||||||
|
}
|
||||||
|
|
||||||
priv->fat.userdata = priv;
|
priv->fat.userdata = priv;
|
||||||
f_mount(&priv->fat);
|
ret = f_mount(&priv->fat);
|
||||||
|
if (ret)
|
||||||
|
goto err_mount;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
err_mount:
|
||||||
|
cdev_close(priv->cdev);
|
||||||
|
err_open:
|
||||||
|
free(priv);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fat_remove(struct device_d *dev)
|
static void fat_remove(struct device_d *dev)
|
||||||
|
|
|
@ -1699,9 +1699,7 @@ int f_mount (
|
||||||
{
|
{
|
||||||
fs->fs_type = 0; /* Clear new fs object */
|
fs->fs_type = 0; /* Clear new fs object */
|
||||||
|
|
||||||
chk_mounted(fs, 0);
|
return chk_mounted(fs, 0);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue