|
@@ -303,3 +303,24 @@ void ovl_copy_up_end(struct dentry *dentry)
|
|
|
wake_up_locked(&ofs->copyup_wq);
|
|
|
spin_unlock(&ofs->copyup_wq.lock);
|
|
|
}
|
|
|
+
|
|
|
+int ovl_check_setxattr(struct dentry *dentry, struct dentry *upperdentry,
|
|
|
+ const char *name, const void *value, size_t size,
|
|
|
+ int xerr)
|
|
|
+{
|
|
|
+ int err;
|
|
|
+ struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
|
|
|
+
|
|
|
+ if (ofs->noxattr)
|
|
|
+ return xerr;
|
|
|
+
|
|
|
+ err = ovl_do_setxattr(upperdentry, name, value, size, 0);
|
|
|
+
|
|
|
+ if (err == -EOPNOTSUPP) {
|
|
|
+ pr_warn("overlayfs: cannot set %s xattr on upper\n", name);
|
|
|
+ ofs->noxattr = true;
|
|
|
+ return xerr;
|
|
|
+ }
|
|
|
+
|
|
|
+ return err;
|
|
|
+}
|