Merge tag 'locks-v4.18-1' of git://git.kernel.org/pub/scm/linux/kernel/git/jlayton...
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 4 Jun 2018 20:05:02 +0000 (13:05 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 4 Jun 2018 20:05:02 +0000 (13:05 -0700)
Pull fasync fix from Jeff Layton:
 "Just a single fix for a deadlock in the fasync handling code that
  Kirill observed while testing.

  The fix is to change the fa_lock to be rwlock_t, and use a read lock
  in kill_fasync_rcu"

* tag 'locks-v4.18-1' of git://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux:
  fasync: Fix deadlock between task-context and interrupt-context kill_fasync()

1  2 
include/linux/fs.h

diff --combined include/linux/fs.h
index 5d306028f0a201f78572b3d807742cfa7b296813,d6c24b68a09263d3cff20cc9d6d1a9222201114f..7f86730b67a9804233e72fa43c72f550e95be03a
@@@ -94,7 -94,7 +94,7 @@@ typedef int (dio_iodone_t)(struct kioc
  
  /*
   * flags in file.f_mode.  Note that FMODE_READ and FMODE_WRITE must correspond
 - * to O_WRONLY and O_RDWR via the strange trick in __dentry_open()
 + * to O_WRONLY and O_RDWR via the strange trick in do_dentry_open()
   */
  
  /* file is open for reading */
@@@ -1250,7 -1250,7 +1250,7 @@@ static inline int locks_lock_file_wait(
  }
  
  struct fasync_struct {
-       spinlock_t              fa_lock;
+       rwlock_t                fa_lock;
        int                     magic;
        int                     fa_fd;
        struct fasync_struct    *fa_next; /* singly linked list */
@@@ -2570,7 -2570,7 +2570,7 @@@ extern bool is_bad_inode(struct inode *
  
  #ifdef CONFIG_BLOCK
  extern void check_disk_size_change(struct gendisk *disk,
 -                                 struct block_device *bdev);
 +              struct block_device *bdev, bool verbose);
  extern int revalidate_disk(struct gendisk *);
  extern int check_disk_change(struct block_device *);
  extern int __invalidate_device(struct block_device *, bool);