From 9db8d115d940d11747505f9ead8d75b107488680 Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Mon, 19 Nov 2018 17:31:13 +0900 Subject: [PATCH] overlayfs: rhel8 compat for the 4.18 version rhel8 is a 4.18 kernel but they've already backported some later fixes. Instead of relying on the kernel version, the changes removed some defines so we can check for the define presence to make the code more robust to kernel version wilderness instead Change-Id: I6cf5548a7b73a7394405daf850f715a1e20ab0b4 --- .../kernel/mcoverlayfs/linux-4.18.14/super.c | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/executer/kernel/mcoverlayfs/linux-4.18.14/super.c b/executer/kernel/mcoverlayfs/linux-4.18.14/super.c index 0aef1670..f9a5a0bc 100644 --- a/executer/kernel/mcoverlayfs/linux-4.18.14/super.c +++ b/executer/kernel/mcoverlayfs/linux-4.18.14/super.c @@ -75,6 +75,7 @@ static void ovl_dentry_release(struct dentry *dentry) } } +#ifdef D_REAL_UPPER static int ovl_check_append_only(struct inode *inode, int flag) { /* @@ -90,16 +91,23 @@ static int ovl_check_append_only(struct inode *inode, int flag) return 0; } +#endif static struct dentry *ovl_d_real(struct dentry *dentry, +#ifdef D_REAL_UPPER const struct inode *inode, unsigned int open_flags, unsigned int flags) +#else + const struct inode *inode) +#endif { struct dentry *real; +#ifdef D_REAL_UPPER int err; if (flags & D_REAL_UPPER) return ovl_dentry_upper(dentry); +#endif if (!d_is_reg(dentry)) { if (!inode || inode == d_inode(dentry)) @@ -107,19 +115,23 @@ static struct dentry *ovl_d_real(struct dentry *dentry, goto bug; } +#ifdef D_REAL_UPPER if (open_flags) { err = ovl_open_maybe_copy_up(dentry, open_flags); if (err) return ERR_PTR(err); } +#endif real = ovl_dentry_upper(dentry); if (real && (!inode || inode == d_inode(real))) { +#ifdef D_REAL_UPPER if (!inode) { err = ovl_check_append_only(d_inode(real), open_flags); if (err) return ERR_PTR(err); } +#endif return real; } @@ -128,7 +140,11 @@ static struct dentry *ovl_d_real(struct dentry *dentry, goto bug; /* Handle recursion */ +#ifdef D_REAL_UPPER real = d_real(real, inode, open_flags, 0); +#else + real = d_real(real, inode); +#endif if (!inode || inode == d_inode(real)) return real; @@ -1467,7 +1483,11 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) sb->s_op = &ovl_super_operations; sb->s_xattr = ovl_xattr_handlers; sb->s_fs_info = ofs; +#ifdef SB_NOREMOTELOCK sb->s_flags |= SB_POSIXACL | SB_NOREMOTELOCK; +#else + sb->s_flags |= SB_POSIXACL; +#endif err = -ENOMEM; root_dentry = d_make_root(ovl_new_inode(sb, S_IFDIR, 0));