All of lore.kernel.org
 help / color / mirror / Atom feed
* [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
@ 2017-03-28  8:01 Ralph Sennhauser
  2017-03-28  9:27 ` Amir Goldstein
  0 siblings, 1 reply; 18+ messages in thread
From: Ralph Sennhauser @ 2017-03-28  8:01 UTC (permalink / raw)
  To: Amir Goldstein
  Cc: Miklos Szeredi, linux-unionfs, linux-kernel, linux-mtd, regressions

Hi Amir

Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE")
breaks squashfs with an ubifs overlay (both ubi volumes of the same
container).

Renaming a file results in an error "UBIFS error (ubi0:1 pid 1394):
ubifs_add_orphan: orphaned twice". This corrupts the the filesystem and
the next attempt to mount the overlay will fail.

Regards
Ralph


Bisect log:

  git bisect start
  # bad: [c02ed2e75ef4c74e41e421acb4ef1494671585e8] Linux 4.11-rc4
  git bisect bad c02ed2e75ef4c74e41e421acb4ef1494671585e8
  # good: [c470abd4fde40ea6a0846a2beab642a578c0b8cd] Linux 4.10
  git bisect good c470abd4fde40ea6a0846a2beab642a578c0b8cd
  # good: [bc49a7831b1137ce1c2dda1c57e3631655f5d2ae] Merge branch 'akpm' (patches from Andrew)
  git bisect good bc49a7831b1137ce1c2dda1c57e3631655f5d2ae
  # good: [738bc38d49e017fe7acb3596712518e22c225816] kernel/ksysfs.c: add __ro_after_init to bin_attribute structure
  git bisect good 738bc38d49e017fe7acb3596712518e22c225816
  # good: [3f80dd67c367878aaad16e458eebc3c8980bb841] Merge tag 'acpi-extra-4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
  git bisect good 3f80dd67c367878aaad16e458eebc3c8980bb841
  # bad: [4495c08e84729385774601b5146d51d9e5849f81] Linux 4.11-rc2
  git bisect bad 4495c08e84729385774601b5146d51d9e5849f81
  # bad: [2d62e0768d3c28536d4cfe4c40ba1e5e8e442a93] Merge tag 'kvm-4.11-2' of git://git.kernel.org/pub/scm/virt/kvm/kvm
  git bisect bad 2d62e0768d3c28536d4cfe4c40ba1e5e8e442a93
  # good: [1827adb11ad26b2290dc9fe2aaf54976b2439865] Merge branch 'WIP.sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
  git bisect good 1827adb11ad26b2290dc9fe2aaf54976b2439865
  # bad: [0b94da8dfc26ec2eb3e6640726e434abf8c53e49] Merge branch 'libnvdimm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm
  git bisect bad 0b94da8dfc26ec2eb3e6640726e434abf8c53e49
  # bad: [0a040b2113ec226bcf56fcbe02d035bb5b30c35e] Merge branch 'for-next' of git://git.samba.org/sfrench/cifs-2.6
  git bisect bad 0a040b2113ec226bcf56fcbe02d035bb5b30c35e
  # good: [590dce2d4934fb909b112cd80c80486362337744] Merge branch 'rebased-statx' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
  git bisect good 590dce2d4934fb909b112cd80c80486362337744
  # bad: [4e66c42c60fdf9be81837857454a41b39bf1b773] Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse
  git bisect bad 4e66c42c60fdf9be81837857454a41b39bf1b773
  # bad: [e593b2bf513dd4d3fbfa0f435392eea2c7f776f0] ovl: properly implement sync_filesystem()
  git bisect bad e593b2bf513dd4d3fbfa0f435392eea2c7f776f0
  # bad: [d8514d8edb5b045cf7f708e14f888ce760d60f0b] ovl: copy up regular file using O_TMPFILE
  git bisect bad d8514d8edb5b045cf7f708e14f888ce760d60f0b
  # good: [42f269b925405d9dd45014823e5057786d6ca452] ovl: rearrange code in ovl_copy_up_locked()
  git bisect good 42f269b925405d9dd45014823e5057786d6ca452
  # first bad commit: [d8514d8edb5b045cf7f708e14f888ce760d60f0b] ovl: copy up regular file using O_TMPFILE

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-28  8:01 [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs Ralph Sennhauser
@ 2017-03-28  9:27 ` Amir Goldstein
  2017-03-28 10:43   ` Amir Goldstein
  2017-03-28 10:45   ` Ralph Sennhauser
  0 siblings, 2 replies; 18+ messages in thread
From: Amir Goldstein @ 2017-03-28  9:27 UTC (permalink / raw)
  To: Ralph Sennhauser
  Cc: Miklos Szeredi, linux-unionfs, linux-kernel, linux-mtd, regressions

On Tue, Mar 28, 2017 at 4:01 AM, Ralph Sennhauser
<ralph.sennhauser@gmail.com> wrote:
> Hi Amir
>
> Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE")
> breaks squashfs with an ubifs overlay (both ubi volumes of the same
> container).
>

Hi Ralph,

I am confused by the description above. Which are the 'both ubi volumes'?

Can you provide exact command of overlayfs mount, preferably
also a script to generate the lower/upper images and mount them
to remove any mkfs option doubts from test setup.

> Renaming a file results in an error "UBIFS error (ubi0:1 pid 1394):
> ubifs_add_orphan: orphaned twice". This corrupts the the filesystem and
> the next attempt to mount the overlay will fail.
>

Does that happen on any attempt to rename a file?
A file that was only is lower I suppose?
Can you provide a simple script with your test, setting up the lower/upper
files and triggering the bug.

Thanks,
Amir.


>
>
> Bisect log:
>
>   git bisect start
>   # bad: [c02ed2e75ef4c74e41e421acb4ef1494671585e8] Linux 4.11-rc4
>   git bisect bad c02ed2e75ef4c74e41e421acb4ef1494671585e8
>   # good: [c470abd4fde40ea6a0846a2beab642a578c0b8cd] Linux 4.10
>   git bisect good c470abd4fde40ea6a0846a2beab642a578c0b8cd
>   # good: [bc49a7831b1137ce1c2dda1c57e3631655f5d2ae] Merge branch 'akpm' (patches from Andrew)
>   git bisect good bc49a7831b1137ce1c2dda1c57e3631655f5d2ae
>   # good: [738bc38d49e017fe7acb3596712518e22c225816] kernel/ksysfs.c: add __ro_after_init to bin_attribute structure
>   git bisect good 738bc38d49e017fe7acb3596712518e22c225816
>   # good: [3f80dd67c367878aaad16e458eebc3c8980bb841] Merge tag 'acpi-extra-4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
>   git bisect good 3f80dd67c367878aaad16e458eebc3c8980bb841
>   # bad: [4495c08e84729385774601b5146d51d9e5849f81] Linux 4.11-rc2
>   git bisect bad 4495c08e84729385774601b5146d51d9e5849f81
>   # bad: [2d62e0768d3c28536d4cfe4c40ba1e5e8e442a93] Merge tag 'kvm-4.11-2' of git://git.kernel.org/pub/scm/virt/kvm/kvm
>   git bisect bad 2d62e0768d3c28536d4cfe4c40ba1e5e8e442a93
>   # good: [1827adb11ad26b2290dc9fe2aaf54976b2439865] Merge branch 'WIP.sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
>   git bisect good 1827adb11ad26b2290dc9fe2aaf54976b2439865
>   # bad: [0b94da8dfc26ec2eb3e6640726e434abf8c53e49] Merge branch 'libnvdimm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm
>   git bisect bad 0b94da8dfc26ec2eb3e6640726e434abf8c53e49
>   # bad: [0a040b2113ec226bcf56fcbe02d035bb5b30c35e] Merge branch 'for-next' of git://git.samba.org/sfrench/cifs-2.6
>   git bisect bad 0a040b2113ec226bcf56fcbe02d035bb5b30c35e
>   # good: [590dce2d4934fb909b112cd80c80486362337744] Merge branch 'rebased-statx' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
>   git bisect good 590dce2d4934fb909b112cd80c80486362337744
>   # bad: [4e66c42c60fdf9be81837857454a41b39bf1b773] Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse
>   git bisect bad 4e66c42c60fdf9be81837857454a41b39bf1b773
>   # bad: [e593b2bf513dd4d3fbfa0f435392eea2c7f776f0] ovl: properly implement sync_filesystem()
>   git bisect bad e593b2bf513dd4d3fbfa0f435392eea2c7f776f0
>   # bad: [d8514d8edb5b045cf7f708e14f888ce760d60f0b] ovl: copy up regular file using O_TMPFILE
>   git bisect bad d8514d8edb5b045cf7f708e14f888ce760d60f0b
>   # good: [42f269b925405d9dd45014823e5057786d6ca452] ovl: rearrange code in ovl_copy_up_locked()
>   git bisect good 42f269b925405d9dd45014823e5057786d6ca452
>   # first bad commit: [d8514d8edb5b045cf7f708e14f888ce760d60f0b] ovl: copy up regular file using O_TMPFILE

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-28  9:27 ` Amir Goldstein
@ 2017-03-28 10:43   ` Amir Goldstein
  2017-03-29 21:06       ` Richard Weinberger
  2017-03-28 10:45   ` Ralph Sennhauser
  1 sibling, 1 reply; 18+ messages in thread
From: Amir Goldstein @ 2017-03-28 10:43 UTC (permalink / raw)
  To: Ralph Sennhauser
  Cc: Miklos Szeredi, linux-unionfs, linux-kernel, linux-mtd,
	regressions, Richard Weinberger, Artem Bityutskiy, Adrian Hunter

On Tue, Mar 28, 2017 at 5:27 AM, Amir Goldstein <amir73il@gmail.com> wrote:
> On Tue, Mar 28, 2017 at 4:01 AM, Ralph Sennhauser
> <ralph.sennhauser@gmail.com> wrote:
>> Hi Amir
>>
>> Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE")
>> breaks squashfs with an ubifs overlay (both ubi volumes of the same
>> container).
>>
>
> Hi Ralph,
>
> I am confused by the description above. Which are the 'both ubi volumes'?
>
> Can you provide exact command of overlayfs mount, preferably
> also a script to generate the lower/upper images and mount them
> to remove any mkfs option doubts from test setup.
>
>> Renaming a file results in an error "UBIFS error (ubi0:1 pid 1394):
>> ubifs_add_orphan: orphaned twice". This corrupts the the filesystem and
>> the next attempt to mount the overlay will fail.
>>

Looking at the ubifs code, it does not appear that ubifs_link() ever calls
ubifs_delete_orphan() for the case of linking a temp file (nlink == 0),
so this looks like a ubifs bug.

Is ubifs being tested with xfstests? This should have been caught by test
generic/004 (link tempfile then delete it).

A quick fix for ubifs+overlayfs would be to disable ubifs O_TMPFILE
support (because it is broken) and then overlayfs won't try to copy up
using tmpfile.

Amir.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-28  9:27 ` Amir Goldstein
  2017-03-28 10:43   ` Amir Goldstein
@ 2017-03-28 10:45   ` Ralph Sennhauser
  2017-03-28 11:03       ` Amir Goldstein
  1 sibling, 1 reply; 18+ messages in thread
From: Ralph Sennhauser @ 2017-03-28 10:45 UTC (permalink / raw)
  To: Amir Goldstein
  Cc: Miklos Szeredi, linux-unionfs, linux-kernel, linux-mtd,
	regressions, Ralph Sennhauser

On Tue, 28 Mar 2017 05:27:03 -0400
Amir Goldstein <amir73il@gmail.com> wrote:

> On Tue, Mar 28, 2017 at 4:01 AM, Ralph Sennhauser
> <ralph.sennhauser@gmail.com> wrote:
> > Hi Amir
> >
> > Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE")
> > breaks squashfs with an ubifs overlay (both ubi volumes of the same
> > container).
> >  
> 
> Hi Ralph,
> 
> I am confused by the description above. Which are the 'both ubi
> volumes'?

The ubi container has two volumes, the first is a squashfs, the second
volume an ubifs. The latter is mounted as an overlay.
 
> 
> Can you provide exact command of overlayfs mount, preferably
> also a script to generate the lower/upper images and mount them
> to remove any mkfs option doubts from test setup.

Both I mount from the initramfs as follows (rom / overlay are empty in
the initramfs):

  mount -o rw,nosuid,nodev,noexec,noatime -t proc proc /proc || rescue_shell "proc"
  mount -o rw,nosuid,nodev,noexec,noatime -t sysfs sysfs /sys || rescue_shell "sys"
  mount -o rw,nosuid -t devtmpfs devtmpfs /dev || rescue_shell "dev"

  ubiattach -m $(get_mtd_from_root_arg) /dev/ubi_ctrl || rescue_shell "attach"
  ubiblock --create /dev/ubi0_0 || rescue_shell || "block"

  mount -o ro -t squashfs /dev/ubiblock0_0 /rom || rescue_shell "mount rootfs"
  mount -o rw,noatime -t ubifs /dev/ubi0_1 /overlay || rescue_shell "mount rootfs_data"

  mkdir -p /overlay/upper || rescue_shell "mkdir upper"
  mkdir -p /overlay/work || rescue_shell "mkdir work"

  mount -o rw,noatime,lowerdir=/rom,upperdir=/overlay/upper,workdir=/overlay/work \
          -t overlay overlay /newroot || rescue_shell "mount overlay"

  mount --move /rom /newroot/rom || rescue_shell "move rootfs"
  mount --move /overlay /newroot/overlay || rescue_shell "move rootfs_data"

  mount --move /dev /newroot/dev || rescue_shell "move dev"
  mount --move /sys /newroot/sys || rescue_shell "move sys"
  mount --move /proc /newroot/proc || rescue_shell "move proc"

  exec switch_root /newroot /sbin/init

I use OpenWrt as a basis, replacing the kernel with a vanilla one.

The options used to generate the file systems are:

Squashfs:  -p 128KiB -m 2048 -s 512 -O 2048
Ubifs: -m 2048 -e 124KiB -c 4096 -F

> 
> > Renaming a file results in an error "UBIFS error (ubi0:1 pid 1394):
> > ubifs_add_orphan: orphaned twice". This corrupts the the filesystem
> > and the next attempt to mount the overlay will fail.
> >  
> 
> Does that happen on any attempt to rename a file?
> A file that was only is lower I suppose?

That's how I trigger it, yes. Can reproduce it on any attempt.

> Can you provide a simple script with your test, setting up the
> lower/upper files and triggering the bug.

Any more you need than the above mount script? A call to "mv somefile
somefile.back && reboot" on a fresh install is all I do.

Thanks
Ralph

PS: Reverting 01ad3eb8a073 ("ovl: concurrent copy up of regular files")
as a dependency and the commit mentioned in Subject fix the issue for
me. Tested on v4.11-rc4 and next-20170327.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-28 10:45   ` Ralph Sennhauser
@ 2017-03-28 11:03       ` Amir Goldstein
  0 siblings, 0 replies; 18+ messages in thread
From: Amir Goldstein @ 2017-03-28 11:03 UTC (permalink / raw)
  To: Ralph Sennhauser
  Cc: linux-kernel, regressions, linux-mtd, linux-unionfs, Miklos Szeredi

On Tue, Mar 28, 2017 at 6:45 AM, Ralph Sennhauser
<ralph.sennhauser@gmail.com> wrote:
> On Tue, 28 Mar 2017 05:27:03 -0400
> Amir Goldstein <amir73il@gmail.com> wrote:
>
>> On Tue, Mar 28, 2017 at 4:01 AM, Ralph Sennhauser
>> <ralph.sennhauser@gmail.com> wrote:
>> > Hi Amir
>> >
>> > Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE")
>> > breaks squashfs with an ubifs overlay (both ubi volumes of the same
>> > container).
>> >
>>
>> Hi Ralph,
>>
>> I am confused by the description above. Which are the 'both ubi
>> volumes'?
>
> The ubi container has two volumes, the first is a squashfs, the second
> volume an ubifs. The latter is mounted as an overlay.
>
>>
>> Can you provide exact command of overlayfs mount, preferably
>> also a script to generate the lower/upper images and mount them
>> to remove any mkfs option doubts from test setup.
>
> Both I mount from the initramfs as follows (rom / overlay are empty in
> the initramfs):
>
>   mount -o rw,nosuid,nodev,noexec,noatime -t proc proc /proc || rescue_shell "proc"
>   mount -o rw,nosuid,nodev,noexec,noatime -t sysfs sysfs /sys || rescue_shell "sys"
>   mount -o rw,nosuid -t devtmpfs devtmpfs /dev || rescue_shell "dev"
>
>   ubiattach -m $(get_mtd_from_root_arg) /dev/ubi_ctrl || rescue_shell "attach"
>   ubiblock --create /dev/ubi0_0 || rescue_shell || "block"
>
>   mount -o ro -t squashfs /dev/ubiblock0_0 /rom || rescue_shell "mount rootfs"
>   mount -o rw,noatime -t ubifs /dev/ubi0_1 /overlay || rescue_shell "mount rootfs_data"
>
>   mkdir -p /overlay/upper || rescue_shell "mkdir upper"
>   mkdir -p /overlay/work || rescue_shell "mkdir work"
>
>   mount -o rw,noatime,lowerdir=/rom,upperdir=/overlay/upper,workdir=/overlay/work \
>           -t overlay overlay /newroot || rescue_shell "mount overlay"
>
>   mount --move /rom /newroot/rom || rescue_shell "move rootfs"
>   mount --move /overlay /newroot/overlay || rescue_shell "move rootfs_data"
>
>   mount --move /dev /newroot/dev || rescue_shell "move dev"
>   mount --move /sys /newroot/sys || rescue_shell "move sys"
>   mount --move /proc /newroot/proc || rescue_shell "move proc"
>
>   exec switch_root /newroot /sbin/init
>
> I use OpenWrt as a basis, replacing the kernel with a vanilla one.
>
> The options used to generate the file systems are:
>
> Squashfs:  -p 128KiB -m 2048 -s 512 -O 2048
> Ubifs: -m 2048 -e 124KiB -c 4096 -F
>
>>
>> > Renaming a file results in an error "UBIFS error (ubi0:1 pid 1394):
>> > ubifs_add_orphan: orphaned twice". This corrupts the the filesystem
>> > and the next attempt to mount the overlay will fail.
>> >
>>
>> Does that happen on any attempt to rename a file?
>> A file that was only is lower I suppose?
>
> That's how I trigger it, yes. Can reproduce it on any attempt.
>
>> Can you provide a simple script with your test, setting up the
>> lower/upper files and triggering the bug.
>
> Any more you need than the above mount script? A call to "mv somefile
> somefile.back && reboot" on a fresh install is all I do.
>
> Thanks
> Ralph
>
> PS: Reverting 01ad3eb8a073 ("ovl: concurrent copy up of regular files")
> as a dependency and the commit mentioned in Subject fix the issue for
> me. Tested on v4.11-rc4 and next-20170327.

That is not surprising.
Overlayfs now uses O_TMPFILE for copy up and it works fine with all the
file systems I tested (tmpfs, xfs, ext4).
If I am right and O_TMPFILE is broken in ubifs, you are most likely the first
person to test it (indirectly by overlayfs).

Please try to reproduce the bug with following patch to disable ubifs
O_TMPFILE support:

--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -1685,7 +1685,7 @@ const struct inode_operations
ubifs_dir_inode_operations = {
 #ifdef CONFIG_UBIFS_ATIME_SUPPORT
        .update_time = ubifs_update_time,
 #endif
-       .tmpfile     = ubifs_tmpfile,
+       //.tmpfile     = ubifs_tmpfile,
 };

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
@ 2017-03-28 11:03       ` Amir Goldstein
  0 siblings, 0 replies; 18+ messages in thread
From: Amir Goldstein @ 2017-03-28 11:03 UTC (permalink / raw)
  To: Ralph Sennhauser
  Cc: Miklos Szeredi, linux-unionfs, linux-kernel, linux-mtd, regressions

On Tue, Mar 28, 2017 at 6:45 AM, Ralph Sennhauser
<ralph.sennhauser@gmail.com> wrote:
> On Tue, 28 Mar 2017 05:27:03 -0400
> Amir Goldstein <amir73il@gmail.com> wrote:
>
>> On Tue, Mar 28, 2017 at 4:01 AM, Ralph Sennhauser
>> <ralph.sennhauser@gmail.com> wrote:
>> > Hi Amir
>> >
>> > Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE")
>> > breaks squashfs with an ubifs overlay (both ubi volumes of the same
>> > container).
>> >
>>
>> Hi Ralph,
>>
>> I am confused by the description above. Which are the 'both ubi
>> volumes'?
>
> The ubi container has two volumes, the first is a squashfs, the second
> volume an ubifs. The latter is mounted as an overlay.
>
>>
>> Can you provide exact command of overlayfs mount, preferably
>> also a script to generate the lower/upper images and mount them
>> to remove any mkfs option doubts from test setup.
>
> Both I mount from the initramfs as follows (rom / overlay are empty in
> the initramfs):
>
>   mount -o rw,nosuid,nodev,noexec,noatime -t proc proc /proc || rescue_shell "proc"
>   mount -o rw,nosuid,nodev,noexec,noatime -t sysfs sysfs /sys || rescue_shell "sys"
>   mount -o rw,nosuid -t devtmpfs devtmpfs /dev || rescue_shell "dev"
>
>   ubiattach -m $(get_mtd_from_root_arg) /dev/ubi_ctrl || rescue_shell "attach"
>   ubiblock --create /dev/ubi0_0 || rescue_shell || "block"
>
>   mount -o ro -t squashfs /dev/ubiblock0_0 /rom || rescue_shell "mount rootfs"
>   mount -o rw,noatime -t ubifs /dev/ubi0_1 /overlay || rescue_shell "mount rootfs_data"
>
>   mkdir -p /overlay/upper || rescue_shell "mkdir upper"
>   mkdir -p /overlay/work || rescue_shell "mkdir work"
>
>   mount -o rw,noatime,lowerdir=/rom,upperdir=/overlay/upper,workdir=/overlay/work \
>           -t overlay overlay /newroot || rescue_shell "mount overlay"
>
>   mount --move /rom /newroot/rom || rescue_shell "move rootfs"
>   mount --move /overlay /newroot/overlay || rescue_shell "move rootfs_data"
>
>   mount --move /dev /newroot/dev || rescue_shell "move dev"
>   mount --move /sys /newroot/sys || rescue_shell "move sys"
>   mount --move /proc /newroot/proc || rescue_shell "move proc"
>
>   exec switch_root /newroot /sbin/init
>
> I use OpenWrt as a basis, replacing the kernel with a vanilla one.
>
> The options used to generate the file systems are:
>
> Squashfs:  -p 128KiB -m 2048 -s 512 -O 2048
> Ubifs: -m 2048 -e 124KiB -c 4096 -F
>
>>
>> > Renaming a file results in an error "UBIFS error (ubi0:1 pid 1394):
>> > ubifs_add_orphan: orphaned twice". This corrupts the the filesystem
>> > and the next attempt to mount the overlay will fail.
>> >
>>
>> Does that happen on any attempt to rename a file?
>> A file that was only is lower I suppose?
>
> That's how I trigger it, yes. Can reproduce it on any attempt.
>
>> Can you provide a simple script with your test, setting up the
>> lower/upper files and triggering the bug.
>
> Any more you need than the above mount script? A call to "mv somefile
> somefile.back && reboot" on a fresh install is all I do.
>
> Thanks
> Ralph
>
> PS: Reverting 01ad3eb8a073 ("ovl: concurrent copy up of regular files")
> as a dependency and the commit mentioned in Subject fix the issue for
> me. Tested on v4.11-rc4 and next-20170327.

That is not surprising.
Overlayfs now uses O_TMPFILE for copy up and it works fine with all the
file systems I tested (tmpfs, xfs, ext4).
If I am right and O_TMPFILE is broken in ubifs, you are most likely the first
person to test it (indirectly by overlayfs).

Please try to reproduce the bug with following patch to disable ubifs
O_TMPFILE support:

--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -1685,7 +1685,7 @@ const struct inode_operations
ubifs_dir_inode_operations = {
 #ifdef CONFIG_UBIFS_ATIME_SUPPORT
        .update_time = ubifs_update_time,
 #endif
-       .tmpfile     = ubifs_tmpfile,
+       //.tmpfile     = ubifs_tmpfile,
 };

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-28 11:03       ` Amir Goldstein
  (?)
@ 2017-03-28 11:28       ` Ralph Sennhauser
  2017-03-28 12:08         ` Amir Goldstein
  -1 siblings, 1 reply; 18+ messages in thread
From: Ralph Sennhauser @ 2017-03-28 11:28 UTC (permalink / raw)
  To: Amir Goldstein
  Cc: Miklos Szeredi, linux-unionfs, linux-kernel, linux-mtd,
	regressions, Richard Weinberger, Artem Bityutskiy, Adrian Hunter,
	Ralph Sennhauser

Hi Amir,

On Tue, 28 Mar 2017 07:03:11 -0400
Amir Goldstein <amir73il@gmail.com> wrote:

> Overlayfs now uses O_TMPFILE for copy up and it works fine with all
> the file systems I tested (tmpfs, xfs, ext4).
> If I am right and O_TMPFILE is broken in ubifs, you are most likely
> the first person to test it (indirectly by overlayfs).
> 
> Please try to reproduce the bug with following patch to disable ubifs
> O_TMPFILE support:
> 
> --- a/fs/ubifs/dir.c
> +++ b/fs/ubifs/dir.c
> @@ -1685,7 +1685,7 @@ const struct inode_operations
> ubifs_dir_inode_operations = {
>  #ifdef CONFIG_UBIFS_ATIME_SUPPORT
>         .update_time = ubifs_update_time,
>  #endif
> -       .tmpfile     = ubifs_tmpfile,
> +       //.tmpfile     = ubifs_tmpfile,
>  };

Get a unused warning during build but all seems to be working fine now.

Thanks
Ralph

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-28 11:28       ` Ralph Sennhauser
@ 2017-03-28 12:08         ` Amir Goldstein
  2017-03-28 12:16           ` Ralph Sennhauser
  0 siblings, 1 reply; 18+ messages in thread
From: Amir Goldstein @ 2017-03-28 12:08 UTC (permalink / raw)
  To: Ralph Sennhauser
  Cc: Miklos Szeredi, linux-unionfs, linux-kernel, linux-mtd,
	regressions, Richard Weinberger, Artem Bityutskiy, Adrian Hunter

On Tue, Mar 28, 2017 at 7:28 AM, Ralph Sennhauser
<ralph.sennhauser@gmail.com> wrote:
> Hi Amir,
>
> On Tue, 28 Mar 2017 07:03:11 -0400
> Amir Goldstein <amir73il@gmail.com> wrote:
>
>> Overlayfs now uses O_TMPFILE for copy up and it works fine with all
>> the file systems I tested (tmpfs, xfs, ext4).
>> If I am right and O_TMPFILE is broken in ubifs, you are most likely
>> the first person to test it (indirectly by overlayfs).
>>
>> Please try to reproduce the bug with following patch to disable ubifs
>> O_TMPFILE support:
>>
>> --- a/fs/ubifs/dir.c
>> +++ b/fs/ubifs/dir.c
>> @@ -1685,7 +1685,7 @@ const struct inode_operations
>> ubifs_dir_inode_operations = {
>>  #ifdef CONFIG_UBIFS_ATIME_SUPPORT
>>         .update_time = ubifs_update_time,
>>  #endif
>> -       .tmpfile     = ubifs_tmpfile,
>> +       //.tmpfile     = ubifs_tmpfile,
>>  };
>
> Get a unused warning during build but all seems to be working fine now.
>

OK. I'll wait for ubifs developers to fix the bug.
Otherwise, I'll send a proper patch to disable ubifs O_TMPFILE support.
Will add tested-by you.

Thanks!

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-28 12:08         ` Amir Goldstein
@ 2017-03-28 12:16           ` Ralph Sennhauser
  2017-03-29 19:16             ` Amir Goldstein
  0 siblings, 1 reply; 18+ messages in thread
From: Ralph Sennhauser @ 2017-03-28 12:16 UTC (permalink / raw)
  To: Amir Goldstein
  Cc: Miklos Szeredi, linux-unionfs, linux-kernel, linux-mtd,
	regressions, Richard Weinberger, Artem Bityutskiy, Adrian Hunter

On Tue, 28 Mar 2017 08:08:51 -0400
Amir Goldstein <amir73il@gmail.com> wrote:

> On Tue, Mar 28, 2017 at 7:28 AM, Ralph Sennhauser
> <ralph.sennhauser@gmail.com> wrote:
> > Hi Amir,
> >
> > On Tue, 28 Mar 2017 07:03:11 -0400
> > Amir Goldstein <amir73il@gmail.com> wrote:
> >  
> >> Overlayfs now uses O_TMPFILE for copy up and it works fine with all
> >> the file systems I tested (tmpfs, xfs, ext4).
> >> If I am right and O_TMPFILE is broken in ubifs, you are most likely
> >> the first person to test it (indirectly by overlayfs).
> >>
> >> Please try to reproduce the bug with following patch to disable
> >> ubifs O_TMPFILE support:
> >>
> >> --- a/fs/ubifs/dir.c
> >> +++ b/fs/ubifs/dir.c
> >> @@ -1685,7 +1685,7 @@ const struct inode_operations
> >> ubifs_dir_inode_operations = {
> >>  #ifdef CONFIG_UBIFS_ATIME_SUPPORT
> >>         .update_time = ubifs_update_time,
> >>  #endif
> >> -       .tmpfile     = ubifs_tmpfile,
> >> +       //.tmpfile     = ubifs_tmpfile,
> >>  };  
> >
> > Get a unused warning during build but all seems to be working fine
> > now. 
> 
> OK. I'll wait for ubifs developers to fix the bug.
> Otherwise, I'll send a proper patch to disable ubifs O_TMPFILE
> support. Will add tested-by you.

Sounds like a good plan, there is still time for 4.11-rc5. Fine with
you adding my tested-by in case it will come to this.

Appreciated
Ralph

> 
> Thanks!

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-28 12:16           ` Ralph Sennhauser
@ 2017-03-29 19:16             ` Amir Goldstein
  2017-03-29 21:26               ` Ralph Sennhauser
  0 siblings, 1 reply; 18+ messages in thread
From: Amir Goldstein @ 2017-03-29 19:16 UTC (permalink / raw)
  To: Ralph Sennhauser
  Cc: Miklos Szeredi, linux-unionfs, linux-kernel, linux-mtd,
	regressions, Richard Weinberger, Artem Bityutskiy, Adrian Hunter

On Tue, Mar 28, 2017 at 3:16 PM, Ralph Sennhauser
<ralph.sennhauser@gmail.com> wrote:
> On Tue, 28 Mar 2017 08:08:51 -0400
> Amir Goldstein <amir73il@gmail.com> wrote:
>
>> On Tue, Mar 28, 2017 at 7:28 AM, Ralph Sennhauser
>> <ralph.sennhauser@gmail.com> wrote:
>> > Hi Amir,
>> >
>> > On Tue, 28 Mar 2017 07:03:11 -0400
>> > Amir Goldstein <amir73il@gmail.com> wrote:
>> >
>> >> Overlayfs now uses O_TMPFILE for copy up and it works fine with all
>> >> the file systems I tested (tmpfs, xfs, ext4).
>> >> If I am right and O_TMPFILE is broken in ubifs, you are most likely
>> >> the first person to test it (indirectly by overlayfs).
>> >>
>> >> Please try to reproduce the bug with following patch to disable
>> >> ubifs O_TMPFILE support:
>> >>
>> >> --- a/fs/ubifs/dir.c
>> >> +++ b/fs/ubifs/dir.c
>> >> @@ -1685,7 +1685,7 @@ const struct inode_operations
>> >> ubifs_dir_inode_operations = {
>> >>  #ifdef CONFIG_UBIFS_ATIME_SUPPORT
>> >>         .update_time = ubifs_update_time,
>> >>  #endif
>> >> -       .tmpfile     = ubifs_tmpfile,
>> >> +       //.tmpfile     = ubifs_tmpfile,
>> >>  };
>> >
>> > Get a unused warning during build but all seems to be working fine
>> > now.
>>
>> OK. I'll wait for ubifs developers to fix the bug.
>> Otherwise, I'll send a proper patch to disable ubifs O_TMPFILE
>> support. Will add tested-by you.
>
> Sounds like a good plan, there is still time for 4.11-rc5. Fine with
> you adding my tested-by in case it will come to this.
>


Ralph,

Can you please try to reproduce the problem with this command
on ubifs:

# create and link a tmpfile - then remove it
sudo rm -rf foo; sudo xfs_io -T -c "flink foo" . ; ls -l foo; sudo rm foo

That's the gist of xfstest generic/004.

You should expect the same behavior of corrupted fs after boot.

This issue should be reproduced since kernel 4.9 when ubifs tmpfile
support was added.

I hope this info can help the ubifs developers fix the problem
independently from overlayfs setup.

Thanks,
Amir.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-28 10:43   ` Amir Goldstein
@ 2017-03-29 21:06       ` Richard Weinberger
  0 siblings, 0 replies; 18+ messages in thread
From: Richard Weinberger @ 2017-03-29 21:06 UTC (permalink / raw)
  To: Amir Goldstein, Ralph Sennhauser
  Cc: Artem Bityutskiy, Miklos Szeredi, linux-kernel,
	David Oberhollenzer, linux-unionfs, regressions, linux-mtd,
	Adrian Hunter

Amir,

Am 28.03.2017 um 12:43 schrieb Amir Goldstein:
> On Tue, Mar 28, 2017 at 5:27 AM, Amir Goldstein <amir73il@gmail.com> wrote:
>> On Tue, Mar 28, 2017 at 4:01 AM, Ralph Sennhauser
>> <ralph.sennhauser@gmail.com> wrote:
>>> Hi Amir
>>>
>>> Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE")
>>> breaks squashfs with an ubifs overlay (both ubi volumes of the same
>>> container).
>>>
>>
>> Hi Ralph,
>>
>> I am confused by the description above. Which are the 'both ubi volumes'?
>>
>> Can you provide exact command of overlayfs mount, preferably
>> also a script to generate the lower/upper images and mount them
>> to remove any mkfs option doubts from test setup.
>>
>>> Renaming a file results in an error "UBIFS error (ubi0:1 pid 1394):
>>> ubifs_add_orphan: orphaned twice". This corrupts the the filesystem and
>>> the next attempt to mount the overlay will fail.
>>>
> 
> Looking at the ubifs code, it does not appear that ubifs_link() ever calls
> ubifs_delete_orphan() for the case of linking a temp file (nlink == 0),
> so this looks like a ubifs bug.

Thanks for the heads up, I'll look into this.

> Is ubifs being tested with xfstests? This should have been caught by test
> generic/004 (link tempfile then delete it).

Yes, it is.
David, can you please double-check wrt. test generic/004?

Thanks,
//richard

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
@ 2017-03-29 21:06       ` Richard Weinberger
  0 siblings, 0 replies; 18+ messages in thread
From: Richard Weinberger @ 2017-03-29 21:06 UTC (permalink / raw)
  To: Amir Goldstein, Ralph Sennhauser
  Cc: Miklos Szeredi, linux-unionfs, linux-kernel, linux-mtd,
	regressions, Artem Bityutskiy, Adrian Hunter,
	David Oberhollenzer

Amir,

Am 28.03.2017 um 12:43 schrieb Amir Goldstein:
> On Tue, Mar 28, 2017 at 5:27 AM, Amir Goldstein <amir73il@gmail.com> wrote:
>> On Tue, Mar 28, 2017 at 4:01 AM, Ralph Sennhauser
>> <ralph.sennhauser@gmail.com> wrote:
>>> Hi Amir
>>>
>>> Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE")
>>> breaks squashfs with an ubifs overlay (both ubi volumes of the same
>>> container).
>>>
>>
>> Hi Ralph,
>>
>> I am confused by the description above. Which are the 'both ubi volumes'?
>>
>> Can you provide exact command of overlayfs mount, preferably
>> also a script to generate the lower/upper images and mount them
>> to remove any mkfs option doubts from test setup.
>>
>>> Renaming a file results in an error "UBIFS error (ubi0:1 pid 1394):
>>> ubifs_add_orphan: orphaned twice". This corrupts the the filesystem and
>>> the next attempt to mount the overlay will fail.
>>>
> 
> Looking at the ubifs code, it does not appear that ubifs_link() ever calls
> ubifs_delete_orphan() for the case of linking a temp file (nlink == 0),
> so this looks like a ubifs bug.

Thanks for the heads up, I'll look into this.

> Is ubifs being tested with xfstests? This should have been caught by test
> generic/004 (link tempfile then delete it).

Yes, it is.
David, can you please double-check wrt. test generic/004?

Thanks,
//richard

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-29 19:16             ` Amir Goldstein
@ 2017-03-29 21:26               ` Ralph Sennhauser
  2017-03-29 22:15                 ` Richard Weinberger
  0 siblings, 1 reply; 18+ messages in thread
From: Ralph Sennhauser @ 2017-03-29 21:26 UTC (permalink / raw)
  To: Amir Goldstein
  Cc: Miklos Szeredi, linux-unionfs, linux-kernel, linux-mtd,
	regressions, Richard Weinberger, Artem Bityutskiy, Adrian Hunter

On Wed, 29 Mar 2017 22:16:10 +0300
Amir Goldstein <amir73il@gmail.com> wrote:

> On Tue, Mar 28, 2017 at 3:16 PM, Ralph Sennhauser
> <ralph.sennhauser@gmail.com> wrote:
> > On Tue, 28 Mar 2017 08:08:51 -0400
> > Amir Goldstein <amir73il@gmail.com> wrote:
> >  
> >> On Tue, Mar 28, 2017 at 7:28 AM, Ralph Sennhauser
> >> <ralph.sennhauser@gmail.com> wrote:  
> >> > Hi Amir,
> >> >
> >> > On Tue, 28 Mar 2017 07:03:11 -0400
> >> > Amir Goldstein <amir73il@gmail.com> wrote:
> >> >  
> >> >> Overlayfs now uses O_TMPFILE for copy up and it works fine with
> >> >> all the file systems I tested (tmpfs, xfs, ext4).
> >> >> If I am right and O_TMPFILE is broken in ubifs, you are most
> >> >> likely the first person to test it (indirectly by overlayfs).
> >> >>
> >> >> Please try to reproduce the bug with following patch to disable
> >> >> ubifs O_TMPFILE support:
> >> >>
> >> >> --- a/fs/ubifs/dir.c
> >> >> +++ b/fs/ubifs/dir.c
> >> >> @@ -1685,7 +1685,7 @@ const struct inode_operations
> >> >> ubifs_dir_inode_operations = {
> >> >>  #ifdef CONFIG_UBIFS_ATIME_SUPPORT
> >> >>         .update_time = ubifs_update_time,
> >> >>  #endif
> >> >> -       .tmpfile     = ubifs_tmpfile,
> >> >> +       //.tmpfile     = ubifs_tmpfile,
> >> >>  };  
> >> >
> >> > Get a unused warning during build but all seems to be working
> >> > fine now.  
> >>
> >> OK. I'll wait for ubifs developers to fix the bug.
> >> Otherwise, I'll send a proper patch to disable ubifs O_TMPFILE
> >> support. Will add tested-by you.  
> >
> > Sounds like a good plan, there is still time for 4.11-rc5. Fine with
> > you adding my tested-by in case it will come to this.
> >  
> 
> 
> Ralph,
> 
> Can you please try to reproduce the problem with this command
> on ubifs:

Replaced the squashfs with the ubifs overlay with a plain ubifs root.

> 
> # create and link a tmpfile - then remove it
> sudo rm -rf foo; sudo xfs_io -T -c "flink foo" . ; ls -l foo; sudo rm
> foo

next-20170328, obviously without your patch:

  # xfs_io -T -c "flink foo" .
  .: Not supported
  # xfs_io -V
  xfs_io version 4.9.0
  # strace xfs_io -T -c "flink foo" .
  execve("/sbin/xfs_io", ["xfs_io", "-T", "-c", "flink foo", "."], [/* 8 vars */]) = 0
  set_tls(0xb6f17544, 0xbee0ac10, 0xb6f180a0, 0, 0xb6f1749c) = 0
  set_tid_address(0xb6f174b8)             = 2556
  open("/etc/ld-musl-armhf.path", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
  open("/lib/libgcc_s.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
  fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
  fstat64(3, {st_mode=S_IFREG|0644, st_size=38203, ...}) = 0
  read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\240;\0\0004\0\0\0"..., 936) = 936
  mmap2(NULL, 106496, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6e88000
  mmap2(0xb6ea1000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x9000) = 0xb6ea1000
  close(3)                                = 0
  mprotect(0xb6f15000, 4096, PROT_READ)   = 0
  mprotect(0x38000, 4096, PROT_READ)      = 0
  clock_gettime(CLOCK_REALTIME, {1490822261, 558395832}) = 0
  open(".", O_RDWR|O_LARGEFILE|O_DIRECTORY|O_TMPFILE) = -1 EOPNOTSUPP (Not supported)
  writev(2, [{iov_base="", iov_len=0}, {iov_base=".", iov_len=1}], 2.) = 1
  writev(2, [{iov_base="", iov_len=0}, {iov_base=":", iov_len=1}], 2:) = 1
  writev(2, [{iov_base="", iov_len=0}, {iov_base=" ", iov_len=1}], 2 ) = 1
  writev(2, [{iov_base="", iov_len=0}, {iov_base="Not supported", iov_len=13}], 2Not supported) = 13
  writev(2, [{iov_base="", iov_len=0}, {iov_base="\n", iov_len=1}], 2
  ) = 1
  exit_group(1)                           = ?
  +++ exited with 1 +++


Need some sleep before looking into what might be going on here.

Ralph

> 
> That's the gist of xfstest generic/004.
> 
> You should expect the same behavior of corrupted fs after boot.
> 
> This issue should be reproduced since kernel 4.9 when ubifs tmpfile
> support was added.
> 
> I hope this info can help the ubifs developers fix the problem
> independently from overlayfs setup.
> 
> Thanks,
> Amir.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-29 21:26               ` Ralph Sennhauser
@ 2017-03-29 22:15                 ` Richard Weinberger
  2017-03-30  5:53                   ` Ralph Sennhauser
  0 siblings, 1 reply; 18+ messages in thread
From: Richard Weinberger @ 2017-03-29 22:15 UTC (permalink / raw)
  To: Ralph Sennhauser, Amir Goldstein
  Cc: Miklos Szeredi, linux-unionfs, linux-kernel, linux-mtd,
	regressions, Artem Bityutskiy, Adrian Hunter,
	David Oberhollenzer

Ralph,

Am 29.03.2017 um 23:26 schrieb Ralph Sennhauser:
>> # create and link a tmpfile - then remove it
>> sudo rm -rf foo; sudo xfs_io -T -c "flink foo" . ; ls -l foo; sudo rm
>> foo
> 
> next-20170328, obviously without your patch:
> 
>   # xfs_io -T -c "flink foo" .
>   .: Not supported

-T tells xfs_io to create a tmpfile but you have it disabled in UBIFS.

Anyway, can you please test the attached patch?
Amir was right, UBIFS misses a corner case in ubifs_link(). ;-\

I think I understand also why we never noticed this in xfstests, UBIFS prints
only a non-fatal error while umounting the filesystem in this case.
But will test tomorrow in more detail, need some sleep now.

diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
index 30825d882aa9..95e348a2da29 100644
--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -748,6 +748,9 @@ static int ubifs_link(struct dentry *old_dentry, struct inode *dir,
 		goto out_fname;

 	lock_2_inodes(dir, inode);
+	if (inode->i_nlink == 0)
+		ubifs_delete_orphan(c, inode->i_ino);
+
 	inc_nlink(inode);
 	ihold(inode);
 	inode->i_ctime = ubifs_current_time(inode);

Thanks,
//richard

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-29 22:15                 ` Richard Weinberger
@ 2017-03-30  5:53                   ` Ralph Sennhauser
  2017-03-30  6:34                     ` Amir Goldstein
  2017-03-30  7:18                     ` Richard Weinberger
  0 siblings, 2 replies; 18+ messages in thread
From: Ralph Sennhauser @ 2017-03-30  5:53 UTC (permalink / raw)
  To: Richard Weinberger
  Cc: Amir Goldstein, Miklos Szeredi, linux-unionfs, linux-kernel,
	linux-mtd, regressions, Artem Bityutskiy, Adrian Hunter,
	David Oberhollenzer

Hi Richard,

On Thu, 30 Mar 2017 00:15:31 +0200
Richard Weinberger <richard@nod.at> wrote:

> Ralph,
> 
> Am 29.03.2017 um 23:26 schrieb Ralph Sennhauser:
> >> # create and link a tmpfile - then remove it
> >> sudo rm -rf foo; sudo xfs_io -T -c "flink foo" . ; ls -l foo; sudo
> >> rm foo  
> > 
> > next-20170328, obviously without your patch:
> > 
> >   # xfs_io -T -c "flink foo" .
> >   .: Not supported  
> 
> -T tells xfs_io to create a tmpfile but you have it disabled in UBIFS.

Bash history says I booted the other partition than I flashed (uname
just happened to match), the downside of the dual boot layout. :)

  # rm -rf foo
  # xfs_io -T -c "flink foo" .
  # ls -l foo
  -rw-------    1 root     root             0 Mar 30 02:00 foo
  # rm foo
  [  305.001436] UBIFS error (ubi0:0 pid 2493): ubifs_add_orphan: orphaned twice

However, unlike with the overlay setup the filesystem can be mounted
just fine without imediatly visible side effects.

> 
> Anyway, can you please test the attached patch?
> Amir was right, UBIFS misses a corner case in ubifs_link(). ;-\
> 
> I think I understand also why we never noticed this in xfstests,
> UBIFS prints only a non-fatal error while umounting the filesystem in
> this case. But will test tomorrow in more detail, need some sleep now.
> 
> diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
> index 30825d882aa9..95e348a2da29 100644
> --- a/fs/ubifs/dir.c
> +++ b/fs/ubifs/dir.c
> @@ -748,6 +748,9 @@ static int ubifs_link(struct dentry *old_dentry,
> struct inode *dir, goto out_fname;
> 
>  	lock_2_inodes(dir, inode);
> +	if (inode->i_nlink == 0)
> +		ubifs_delete_orphan(c, inode->i_ino);
> +
>  	inc_nlink(inode);
>  	ihold(inode);
>  	inode->i_ctime = ubifs_current_time(inode);
> 
> Thanks,
> //richard

With this patch I'm no longer able to reproduce _this_ issue, however,
rename no longer works either:

  # mv /etc/config/wireless /etc/config/wireless.back
  mv: can't rename '/etc/config/wireless': Invalid argument
  # ls /etc/config/wireless
  /etc/config/wireless
  # rm /etc/config/wireless
  # ls /etc/config/wireless
  ls: /etc/config/wireless: No such file or directory


Thanks
Ralph

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-30  5:53                   ` Ralph Sennhauser
@ 2017-03-30  6:34                     ` Amir Goldstein
  2017-03-30  7:18                     ` Richard Weinberger
  1 sibling, 0 replies; 18+ messages in thread
From: Amir Goldstein @ 2017-03-30  6:34 UTC (permalink / raw)
  To: Ralph Sennhauser
  Cc: Richard Weinberger, Miklos Szeredi, linux-unionfs, linux-kernel,
	linux-mtd, regressions, Artem Bityutskiy, Adrian Hunter,
	David Oberhollenzer

On Thu, Mar 30, 2017 at 8:53 AM, Ralph Sennhauser
<ralph.sennhauser@gmail.com> wrote:
> Hi Richard,
>
> On Thu, 30 Mar 2017 00:15:31 +0200
> Richard Weinberger <richard@nod.at> wrote:
>
>> Ralph,
>>
>> Am 29.03.2017 um 23:26 schrieb Ralph Sennhauser:
>> >> # create and link a tmpfile - then remove it
>> >> sudo rm -rf foo; sudo xfs_io -T -c "flink foo" . ; ls -l foo; sudo
>> >> rm foo
>> >
>> > next-20170328, obviously without your patch:
>> >
>> >   # xfs_io -T -c "flink foo" .
>> >   .: Not supported
>>
>> -T tells xfs_io to create a tmpfile but you have it disabled in UBIFS.
>
> Bash history says I booted the other partition than I flashed (uname
> just happened to match), the downside of the dual boot layout. :)
>
>   # rm -rf foo
>   # xfs_io -T -c "flink foo" .
>   # ls -l foo
>   -rw-------    1 root     root             0 Mar 30 02:00 foo
>   # rm foo
>   [  305.001436] UBIFS error (ubi0:0 pid 2493): ubifs_add_orphan: orphaned twice
>
> However, unlike with the overlay setup the filesystem can be mounted
> just fine without imediatly visible side effects.
>

Maybe try to rename instead of rm . that's how you reproduces with overlayfs.

>>
>> Anyway, can you please test the attached patch?
>> Amir was right, UBIFS misses a corner case in ubifs_link(). ;-\
>>
>> I think I understand also why we never noticed this in xfstests,
>> UBIFS prints only a non-fatal error while umounting the filesystem in
>> this case. But will test tomorrow in more detail, need some sleep now.
>>
>> diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
>> index 30825d882aa9..95e348a2da29 100644
>> --- a/fs/ubifs/dir.c
>> +++ b/fs/ubifs/dir.c
>> @@ -748,6 +748,9 @@ static int ubifs_link(struct dentry *old_dentry,
>> struct inode *dir, goto out_fname;
>>
>>       lock_2_inodes(dir, inode);
>> +     if (inode->i_nlink == 0)
>> +             ubifs_delete_orphan(c, inode->i_ino);
>> +
>>       inc_nlink(inode);
>>       ihold(inode);
>>       inode->i_ctime = ubifs_current_time(inode);
>>
>> Thanks,
>> //richard
>
> With this patch I'm no longer able to reproduce _this_ issue, however,
> rename no longer works either:
>
>   # mv /etc/config/wireless /etc/config/wireless.back
>   mv: can't rename '/etc/config/wireless': Invalid argument
>   # ls /etc/config/wireless
>   /etc/config/wireless
>   # rm /etc/config/wireless
>   # ls /etc/config/wireless
>   ls: /etc/config/wireless: No such file or directory
>
>
> Thanks
> Ralph

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-30  5:53                   ` Ralph Sennhauser
  2017-03-30  6:34                     ` Amir Goldstein
@ 2017-03-30  7:18                     ` Richard Weinberger
  1 sibling, 0 replies; 18+ messages in thread
From: Richard Weinberger @ 2017-03-30  7:18 UTC (permalink / raw)
  To: Ralph Sennhauser
  Cc: Amir Goldstein, Miklos Szeredi, linux-unionfs, linux-kernel,
	linux-mtd, regressions, Artem Bityutskiy, Adrian Hunter,
	David Oberhollenzer

Ralph,

Am 30.03.2017 um 07:53 schrieb Ralph Sennhauser:
> With this patch I'm no longer able to reproduce _this_ issue, however,
> rename no longer works either:
> 
>   # mv /etc/config/wireless /etc/config/wireless.back
>   mv: can't rename '/etc/config/wireless': Invalid argument
>   # ls /etc/config/wireless
>   /etc/config/wireless
>   # rm /etc/config/wireless
>   # ls /etc/config/wireless
>   ls: /etc/config/wireless: No such file or directory
> 

Please apply this one too:
http://lists.infradead.org/pipermail/linux-mtd/2017-March/072613.html

Thanks,
//richard

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs
  2017-03-30  6:56 AW: " Richard Weinberger
@ 2017-03-30  7:28 ` Ralph Sennhauser
  0 siblings, 0 replies; 18+ messages in thread
From: Ralph Sennhauser @ 2017-03-30  7:28 UTC (permalink / raw)
  To: Richard Weinberger
  Cc: Amir Goldstein, Miklos Szeredi, linux-unionfs, linux-kernel,
	linux-mtd, regressions, Artem Bityutskiy, Adrian Hunter,
	David Oberhollenzer

Hi Richard,

On Thu, 30 Mar 2017 08:56:57 +0200
Richard Weinberger <richard@nod.at> wrote:

>     
> Ralph,
> Please apply this
> fix:http://lists.infradead.org/pipermail/linux-mtd/2017-March/072613.html
> 

No longer able to observe an issue with this one on top. The two
patches seem all that was needed to get things back to a working state.

Do you want me to test anything else than linux-next?

Thanks
Ralph

> 
> Von meinem Samsung Gerät gesendet.
> 
> -------- Ursprüngliche Nachricht --------
> Von: Ralph Sennhauser <ralph.sennhauser@gmail.com> 
> Datum: 30.03.17  07:53  (GMT+01:00) 
> An: Richard Weinberger <richard@nod.at> 
> Cc: Amir Goldstein <amir73il@gmail.com>, Miklos Szeredi
> <miklos@szeredi.hu>, linux-unionfs@vger.kernel.org, linux-kernel
> <linux-kernel@vger.kernel.org>, linux-mtd@lists.infradead.org,
> regressions@leemhuis.info, Artem Bityutskiy <dedekind1@gmail.com>,
> Adrian Hunter <adrian.hunter@intel.com>, David Oberhollenzer
> <goliath@sigma-star.at> Betreff: Re: [REGRESSION 4.11] Commit
> d8514d8edb5b ("ovl: copy up regular\r&nbsp; file using O_TMPFILE") breaks ubifs 
> 
> Hi Richard,
> 
> On Thu, 30 Mar 2017 00:15:31 +0200
> Richard Weinberger <richard@nod.at> wrote:
> 
> > Ralph,
> > 
> > Am 29.03.2017 um 23:26 schrieb Ralph Sennhauser:  
> > >> # create and link a tmpfile - then remove it
> > >> sudo rm -rf foo; sudo xfs_io -T -c "flink foo" . ; ls -l foo;
> > >> sudo rm foo    
> > > 
> > > next-20170328, obviously without your patch:
> > > 
> > >   # xfs_io -T -c "flink foo" .
> > >   .: Not supported    
> > 
> > -T tells xfs_io to create a tmpfile but you have it disabled in
> > UBIFS.  
> 
> Bash history says I booted the other partition than I flashed (uname
> just happened to match), the downside of the dual boot layout. :)
> 
>   # rm -rf foo
>   # xfs_io -T -c "flink foo" .
>   # ls -l foo
>   -rw-------    1 root     root             0 Mar 30 02:00 foo
>   # rm foo
>   [  305.001436] UBIFS error (ubi0:0 pid 2493): ubifs_add_orphan:
> orphaned twice
> 
> However, unlike with the overlay setup the filesystem can be mounted
> just fine without imediatly visible side effects.
> 
> > 
> > Anyway, can you please test the attached patch?
> > Amir was right, UBIFS misses a corner case in ubifs_link(). ;-\
> > 
> > I think I understand also why we never noticed this in xfstests,
> > UBIFS prints only a non-fatal error while umounting the filesystem
> > in this case. But will test tomorrow in more detail, need some
> > sleep now.
> > 
> > diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
> > index 30825d882aa9..95e348a2da29 100644
> > --- a/fs/ubifs/dir.c
> > +++ b/fs/ubifs/dir.c
> > @@ -748,6 +748,9 @@ static int ubifs_link(struct dentry *old_dentry,
> > struct inode *dir, goto out_fname;
> > 
> >  	lock_2_inodes(dir, inode);
> > +	if (inode->i_nlink == 0)
> > +		ubifs_delete_orphan(c, inode->i_ino);
> > +
> >  	inc_nlink(inode);
> >  	ihold(inode);
> >  	inode->i_ctime = ubifs_current_time(inode);
> > 
> > Thanks,
> > //richard  
> 
> With this patch I'm no longer able to reproduce _this_ issue, however,
> rename no longer works either:
> 
>   # mv /etc/config/wireless /etc/config/wireless.back
>   mv: can't rename '/etc/config/wireless': Invalid argument
>   # ls /etc/config/wireless
>   /etc/config/wireless
>   # rm /etc/config/wireless
>   # ls /etc/config/wireless
>   ls: /etc/config/wireless: No such file or directory
> 
> 
> Thanks
> Ralph

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2017-03-30  7:28 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-28  8:01 [REGRESSION 4.11] Commit d8514d8edb5b ("ovl: copy up regular file using O_TMPFILE") breaks ubifs Ralph Sennhauser
2017-03-28  9:27 ` Amir Goldstein
2017-03-28 10:43   ` Amir Goldstein
2017-03-29 21:06     ` Richard Weinberger
2017-03-29 21:06       ` Richard Weinberger
2017-03-28 10:45   ` Ralph Sennhauser
2017-03-28 11:03     ` Amir Goldstein
2017-03-28 11:03       ` Amir Goldstein
2017-03-28 11:28       ` Ralph Sennhauser
2017-03-28 12:08         ` Amir Goldstein
2017-03-28 12:16           ` Ralph Sennhauser
2017-03-29 19:16             ` Amir Goldstein
2017-03-29 21:26               ` Ralph Sennhauser
2017-03-29 22:15                 ` Richard Weinberger
2017-03-30  5:53                   ` Ralph Sennhauser
2017-03-30  6:34                     ` Amir Goldstein
2017-03-30  7:18                     ` Richard Weinberger
2017-03-30  6:56 AW: " Richard Weinberger
2017-03-30  7:28 ` Ralph Sennhauser

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.