--- /dev/null
+From: Jeff Mahoney <jeffm@suse.com>
+Subject: [PATCH] vfs: restore ia_file for compatibility with external modules
+References: bnc#381259
+
+ patches.apparmor/fsetattr.diff eliminated ia_file and ATTR_FILE in favor
+ of providing a ->fsetattr call that used a file pointer. Until this
+ patch is accepted into mainline, this patch provides the backward
+ compatibility for external file system modules.
+
+Signed-off-by: Jeff Mahoney <jeffm@suse.com>
+---
+ fs/attr.c | 13 ++++++++++++-
+ include/linux/fs.h | 11 +++++++++++
+ 2 files changed, 23 insertions(+), 1 deletion(-)
+
+--- a/fs/attr.c
++++ b/fs/attr.c
+@@ -168,8 +168,19 @@ int fnotify_change(struct dentry *dentry
+ if (!error) {
+ if (file && file->f_op && file->f_op->fsetattr)
+ error = file->f_op->fsetattr(file, attr);
+- else
++ else {
++ /* External file system still expect to be
++ * passed a file pointer via ia_file and
++ * have it announced via ATTR_FILE. This
++ * just makes it so they don't need to
++ * change their API just for us. External
++ * callers will have set these themselves. */
++ if (file) {
++ attr->ia_valid |= ATTR_FILE;
++ attr->ia_file = file;
++ }
+ error = inode->i_op->setattr(dentry, attr);
++ }
+ }
+ } else {
+ error = inode_change_ok(inode, attr);
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -367,6 +367,17 @@ struct iattr {
+ struct timespec ia_atime;
+ struct timespec ia_mtime;
+ struct timespec ia_ctime;
++
++ /*
++ * Not an attribute, but an auxilary info for filesystems wanting to
++ * implement an ftruncate() like method. NOTE: filesystem should
++ * check for (ia_valid & ATTR_FILE), and not for (ia_file != NULL).
++ *
++ * NOTE: With patches.apparmor/fsetattr.diff applied, this is
++ * for compatibility with external file system modules only. There
++ * should not be any in-kernel users left.
++ */
++ struct file *ia_file;
+ };
+
+ /*