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