Hi Bruno, Hi Steve, On Tue, Jan 21, 2020 at 11:24:28AM +0100, Bruno Pena wrote: > Please also include the contents of "dmesg" and of the files > "/proc/cmdline" and "/proc/mtd". > > Best regards, > Bruno Pena > > On Tue, Jan 21, 2020, 11:01 Bruno Pena <[email protected]> wrote: > > > Hi Steve, > > > > These patches should only impact partitions that are marked as read only. > > Can you please provide more details about your configuration? > > (architecture, device profile, mtd layout, the mtd partition generating the > > error)
I think this is because opening /dev/mtdX will fail as read-write but will succeed in read-only mode. Hence /dev/mtdblockX is not even considered which is a change from the previous behaviour. > > > > Best regards, > > Bruno Pena > > > > On Tue, Jan 21, 2020, 10:51 Steve Brown <[email protected]> wrote: > > > >> Hi Bruno, > >> > >> On Sat, 2020-01-04 at 12:52 +0100, Bruno Pena wrote: > >> > This patch enables fstools to open read-only MTD partitions, which in > >> > turn also enables OpenWrt to boot from read-only partitions. > >> > > >> > The use of read-only partitions is of special importance for WiFi- > >> > only > >> > devices, where a protected read-only recovery image can be used in > >> > case > >> > something goes wrong with the main firmware (eg. user gets locked out > >> > due to bad settings, flash of an unbootable dev firmware, etc). > >> > > >> > Signed-off-by: Bruno Pena <[email protected]> > >> > --- > >> > libfstools/mtd.c | 19 +++++++++++++++---- > >> > 1 file changed, 15 insertions(+), 4 deletions(-) > >> > > >> > diff --git a/libfstools/mtd.c b/libfstools/mtd.c > >> > index 77c71ee..aae633e 100644 > >> > --- a/libfstools/mtd.c > >> > +++ b/libfstools/mtd.c > >> > @@ -36,20 +36,31 @@ struct mtd_volume { > >> > > >> > static struct driver mtd_driver; > >> > > >> > +static int mtd_open_device(const char *dev) > >> > +{ > >> > + int ret; > >> > + > >> > + ret = open(dev, O_RDWR | O_SYNC); > >> > + if (ret < 0) > >> > + ret = open(dev, O_RDONLY); > >> > + > >> > + return ret; > >> > +} > >> > + > >> > static int mtd_open(const char *mtd, int block) > >> > { > >> > FILE *fp; > >> > char dev[PATH_MAX]; > >> > - int i, ret, flags = O_RDWR | O_SYNC; > >> > + int i, ret; > >> > > >> > if ((fp = fopen("/proc/mtd", "r"))) { > >> > while (fgets(dev, sizeof(dev), fp)) { > >> > if (sscanf(dev, "mtd%d:", &i) && strstr(dev, > >> > mtd)) { > >> > snprintf(dev, sizeof(dev), > >> > "/dev/mtd%s/%d", (block ? "block" : ""), i); > >> > - ret = open(dev, flags); > >> > + ret = mtd_open_device(dev); > >> > if (ret < 0) { > >> > snprintf(dev, sizeof(dev), > >> > "/dev/mtd%s%d", (block ? "block" : ""), i); > >> > - ret = open(dev, flags); > >> > + ret = mtd_open_device(dev); > >> > } > >> > fclose(fp); > >> > return ret; > >> > @@ -58,7 +69,7 @@ static int mtd_open(const char *mtd, int block) > >> > fclose(fp); > >> > } > >> > > >> > - return open(mtd, flags); > >> > + return mtd_open_device(mtd); > >> > } > >> > > >> > static void mtd_volume_close(struct mtd_volume *p) > >> > >> > >> This patch and related commit de80424f706682e8bba27c60bcd2a9c1b4a5e875 > >> break the jffs erase on my Archer a7 v5. > >> > >> [ 11.787856] jffs2_scan_eraseblock(): End of filesystem marker > >> found at 0x10000 > >> [ 11.795357] jffs2_build_filesystem(): unlocking the mtd device... > >> [ 11.795390] done. > >> [ 11.803771] jffs2_build_filesystem(): erasing all blocks after the > >> end marker... > >> [ 11.803781] jffs2: Erase at 0x009e0000 failed immediately: -EROFS. > >> Is the sector locked? > >> ------------- > >> [ 13.138841] jffs2: Erase at 0x00010000 failed immediately: -EROFS. > >> Is the sector locked? > >> [ 13.147188] done. > >> [ 13.149202] jffs2: notice: (487) jffs2_build_xattr_subsystem: > >> complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and > >> 0 of xref (0 . > >> [ 13.165896] mount_root: unable to set filesystem state > >> [ 13.171443] mount_root: switching to jffs2 overlay > >> [ 13.201867] overlayfs: failed to resolve '/overlay/upper': -2 > >> [ 13.223939] mount_root: mount failed: > >> lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work, options No such > >> device > >> [ 13.235145] mount_root: switching to jffs2 failed - fallback to > >> ramoverlay > >> > >> Verified by reverting de80424f7. > >> > >> Steve > >> > >> > >> > _______________________________________________ > openwrt-devel mailing list > [email protected] > https://lists.openwrt.org/mailman/listinfo/openwrt-devel _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
