On Wed, Jun 17, 2020 at 8:57 AM Amir Goldstein <amir73il@xxxxxxxxx> wrote: > > Decoding a lower directory file handle to overlay path with cold > inode/dentry cache may go as follows: > > 1. Decode real lower file handle to lower dir path > 2. Check if lower dir is indexed (was copied up) > 3. If indexed, get the upper dir path from index > 4. Lookup upper dir path in overlay > 5. If overlay path found, verify that overlay lower is the lower dir > from step 1 > > On failure to verify step 5 above, user will get an ESTALE error and > a WARN_ON will be printed. > > A mismatch in step 5 could be a result of lower directory that was renamed > while overlay was offline, after that lower directory has been copied > up and indexed. > > This is a scripted reproducer based on xfstest overlay/052: > > # Create lower subdir > create_dirs > create_test_files $lower/lowertestdir/subdir > mount_dirs > # Copy up lower dir and encode lower subdir file handle > touch $SCRATCH_MNT/lowertestdir > test_file_handles $SCRATCH_MNT/lowertestdir/subdir -p -o $tmp.fhandle > # Rename lower dir offline > unmount_dirs > mv $lower/lowertestdir $lower/lowertestdir.new/ > mount_dirs > # Attempt to decode lower subdir file handle > test_file_handles $SCRATCH_MNT -p -i $tmp.fhandle > > Since this WARN_ON() can be triggered by user we need to relax it. > > Fixes: 4b91c30a5a19 ("ovl: lookup connected ancestor of dir in inode...") > Cc: <stable@xxxxxxxxxxxxxxx> # v4.16+ > Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> Applied, thanks. Miklos