[linux] 02/02: aufs: Make fcntl(F_SETFL, ...) work (Closes: #627782)

debian-kernel at lists.debian.org debian-kernel at lists.debian.org
Sun May 8 23:23:07 UTC 2016


This is an automated email from the git hooks/post-receive script.

benh pushed a commit to branch jessie
in repository linux.

commit 705e7692d5f709c19316fc0aac26429eb89d1bcc
Author: Ben Hutchings <ben at decadent.org.uk>
Date:   Sun May 8 18:07:55 2016 +0100

    aufs: Make fcntl(F_SETFL, ...) work (Closes: #627782)
    
    - for aufs: new f_op->setfl() to support fcntl(F_SETFL)
    - aufs: implement new f_op->setfl()
    - fs: Fix ABI change for aufs F_SETFL fix
---
 debian/changelog                                   |  4 ++
 .../fs-fix-abi-change-for-aufs-f_setfl-fix.patch   | 71 +++++++++++++++++++
 .../all/aufs3/aufs-implement-new-f_op-setfl.patch  | 60 ++++++++++++++++
 debian/patches/features/all/aufs3/aufs3-base.patch | 63 ++++++++++++-----
 .../features/all/aufs3/aufs3-standalone.patch      | 82 ++++++++++------------
 debian/patches/series                              |  2 +
 6 files changed, 220 insertions(+), 62 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 0a74fd3..addf7cb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -319,6 +319,10 @@ linux (3.16.35-1) UNRELEASED; urgency=medium
   * stable-update: Rewrite stable-update.sh in Python
   * [s390x] PCI: Ignore zpci ABI changes; these functions are not used by
     modules
+  * aufs: Make fcntl(F_SETFL, ...) work (Closes: #627782):
+    - for aufs: new f_op->setfl() to support fcntl(F_SETFL)
+    - aufs: implement new f_op->setfl()
+    - fs: Fix ABI change for aufs F_SETFL fix
 
  -- Ben Hutchings <ben at decadent.org.uk>  Sat, 30 Apr 2016 22:07:22 +0200
 
diff --git a/debian/patches/debian/fs-fix-abi-change-for-aufs-f_setfl-fix.patch b/debian/patches/debian/fs-fix-abi-change-for-aufs-f_setfl-fix.patch
new file mode 100644
index 0000000..257ad25
--- /dev/null
+++ b/debian/patches/debian/fs-fix-abi-change-for-aufs-f_setfl-fix.patch
@@ -0,0 +1,71 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Sun, 08 May 2016 17:54:21 +0100
+Subject: fs: Fix ABI change for aufs F_SETFL fix
+Forwarded: not-needed
+Bug-Debian: https://bugs.debian.org/627782
+
+struct file_operations is not embedded in any larger structures so it
+is safe to extend it.  Move setfl to the end and hide it from
+genksyms.
+
+setfl() still needs to be able to tell whether the
+file_operations::setfl pointer is valid, though.  My first thought was
+to look at the file's superblock, but that won't work because
+e.g. dentries for character devices point to the superblock of the
+filesystem where the device node was found!  Instead, add a keyword to
+the version string of aufs and make do_setfl() check the name and
+version of the module that implements the file_operations.
+
+---
+--- a/fs/fcntl.c
++++ b/fs/fcntl.c
+@@ -59,7 +59,16 @@ int setfl(int fd, struct file * filp, un
+ 
+ 	if (filp->f_op->check_flags)
+ 		error = filp->f_op->check_flags(arg);
+-	if (!error && filp->f_op->setfl)
++
++	/*
++	 * bwh: setfl() is an extension to file_operations.  For ABI
++	 * compatibility, we can't assume the pointer is even valid.
++	 * Since only aufs will implement it, check that the file ops
++	 * are implemented by a version of aufs that does.  (Ugh.)
++	 */
++	if (!error && filp->f_op->owner &&
++	    !strcmp(filp->f_op->owner->name, "aufs") &&
++	    strstr(filp->f_op->owner->version, "+setfl"))
+ 		error = filp->f_op->setfl(filp, arg);
+ 	if (error)
+ 		return error;
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -1503,7 +1503,6 @@ struct file_operations {
+ 	ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
+ 	unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+ 	int (*check_flags)(int);
+-	int (*setfl)(struct file *, unsigned long);
+ 	int (*flock) (struct file *, int, struct file_lock *);
+ 	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
+ 	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+@@ -1511,6 +1510,10 @@ struct file_operations {
+ 	long (*fallocate)(struct file *file, int mode, loff_t offset,
+ 			  loff_t len);
+ 	int (*show_fdinfo)(struct seq_file *m, struct file *f);
++#ifndef __GENKSYMS__
++	/* bwh: For aufs only */
++	int (*setfl)(struct file *, unsigned long);
++#endif
+ };
+ 
+ struct inode_operations {
+--- a/include/uapi/linux/aufs_type.h
++++ b/include/uapi/linux/aufs_type.h
+@@ -39,7 +39,7 @@
+ 
+ #include <linux/limits.h>
+ 
+-#define AUFS_VERSION	"3.16-20140908"
++#define AUFS_VERSION	"3.16-20140908+setfl"
+ 
+ /* todo? move this to linux-2.6.19/include/magic.h */
+ #define AUFS_SUPER_MAGIC	('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
diff --git a/debian/patches/features/all/aufs3/aufs-implement-new-f_op-setfl.patch b/debian/patches/features/all/aufs3/aufs-implement-new-f_op-setfl.patch
new file mode 100644
index 0000000..8f68c06
--- /dev/null
+++ b/debian/patches/features/all/aufs3/aufs-implement-new-f_op-setfl.patch
@@ -0,0 +1,60 @@
+From: "J. R. Okajima" <hooanon05g at gmail.com>
+Date: Sun, 28 Feb 2016 07:08:26 +0900
+Subject: aufs: implement new f_op->setfl()
+Origin: https://github.com/sfjro/aufs3-linux/commit/e3fb13540a9cc40f106a13bfe89460f251b1ca30
+Bug-Debian: https://bugs.debian.org/627782
+
+Propagate the file flags from the virtual aufs's file object to the real
+fs's file object. The exception is FASYNC/O_ASYNC since f_op already has
+->fasync().
+
+Reported-by: Akihiro Suda <suda.kyoto at gmail.com>
+Signed-off-by: J. R. Okajima <hooanon05g at gmail.com>
+[bwh: Backported to aufs-3.16-20140908: open-code au_read_pre()]
+---
+ fs/aufs/f_op.c | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+--- a/fs/aufs/f_op.c
++++ b/fs/aufs/f_op.c
+@@ -766,6 +766,32 @@ out:
+ 	return err;
+ }
+ 
++static int aufs_setfl(struct file *file, unsigned long arg)
++{
++	int err;
++	struct file *h_file;
++	struct super_block *sb;
++
++	sb = file->f_dentry->d_sb;
++	si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW);
++	err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0);
++	if (err)
++		goto out;
++
++	di_read_unlock(file->f_dentry, AuLock_IR);
++	h_file = au_hf_top(file);
++	get_file(h_file);
++	fi_read_unlock(file);
++
++	arg |= vfsub_file_flags(file) & FASYNC; /* stop calling h_file->fasync */
++	err = setfl(/*unused fd*/-1, h_file, arg);
++	fput(h_file); /* instead of au_read_post() */
++
++out:
++	si_read_unlock(sb);
++	return err;
++}
++
+ /* ---------------------------------------------------------------------- */
+ 
+ /* no one supports this operation, currently */
+@@ -803,6 +829,7 @@ const struct file_operations aufs_file_f
+ 	/* .aio_fsync	= aufs_aio_fsync_nondir, */
+ 	.fasync		= aufs_fasync,
+ 	/* .sendpage	= aufs_sendpage, */
++	.setfl		= aufs_setfl,
+ 	.splice_write	= aufs_splice_write,
+ 	.splice_read	= aufs_splice_read,
+ #if 0
diff --git a/debian/patches/features/all/aufs3/aufs3-base.patch b/debian/patches/features/all/aufs3/aufs3-base.patch
index 333a088..9a7ac0e 100644
--- a/debian/patches/features/all/aufs3/aufs3-base.patch
+++ b/debian/patches/features/all/aufs3/aufs3-base.patch
@@ -8,8 +8,9 @@ Patch headers added by debian/patches/features/all/aufs3/gen-patch
 
 aufs3.16 base patch
 
-diff --git a/MAINTAINERS b/MAINTAINERS
-index c2066f4..f07a989 100644
+[bwh: Fold in changes from commit 565ce4aa6196 "for aufs: new f_op->setfl() to
+ support fcntl(F_SETFL)"]
+---
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
 @@ -1698,6 +1698,20 @@ F:	include/linux/audit.h
@@ -33,11 +34,9 @@ index c2066f4..f07a989 100644
  AUXILIARY DISPLAY DRIVERS
  M:	Miguel Ojeda Sandonis <miguel.ojeda.sandonis at gmail.com>
  W:	http://miguelojeda.es/auxdisplay.htm
-diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index 6cb1beb..30efd68 100644
 --- a/drivers/block/loop.c
 +++ b/drivers/block/loop.c
-@@ -692,6 +692,24 @@ static inline int is_loop_device(struct file *file)
+@@ -692,6 +692,24 @@ static inline int is_loop_device(struct
  	return i && S_ISBLK(i->i_mode) && MAJOR(i->i_rdev) == LOOP_MAJOR;
  }
  
@@ -62,11 +61,29 @@ index 6cb1beb..30efd68 100644
  /* loop sysfs attributes */
  
  static ssize_t loop_attr_show(struct device *dev, char *page,
-diff --git a/fs/inode.c b/fs/inode.c
-index 6eecb7f..b225c0f 100644
+--- a/fs/fcntl.c
++++ b/fs/fcntl.c
+@@ -28,7 +28,7 @@
+ 
+ #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
+ 
+-static int setfl(int fd, struct file * filp, unsigned long arg)
++int setfl(int fd, struct file * filp, unsigned long arg)
+ {
+ 	struct inode * inode = file_inode(filp);
+ 	int error = 0;
+@@ -58,6 +58,8 @@ static int setfl(int fd, struct file * f
+ 
+ 	if (filp->f_op->check_flags)
+ 		error = filp->f_op->check_flags(arg);
++	if (!error && filp->f_op->setfl)
++		error = filp->f_op->setfl(filp, arg);
+ 	if (error)
+ 		return error;
+ 
 --- a/fs/inode.c
 +++ b/fs/inode.c
-@@ -1496,7 +1496,7 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
+@@ -1496,7 +1496,7 @@ static int relatime_need_update(struct v
   * This does the actual work of updating an inodes time or version.  Must have
   * had called mnt_want_write() before calling this.
   */
@@ -75,11 +92,9 @@ index 6eecb7f..b225c0f 100644
  {
  	if (inode->i_op->update_time)
  		return inode->i_op->update_time(inode, time, flags);
-diff --git a/fs/splice.c b/fs/splice.c
-index f5cb9ba..9ba380c 100644
 --- a/fs/splice.c
 +++ b/fs/splice.c
-@@ -1114,8 +1114,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
+@@ -1125,8 +1125,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
  /*
   * Attempt to initiate a splice from pipe to file.
   */
@@ -90,7 +105,7 @@ index f5cb9ba..9ba380c 100644
  {
  	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
  				loff_t *, size_t, unsigned int);
-@@ -1131,9 +1131,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+@@ -1142,9 +1142,9 @@ static long do_splice_from(struct pipe_i
  /*
   * Attempt to initiate a splice from a file to a pipe.
   */
@@ -103,11 +118,25 @@ index f5cb9ba..9ba380c 100644
  {
  	ssize_t (*splice_read)(struct file *, loff_t *,
  			       struct pipe_inode_info *, size_t, unsigned int);
-diff --git a/include/linux/fs.h b/include/linux/fs.h
-index e11d60c..2f32b35 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
-@@ -2618,6 +2618,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *);
+@@ -1126,6 +1126,7 @@ extern void fasync_free(struct fasync_st
+ /* can be called from interrupts */
+ extern void kill_fasync(struct fasync_struct **, int, int);
+ 
++extern int setfl(int fd, struct file * filp, unsigned long arg);
+ extern int __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
+ extern int f_setown(struct file *filp, unsigned long arg, int force);
+ extern void f_delown(struct file *filp);
+@@ -1477,6 +1478,7 @@ struct file_operations {
+ 	ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
+ 	unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+ 	int (*check_flags)(int);
++	int (*setfl)(struct file *, unsigned long);
+ 	int (*flock) (struct file *, int, struct file_lock *);
+ 	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
+ 	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
+@@ -2620,6 +2622,7 @@ extern int inode_change_ok(const struct
  extern int inode_newsize_ok(const struct inode *, loff_t offset);
  extern void setattr_copy(struct inode *inode, const struct iattr *attr);
  
@@ -115,11 +144,9 @@ index e11d60c..2f32b35 100644
  extern int file_update_time(struct file *file);
  
  extern int generic_show_options(struct seq_file *m, struct dentry *root);
-diff --git a/include/linux/splice.h b/include/linux/splice.h
-index da2751d..2e0fca6 100644
 --- a/include/linux/splice.h
 +++ b/include/linux/splice.h
-@@ -83,4 +83,10 @@ extern void splice_shrink_spd(struct splice_pipe_desc *);
+@@ -83,4 +83,10 @@ extern void splice_shrink_spd(struct spl
  extern void spd_release_page(struct splice_pipe_desc *, unsigned int);
  
  extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
diff --git a/debian/patches/features/all/aufs3/aufs3-standalone.patch b/debian/patches/features/all/aufs3/aufs3-standalone.patch
index c8ef3d0..9310c0a 100644
--- a/debian/patches/features/all/aufs3/aufs3-standalone.patch
+++ b/debian/patches/features/all/aufs3/aufs3-standalone.patch
@@ -8,11 +8,21 @@ Patch headers added by debian/patches/features/all/aufs3/gen-patch
 
 aufs3.16 standalone patch
 
-diff --git a/fs/inode.c b/fs/inode.c
-index b225c0f..73259c8 100644
+[bwh: Add export of setfl() to support "aufs: implement new f_op->setfl()"]
+---
+--- a/fs/fcntl.c
++++ b/fs/fcntl.c
+@@ -80,6 +80,7 @@ int setfl(int fd, struct file * filp, un
+  out:
+ 	return error;
+ }
++EXPORT_SYMBOL_GPL(setfl);
+ 
+ static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
+                      int force)
 --- a/fs/inode.c
 +++ b/fs/inode.c
-@@ -57,6 +57,7 @@ static struct hlist_head *inode_hashtable __read_mostly;
+@@ -57,6 +57,7 @@ static struct hlist_head *inode_hashtabl
  static __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_hash_lock);
  
  __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_sb_list_lock);
@@ -20,7 +30,7 @@ index b225c0f..73259c8 100644
  
  /*
   * Empty aops. Can be used for the cases where the user does not
-@@ -1512,6 +1513,7 @@ int update_time(struct inode *inode, struct timespec *time, int flags)
+@@ -1512,6 +1513,7 @@ int update_time(struct inode *inode, str
  	mark_inode_dirty_sync(inode);
  	return 0;
  }
@@ -28,11 +38,9 @@ index b225c0f..73259c8 100644
  
  /**
   *	touch_atime	-	update the access time
-diff --git a/fs/namespace.c b/fs/namespace.c
-index 182bc41..c88e101 100644
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
-@@ -453,6 +453,7 @@ void __mnt_drop_write(struct vfsmount *mnt)
+@@ -453,6 +453,7 @@ void __mnt_drop_write(struct vfsmount *m
  	mnt_dec_writers(real_mount(mnt));
  	preempt_enable();
  }
@@ -40,7 +48,7 @@ index 182bc41..c88e101 100644
  
  /**
   * mnt_drop_write - give up write access to a mount
-@@ -1564,6 +1565,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
+@@ -1613,6 +1614,7 @@ int iterate_mounts(int (*f)(struct vfsmo
  	}
  	return 0;
  }
@@ -48,8 +56,6 @@ index 182bc41..c88e101 100644
  
  static void cleanup_group_ids(struct mount *mnt, struct mount *end)
  {
-diff --git a/fs/notify/group.c b/fs/notify/group.c
-index ad19959..adf290d 100644
 --- a/fs/notify/group.c
 +++ b/fs/notify/group.c
 @@ -22,6 +22,7 @@
@@ -60,7 +66,7 @@ index ad19959..adf290d 100644
  
  #include <linux/fsnotify_backend.h>
  #include "fsnotify.h"
-@@ -72,6 +73,7 @@ void fsnotify_get_group(struct fsnotify_group *group)
+@@ -72,6 +73,7 @@ void fsnotify_get_group(struct fsnotify_
  {
  	atomic_inc(&group->refcnt);
  }
@@ -68,7 +74,7 @@ index ad19959..adf290d 100644
  
  /*
   * Drop a reference to a group.  Free it if it's through.
-@@ -81,6 +83,7 @@ void fsnotify_put_group(struct fsnotify_group *group)
+@@ -81,6 +83,7 @@ void fsnotify_put_group(struct fsnotify_
  	if (atomic_dec_and_test(&group->refcnt))
  		fsnotify_final_destroy_group(group);
  }
@@ -76,7 +82,7 @@ index ad19959..adf290d 100644
  
  /*
   * Create a new fsnotify_group and hold a reference for the group returned.
-@@ -109,6 +112,7 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops)
+@@ -109,6 +112,7 @@ struct fsnotify_group *fsnotify_alloc_gr
  
  	return group;
  }
@@ -84,11 +90,9 @@ index ad19959..adf290d 100644
  
  int fsnotify_fasync(int fd, struct file *file, int on)
  {
-diff --git a/fs/notify/mark.c b/fs/notify/mark.c
-index d90deaa..60b4239 100644
 --- a/fs/notify/mark.c
 +++ b/fs/notify/mark.c
-@@ -109,6 +109,7 @@ void fsnotify_put_mark(struct fsnotify_mark *mark)
+@@ -109,6 +109,7 @@ void fsnotify_put_mark(struct fsnotify_m
  		mark->free_mark(mark);
  	}
  }
@@ -96,7 +100,7 @@ index d90deaa..60b4239 100644
  
  /*
   * Any time a mark is getting freed we end up here.
-@@ -191,6 +192,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark,
+@@ -191,6 +192,7 @@ void fsnotify_destroy_mark(struct fsnoti
  	fsnotify_destroy_mark_locked(mark, group);
  	mutex_unlock(&group->mark_mutex);
  }
@@ -112,7 +116,7 @@ index d90deaa..60b4239 100644
  
  int fsnotify_add_mark(struct fsnotify_mark *mark, struct fsnotify_group *group,
  		      struct inode *inode, struct vfsmount *mnt, int allow_dups)
-@@ -336,6 +339,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark,
+@@ -356,6 +359,7 @@ void fsnotify_init_mark(struct fsnotify_
  	atomic_set(&mark->refcnt, 1);
  	mark->free_mark = free_mark;
  }
@@ -120,11 +124,9 @@ index d90deaa..60b4239 100644
  
  static int fsnotify_mark_destroy(void *ignored)
  {
-diff --git a/fs/open.c b/fs/open.c
-index d6fd3ac..5e99d8b 100644
 --- a/fs/open.c
 +++ b/fs/open.c
-@@ -62,6 +62,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
+@@ -62,6 +62,7 @@ int do_truncate(struct dentry *dentry, l
  	mutex_unlock(&dentry->d_inode->i_mutex);
  	return ret;
  }
@@ -132,7 +134,7 @@ index d6fd3ac..5e99d8b 100644
  
  long vfs_truncate(struct path *path, loff_t length)
  {
-@@ -298,6 +299,7 @@ int do_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
+@@ -298,6 +299,7 @@ int do_fallocate(struct file *file, int
  	sb_end_write(inode->i_sb);
  	return ret;
  }
@@ -140,11 +142,9 @@ index d6fd3ac..5e99d8b 100644
  
  SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len)
  {
-diff --git a/fs/splice.c b/fs/splice.c
-index 9ba380c..3419932 100644
 --- a/fs/splice.c
 +++ b/fs/splice.c
-@@ -1127,6 +1127,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+@@ -1138,6 +1138,7 @@ long do_splice_from(struct pipe_inode_in
  
  	return splice_write(pipe, out, ppos, len, flags);
  }
@@ -152,7 +152,7 @@ index 9ba380c..3419932 100644
  
  /*
   * Attempt to initiate a splice from a file to a pipe.
-@@ -1153,6 +1154,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
+@@ -1164,6 +1165,7 @@ long do_splice_to(struct file *in, loff_
  
  	return splice_read(in, ppos, pipe, len, flags);
  }
@@ -160,11 +160,9 @@ index 9ba380c..3419932 100644
  
  /**
   * splice_direct_to_actor - splices data directly between two non-pipes
-diff --git a/security/commoncap.c b/security/commoncap.c
-index b9d613e..ba3b618 100644
 --- a/security/commoncap.c
 +++ b/security/commoncap.c
-@@ -988,9 +988,11 @@ int cap_mmap_addr(unsigned long addr)
+@@ -991,9 +991,11 @@ int cap_mmap_addr(unsigned long addr)
  	}
  	return ret;
  }
@@ -176,8 +174,6 @@ index b9d613e..ba3b618 100644
  	return 0;
  }
 +EXPORT_SYMBOL_GPL(cap_mmap_file);
-diff --git a/security/device_cgroup.c b/security/device_cgroup.c
-index d9d69e6..3f6f471 100644
 --- a/security/device_cgroup.c
 +++ b/security/device_cgroup.c
 @@ -7,6 +7,7 @@
@@ -188,7 +184,7 @@ index d9d69e6..3f6f471 100644
  #include <linux/list.h>
  #include <linux/uaccess.h>
  #include <linux/seq_file.h>
-@@ -849,6 +850,7 @@ int __devcgroup_inode_permission(struct inode *inode, int mask)
+@@ -849,6 +850,7 @@ int __devcgroup_inode_permission(struct
  	return __devcgroup_check_permission(type, imajor(inode), iminor(inode),
  			access);
  }
@@ -196,11 +192,9 @@ index d9d69e6..3f6f471 100644
  
  int devcgroup_inode_mknod(int mode, dev_t dev)
  {
-diff --git a/security/security.c b/security/security.c
-index 31614e9..b223a66 100644
 --- a/security/security.c
 +++ b/security/security.c
-@@ -407,6 +407,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
+@@ -407,6 +407,7 @@ int security_path_rmdir(struct path *dir
  		return 0;
  	return security_ops->path_rmdir(dir, dentry);
  }
@@ -208,7 +202,7 @@ index 31614e9..b223a66 100644
  
  int security_path_unlink(struct path *dir, struct dentry *dentry)
  {
-@@ -423,6 +424,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
+@@ -423,6 +424,7 @@ int security_path_symlink(struct path *d
  		return 0;
  	return security_ops->path_symlink(dir, dentry, old_name);
  }
@@ -216,7 +210,7 @@ index 31614e9..b223a66 100644
  
  int security_path_link(struct dentry *old_dentry, struct path *new_dir,
  		       struct dentry *new_dentry)
-@@ -431,6 +433,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
+@@ -431,6 +433,7 @@ int security_path_link(struct dentry *ol
  		return 0;
  	return security_ops->path_link(old_dentry, new_dir, new_dentry);
  }
@@ -224,7 +218,7 @@ index 31614e9..b223a66 100644
  
  int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
  			 struct path *new_dir, struct dentry *new_dentry,
-@@ -458,6 +461,7 @@ int security_path_truncate(struct path *path)
+@@ -458,6 +461,7 @@ int security_path_truncate(struct path *
  		return 0;
  	return security_ops->path_truncate(path);
  }
@@ -232,7 +226,7 @@ index 31614e9..b223a66 100644
  
  int security_path_chmod(struct path *path, umode_t mode)
  {
-@@ -465,6 +469,7 @@ int security_path_chmod(struct path *path, umode_t mode)
+@@ -465,6 +469,7 @@ int security_path_chmod(struct path *pat
  		return 0;
  	return security_ops->path_chmod(path, mode);
  }
@@ -240,7 +234,7 @@ index 31614e9..b223a66 100644
  
  int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
  {
-@@ -472,6 +477,7 @@ int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
+@@ -472,6 +477,7 @@ int security_path_chown(struct path *pat
  		return 0;
  	return security_ops->path_chown(path, uid, gid);
  }
@@ -248,7 +242,7 @@ index 31614e9..b223a66 100644
  
  int security_path_chroot(struct path *path)
  {
-@@ -557,6 +563,7 @@ int security_inode_readlink(struct dentry *dentry)
+@@ -557,6 +563,7 @@ int security_inode_readlink(struct dentr
  		return 0;
  	return security_ops->inode_readlink(dentry);
  }
@@ -256,7 +250,7 @@ index 31614e9..b223a66 100644
  
  int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd)
  {
-@@ -571,6 +578,7 @@ int security_inode_permission(struct inode *inode, int mask)
+@@ -571,6 +578,7 @@ int security_inode_permission(struct ino
  		return 0;
  	return security_ops->inode_permission(inode, mask);
  }
@@ -264,7 +258,7 @@ index 31614e9..b223a66 100644
  
  int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
  {
-@@ -693,6 +701,7 @@ int security_file_permission(struct file *file, int mask)
+@@ -693,6 +701,7 @@ int security_file_permission(struct file
  
  	return fsnotify_perm(file, mask);
  }
@@ -272,7 +266,7 @@ index 31614e9..b223a66 100644
  
  int security_file_alloc(struct file *file)
  {
-@@ -753,6 +762,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
+@@ -753,6 +762,7 @@ int security_mmap_file(struct file *file
  		return ret;
  	return ima_file_mmap(file, prot);
  }
diff --git a/debian/patches/series b/debian/patches/series
index 2cbf52a..066271e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -24,6 +24,7 @@ features/all/aufs3/aufs3-mmap.patch
 features/all/aufs3/aufs3-mmap-fix-races.patch
 features/all/aufs3/aufs3-standalone.patch
 features/all/aufs3/aufs3-add.patch
+features/all/aufs3/aufs-implement-new-f_op-setfl.patch
 # Debian-specific changes
 debian/aufs3-mark-as-staging.patch
 
@@ -661,3 +662,4 @@ debian/fs-fix-abi-change-in-3.16.35.patch
 bugfix/all/revert-ax25-add-link-layer-header-validation-functio.patch
 bugfix/all/revert-net-validate-variable-length-ll-headers.patch
 debian/bpf-fix-abi-change-in-3.16.35.patch
+debian/fs-fix-abi-change-for-aufs-f_setfl-fix.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux.git



More information about the Kernel-svn-changes mailing list