diff options
author | Frank Li <Frank.Li@freescale.com> | 2010-10-25 10:59:55 +0800 |
---|---|---|
committer | Scott Sweeny <scott.sweeny@timesys.com> | 2011-01-19 11:50:16 -0500 |
commit | 6bbbb9f8a59f7b9d917a4cf0d55fa0ba93df17eb (patch) | |
tree | 74e3d62651edfabb7c576ea80b75c185e46709ba | |
parent | d229fbc6b7e30c6f831d4971afd689675f740172 (diff) |
ENGR00131983-2 UBIBLOCK: Fix crash when run ubiattach
Some variable change at 2.6.35. So ubiblock need update to use
new member variable.
Signed-off-by: Frank Li <Frank.Li@freescale.com>
-rw-r--r-- | drivers/mtd/ubiblock.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/mtd/ubiblock.c b/drivers/mtd/ubiblock.c index 6c75d98daca7..aee5a73b805e 100644 --- a/drivers/mtd/ubiblock.c +++ b/drivers/mtd/ubiblock.c @@ -31,7 +31,7 @@ #include <linux/mtd/ubi.h> #include <linux/mutex.h> #include <linux/workqueue.h> - +#include "ubi/ubi.h" #include "mtdcore.h" static LIST_HEAD(ubiblk_devices); @@ -467,23 +467,24 @@ static void *ubiblk_add_locked(int ubi_num, int ubi_vol_id) } ubi = ubi_open_volume(ubi_num, ubi_vol_id, UBI_READONLY); - if (IS_ERR(u->ubi)) { + if (IS_ERR(ubi)) { pr_err("cannot open the volume\n"); - u = (void *)u->ubi; + u = (void *)ubi; goto out; } ubi_get_volume_info(ubi, &uvi); - ubi_close_volume(ubi); pr_debug("adding volume of size %d (used_size %lld), LEB size %d\n", uvi.size, uvi.used_bytes, uvi.usable_leb_size); - u->m.mtd = NULL; + u->m.mtd = ubi->vol->ubi->mtd; u->m.devnum = -1; u->m.size = uvi.used_bytes >> 9; u->m.tr = &ubiblock_tr; + ubi_close_volume(ubi); + u->ubi_num = ubi_num; u->ubi_vol = ubi_vol_id; @@ -496,7 +497,7 @@ static void *ubiblk_add_locked(int ubi_num, int ubi_vol_id) list_add_tail(&u->list, &ubiblk_devices); add_mtd_blktrans_dev(&u->m); - ubiblk_sysfs(u->m.priv, true); + ubiblk_sysfs(u->m.disk, true); out: return u; } @@ -514,7 +515,7 @@ static int ubiblk_del_locked(struct ubiblk_dev *u) { if (u->usecount != 0) return -EBUSY; - ubiblk_sysfs(u->m.priv, false); + ubiblk_sysfs(u->m.disk, false); del_mtd_blktrans_dev(&u->m); list_del(&u->list); BUG_ON(u->cache_data != NULL); /* who did not free the cache ?! */ |