overlay: notrun if upper fs does not support d_type
authorXiong Zhou <xzhou@redhat.com>
Mon, 9 May 2016 00:55:52 +0000 (10:55 +1000)
committerDave Chinner <david@fromorbit.com>
Mon, 9 May 2016 00:55:52 +0000 (10:55 +1000)
Overlayfs whiteout can be visible if underlying upper fs does not
support d_type. Kernel commit
45aebea (ovl: Ensure upper filesystem supports d_type)
prevents mounting overlayfs like this since v4.6-rc1.

Check upper fs before mounting overlay, mark as not run if needs.

Signed-off-by: Xiong Zhou <xzhou@redhat.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
common/rc

index 8bec836805c639ba58b9912ffb20cdfda32355f9..946b354d6d6064974cb2851052d1e1c259bd61ac 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -273,6 +273,22 @@ _overlay_mount()
        local dir=$1
        local mnt=$2
        shift 2
+
+       local upper_fst=$(df --output=fstype $dir | tail -1)
+       case "$upper_fst" in
+       xfs)
+               if ! xfs_info $dir | grep -q "ftype=1" ; then
+                       _notrun "upper fs needs to support d_type"
+               fi
+               ;;
+       ext2|ext3|ext4)
+               if ! tune2fs -l $(df --output=source $dir | tail -1) | \
+                  grep -q filetype ; then
+                       _notrun "upper fs needs to support d_type"
+               fi
+               ;;
+       esac
+
        mkdir -p $dir/$OVERLAY_UPPER_DIR
        mkdir -p $dir/$OVERLAY_LOWER_DIR
        mkdir -p $dir/$OVERLAY_WORK_DIR