I noticed this with a mvebu device but the bug may concern all kernel 4.9 users with ubifs, and possibly also jffs2 users, meaning practically all targets...

Router fails to rename files that are both in /rom and in /overlay, i.e. they were part of the original flash and have been modified later or were included in sysupgraded config files. ( I use /etc/dropbear/dropbear_rsa_host_key as an example testcase as that file is found in practically all builds.)

* Rename/mv fails.
* Deleting the same file succeeds.
* Copying is also ok.
(Deleting the file and copying a new one into its place does not enable rename, which still fails.)

As the problem is in the core filesystem level, the rename failure happens in all places: console, scripts and function calls from C programs.

Longer debug story and fix proposal for ubifs:
https://bugs.lede-project.org/index.php?do=details&task_id=579

The reason I am highlighting this at the mailing list is that after looking again at the original Linux upstream commit, I noticed that also jffs2 is among the filesystems that got the same new clause returning EINVAL error for certain rename action types. That may mean that also non-ubi targets are impacted with this. But I have no way of testing that.

The offending two new lines in kernel 4.9 fs/ubifs/dir.c :
    if (flags & ~RENAME_NOREPLACE)
        return -EINVAL;

Linux upstream commit that apparently restricts allowed rename action types, possibly breaking overlayfs actions:
https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?h=linux-4.9.y&id=f03b8ad8d38634d13e802165cc15917481b47835

I drafted a fix for ubifs (in FS#579) that seems to work by removing the two new lines from fs/ubifs/dir.c that were not in our kernel 4.4 ubifs patches. Otherwise the kernel 4.4 ubifs LEDE patches are pretty identical to the upstream ubifs files in 4.9.

But I wonder if a better solution would be to change the RENAME flags in the call from overlayfs instead, or something like that. My fs skills are not good enough to determine the best solution.

I find this bug rather nasty as it makes a basic filesystem operation fail rather mysteriously. I originally spotted this when I was debugging opkg for Jow and first thought it to be a bug inside opkg, but after some debugging with strace it turned out to be a failing rename operation at the filesystem level.

Hopefully some filesystem gurus can look into this.


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to