summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Li <Frank.Li@freescale.com>2010-10-25 10:59:55 +0800
committerScott Sweeny <scott.sweeny@timesys.com>2011-01-19 11:50:16 -0500
commit6bbbb9f8a59f7b9d917a4cf0d55fa0ba93df17eb (patch)
tree74e3d62651edfabb7c576ea80b75c185e46709ba
parentd229fbc6b7e30c6f831d4971afd689675f740172 (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.c15
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 ?! */