|
@@ -803,6 +803,20 @@ out_unlock:
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static bool vol_ignored(int vol_id)
|
|
|
|
+{
|
|
|
|
+ switch (vol_id) {
|
|
|
|
+ case UBI_LAYOUT_VOLUME_ID:
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#ifdef CONFIG_MTD_UBI_FASTMAP
|
|
|
|
+ return ubi_is_fm_vol(vol_id);
|
|
|
|
+#else
|
|
|
|
+ return false;
|
|
|
|
+#endif
|
|
|
|
+}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* scan_peb - scan and process UBI headers of a PEB.
|
|
* scan_peb - scan and process UBI headers of a PEB.
|
|
* @ubi: UBI device description object
|
|
* @ubi: UBI device description object
|
|
@@ -995,17 +1009,15 @@ static int scan_peb(struct ubi_device *ubi, struct ubi_attach_info *ai,
|
|
*vid = vol_id;
|
|
*vid = vol_id;
|
|
if (sqnum)
|
|
if (sqnum)
|
|
*sqnum = be64_to_cpu(vidh->sqnum);
|
|
*sqnum = be64_to_cpu(vidh->sqnum);
|
|
- if (vol_id > UBI_MAX_VOLUMES && vol_id != UBI_LAYOUT_VOLUME_ID) {
|
|
|
|
|
|
+ if (vol_id > UBI_MAX_VOLUMES && !vol_ignored(vol_id)) {
|
|
int lnum = be32_to_cpu(vidh->lnum);
|
|
int lnum = be32_to_cpu(vidh->lnum);
|
|
|
|
|
|
/* Unsupported internal volume */
|
|
/* Unsupported internal volume */
|
|
switch (vidh->compat) {
|
|
switch (vidh->compat) {
|
|
case UBI_COMPAT_DELETE:
|
|
case UBI_COMPAT_DELETE:
|
|
- if (vol_id != UBI_FM_SB_VOLUME_ID
|
|
|
|
- && vol_id != UBI_FM_DATA_VOLUME_ID) {
|
|
|
|
- ubi_msg(ubi, "\"delete\" compatible internal volume %d:%d found, will remove it",
|
|
|
|
- vol_id, lnum);
|
|
|
|
- }
|
|
|
|
|
|
+ ubi_msg(ubi, "\"delete\" compatible internal volume %d:%d found, will remove it",
|
|
|
|
+ vol_id, lnum);
|
|
|
|
+
|
|
err = add_to_list(ai, pnum, vol_id, lnum,
|
|
err = add_to_list(ai, pnum, vol_id, lnum,
|
|
ec, 1, &ai->erase);
|
|
ec, 1, &ai->erase);
|
|
if (err)
|
|
if (err)
|