All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Nix <nix@esperi.org.uk>,
	NeilBrown <neilb@suse.com>, Shaohua Li <shli@fb.com>
Subject: [PATCH 4.12 076/196] md: fix deadlock between mddev_suspend() and md_write_start()
Date: Tue, 25 Jul 2017 12:21:15 -0700	[thread overview]
Message-ID: <20170725192050.398609677@linuxfoundation.org> (raw)
In-Reply-To: <20170725192046.422343510@linuxfoundation.org>

4.12-stable review patch.  If anyone has any objections, please let me know.

------------------

From: NeilBrown <neilb@suse.com>

commit cc27b0c78c79680d128dbac79de0d40556d041bb upstream.

If mddev_suspend() races with md_write_start() we can deadlock
with mddev_suspend() waiting for the request that is currently
in md_write_start() to complete the ->make_request() call,
and md_write_start() waiting for the metadata to be updated
to mark the array as 'dirty'.
As metadata updates done by md_check_recovery() only happen then
the mddev_lock() can be claimed, and as mddev_suspend() is often
called with the lock held, these threads wait indefinitely for each
other.

We fix this by having md_write_start() abort if mddev_suspend()
is happening, and ->make_request() aborts if md_write_start()
aborted.
md_make_request() can detect this abort, decrease the ->active_io
count, and wait for mddev_suspend().

Reported-by: Nix <nix@esperi.org.uk>
Fix: 68866e425be2(MD: no sync IO while suspended)
Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/md/faulty.c    |    5 +++--
 drivers/md/linear.c    |    7 ++++---
 drivers/md/md.c        |   22 +++++++++++++++++-----
 drivers/md/md.h        |    4 ++--
 drivers/md/multipath.c |    8 ++++----
 drivers/md/raid0.c     |    7 ++++---
 drivers/md/raid1.c     |   11 +++++++----
 drivers/md/raid10.c    |   10 ++++++----
 drivers/md/raid5.c     |   17 +++++++++--------
 9 files changed, 56 insertions(+), 35 deletions(-)

--- a/drivers/md/faulty.c
+++ b/drivers/md/faulty.c
@@ -170,7 +170,7 @@ static void add_sector(struct faulty_con
 		conf->nfaults = n+1;
 }
 
-static void faulty_make_request(struct mddev *mddev, struct bio *bio)
+static bool faulty_make_request(struct mddev *mddev, struct bio *bio)
 {
 	struct faulty_conf *conf = mddev->private;
 	int failit = 0;
@@ -182,7 +182,7 @@ static void faulty_make_request(struct m
 			 * just fail immediately
 			 */
 			bio_io_error(bio);
-			return;
+			return true;
 		}
 
 		if (check_sector(conf, bio->bi_iter.bi_sector,
@@ -224,6 +224,7 @@ static void faulty_make_request(struct m
 		bio->bi_bdev = conf->rdev->bdev;
 
 	generic_make_request(bio);
+	return true;
 }
 
 static void faulty_status(struct seq_file *seq, struct mddev *mddev)
--- a/drivers/md/linear.c
+++ b/drivers/md/linear.c
@@ -245,7 +245,7 @@ static void linear_free(struct mddev *md
 	kfree(conf);
 }
 
-static void linear_make_request(struct mddev *mddev, struct bio *bio)
+static bool linear_make_request(struct mddev *mddev, struct bio *bio)
 {
 	char b[BDEVNAME_SIZE];
 	struct dev_info *tmp_dev;
@@ -254,7 +254,7 @@ static void linear_make_request(struct m
 
 	if (unlikely(bio->bi_opf & REQ_PREFLUSH)) {
 		md_flush_request(mddev, bio);
-		return;
+		return true;
 	}
 
 	tmp_dev = which_dev(mddev, bio_sector);
@@ -292,7 +292,7 @@ static void linear_make_request(struct m
 		mddev_check_write_zeroes(mddev, bio);
 		generic_make_request(bio);
 	}
-	return;
+	return true;
 
 out_of_bounds:
 	pr_err("md/linear:%s: make_request: Sector %llu out of bounds on dev %s: %llu sectors, offset %llu\n",
@@ -302,6 +302,7 @@ out_of_bounds:
 	       (unsigned long long)tmp_dev->rdev->sectors,
 	       (unsigned long long)start_sector);
 	bio_io_error(bio);
+	return true;
 }
 
 static void linear_status (struct seq_file *seq, struct mddev *mddev)
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -277,7 +277,7 @@ static blk_qc_t md_make_request(struct r
 		bio_endio(bio);
 		return BLK_QC_T_NONE;
 	}
-	smp_rmb(); /* Ensure implications of  'active' are visible */
+check_suspended:
 	rcu_read_lock();
 	if (mddev->suspended) {
 		DEFINE_WAIT(__wait);
@@ -302,7 +302,11 @@ static blk_qc_t md_make_request(struct r
 	sectors = bio_sectors(bio);
 	/* bio could be mergeable after passing to underlayer */
 	bio->bi_opf &= ~REQ_NOMERGE;
-	mddev->pers->make_request(mddev, bio);
+	if (!mddev->pers->make_request(mddev, bio)) {
+		atomic_dec(&mddev->active_io);
+		wake_up(&mddev->sb_wait);
+		goto check_suspended;
+	}
 
 	cpu = part_stat_lock();
 	part_stat_inc(cpu, &mddev->gendisk->part0, ios[rw]);
@@ -327,6 +331,7 @@ void mddev_suspend(struct mddev *mddev)
 	if (mddev->suspended++)
 		return;
 	synchronize_rcu();
+	wake_up(&mddev->sb_wait);
 	wait_event(mddev->sb_wait, atomic_read(&mddev->active_io) == 0);
 	mddev->pers->quiesce(mddev, 1);
 
@@ -7950,12 +7955,14 @@ EXPORT_SYMBOL(md_done_sync);
  * If we need to update some array metadata (e.g. 'active' flag
  * in superblock) before writing, schedule a superblock update
  * and wait for it to complete.
+ * A return value of 'false' means that the write wasn't recorded
+ * and cannot proceed as the array is being suspend.
  */
-void md_write_start(struct mddev *mddev, struct bio *bi)
+bool md_write_start(struct mddev *mddev, struct bio *bi)
 {
 	int did_change = 0;
 	if (bio_data_dir(bi) != WRITE)
-		return;
+		return true;
 
 	BUG_ON(mddev->ro == 1);
 	if (mddev->ro == 2) {
@@ -7987,7 +7994,12 @@ void md_write_start(struct mddev *mddev,
 	if (did_change)
 		sysfs_notify_dirent_safe(mddev->sysfs_state);
 	wait_event(mddev->sb_wait,
-		   !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags));
+		   !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags) && !mddev->suspended);
+	if (test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags)) {
+		percpu_ref_put(&mddev->writes_pending);
+		return false;
+	}
+	return true;
 }
 EXPORT_SYMBOL(md_write_start);
 
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
@@ -510,7 +510,7 @@ struct md_personality
 	int level;
 	struct list_head list;
 	struct module *owner;
-	void (*make_request)(struct mddev *mddev, struct bio *bio);
+	bool (*make_request)(struct mddev *mddev, struct bio *bio);
 	int (*run)(struct mddev *mddev);
 	void (*free)(struct mddev *mddev, void *priv);
 	void (*status)(struct seq_file *seq, struct mddev *mddev);
@@ -649,7 +649,7 @@ extern void md_wakeup_thread(struct md_t
 extern void md_check_recovery(struct mddev *mddev);
 extern void md_reap_sync_thread(struct mddev *mddev);
 extern int mddev_init_writes_pending(struct mddev *mddev);
-extern void md_write_start(struct mddev *mddev, struct bio *bi);
+extern bool md_write_start(struct mddev *mddev, struct bio *bi);
 extern void md_write_inc(struct mddev *mddev, struct bio *bi);
 extern void md_write_end(struct mddev *mddev);
 extern void md_done_sync(struct mddev *mddev, int blocks, int ok);
--- a/drivers/md/multipath.c
+++ b/drivers/md/multipath.c
@@ -106,7 +106,7 @@ static void multipath_end_request(struct
 	rdev_dec_pending(rdev, conf->mddev);
 }
 
-static void multipath_make_request(struct mddev *mddev, struct bio * bio)
+static bool multipath_make_request(struct mddev *mddev, struct bio * bio)
 {
 	struct mpconf *conf = mddev->private;
 	struct multipath_bh * mp_bh;
@@ -114,7 +114,7 @@ static void multipath_make_request(struc
 
 	if (unlikely(bio->bi_opf & REQ_PREFLUSH)) {
 		md_flush_request(mddev, bio);
-		return;
+		return true;
 	}
 
 	mp_bh = mempool_alloc(conf->pool, GFP_NOIO);
@@ -126,7 +126,7 @@ static void multipath_make_request(struc
 	if (mp_bh->path < 0) {
 		bio_io_error(bio);
 		mempool_free(mp_bh, conf->pool);
-		return;
+		return true;
 	}
 	multipath = conf->multipaths + mp_bh->path;
 
@@ -141,7 +141,7 @@ static void multipath_make_request(struc
 	mddev_check_writesame(mddev, &mp_bh->bio);
 	mddev_check_write_zeroes(mddev, &mp_bh->bio);
 	generic_make_request(&mp_bh->bio);
-	return;
+	return true;
 }
 
 static void multipath_status(struct seq_file *seq, struct mddev *mddev)
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -548,7 +548,7 @@ static void raid0_handle_discard(struct
 	bio_endio(bio);
 }
 
-static void raid0_make_request(struct mddev *mddev, struct bio *bio)
+static bool raid0_make_request(struct mddev *mddev, struct bio *bio)
 {
 	struct strip_zone *zone;
 	struct md_rdev *tmp_dev;
@@ -559,12 +559,12 @@ static void raid0_make_request(struct md
 
 	if (unlikely(bio->bi_opf & REQ_PREFLUSH)) {
 		md_flush_request(mddev, bio);
-		return;
+		return true;
 	}
 
 	if (unlikely((bio_op(bio) == REQ_OP_DISCARD))) {
 		raid0_handle_discard(mddev, bio);
-		return;
+		return true;
 	}
 
 	bio_sector = bio->bi_iter.bi_sector;
@@ -599,6 +599,7 @@ static void raid0_make_request(struct md
 	mddev_check_writesame(mddev, bio);
 	mddev_check_write_zeroes(mddev, bio);
 	generic_make_request(bio);
+	return true;
 }
 
 static void raid0_status(struct seq_file *seq, struct mddev *mddev)
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -1321,7 +1321,6 @@ static void raid1_write_request(struct m
 	 * Continue immediately if no resync is active currently.
 	 */
 
-	md_write_start(mddev, bio); /* wait on superblock update early */
 
 	if ((bio_end_sector(bio) > mddev->suspend_lo &&
 	    bio->bi_iter.bi_sector < mddev->suspend_hi) ||
@@ -1553,13 +1552,13 @@ static void raid1_write_request(struct m
 	wake_up(&conf->wait_barrier);
 }
 
-static void raid1_make_request(struct mddev *mddev, struct bio *bio)
+static bool raid1_make_request(struct mddev *mddev, struct bio *bio)
 {
 	sector_t sectors;
 
 	if (unlikely(bio->bi_opf & REQ_PREFLUSH)) {
 		md_flush_request(mddev, bio);
-		return;
+		return true;
 	}
 
 	/*
@@ -1574,8 +1573,12 @@ static void raid1_make_request(struct md
 
 	if (bio_data_dir(bio) == READ)
 		raid1_read_request(mddev, bio, sectors, NULL);
-	else
+	else {
+		if (!md_write_start(mddev,bio))
+			return false;
 		raid1_write_request(mddev, bio, sectors);
+	}
+	return true;
 }
 
 static void raid1_status(struct seq_file *seq, struct mddev *mddev)
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -1303,8 +1303,6 @@ static void raid10_write_request(struct
 	sector_t sectors;
 	int max_sectors;
 
-	md_write_start(mddev, bio);
-
 	/*
 	 * Register the new request and wait if the reconstruction
 	 * thread has put up a bar for new requests.
@@ -1525,7 +1523,7 @@ static void __make_request(struct mddev
 		raid10_write_request(mddev, bio, r10_bio);
 }
 
-static void raid10_make_request(struct mddev *mddev, struct bio *bio)
+static bool raid10_make_request(struct mddev *mddev, struct bio *bio)
 {
 	struct r10conf *conf = mddev->private;
 	sector_t chunk_mask = (conf->geo.chunk_mask & conf->prev.chunk_mask);
@@ -1534,9 +1532,12 @@ static void raid10_make_request(struct m
 
 	if (unlikely(bio->bi_opf & REQ_PREFLUSH)) {
 		md_flush_request(mddev, bio);
-		return;
+		return true;
 	}
 
+	if (!md_write_start(mddev, bio))
+		return false;
+
 	/*
 	 * If this request crosses a chunk boundary, we need to split
 	 * it.
@@ -1553,6 +1554,7 @@ static void raid10_make_request(struct m
 
 	/* In case raid10d snuck in to freeze_array */
 	wake_up(&conf->wait_barrier);
+	return true;
 }
 
 static void raid10_status(struct seq_file *seq, struct mddev *mddev)
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -5479,7 +5479,6 @@ static void make_discard_request(struct
 	last_sector = bi->bi_iter.bi_sector + (bi->bi_iter.bi_size>>9);
 
 	bi->bi_next = NULL;
-	md_write_start(mddev, bi);
 
 	stripe_sectors = conf->chunk_sectors *
 		(conf->raid_disks - conf->max_degraded);
@@ -5549,11 +5548,10 @@ static void make_discard_request(struct
 		release_stripe_plug(mddev, sh);
 	}
 
-	md_write_end(mddev);
 	bio_endio(bi);
 }
 
-static void raid5_make_request(struct mddev *mddev, struct bio * bi)
+static bool raid5_make_request(struct mddev *mddev, struct bio * bi)
 {
 	struct r5conf *conf = mddev->private;
 	int dd_idx;
@@ -5569,10 +5567,10 @@ static void raid5_make_request(struct md
 		int ret = r5l_handle_flush_request(conf->log, bi);
 
 		if (ret == 0)
-			return;
+			return true;
 		if (ret == -ENODEV) {
 			md_flush_request(mddev, bi);
-			return;
+			return true;
 		}
 		/* ret == -EAGAIN, fallback */
 		/*
@@ -5582,6 +5580,8 @@ static void raid5_make_request(struct md
 		do_flush = bi->bi_opf & REQ_PREFLUSH;
 	}
 
+	if (!md_write_start(mddev, bi))
+		return false;
 	/*
 	 * If array is degraded, better not do chunk aligned read because
 	 * later we might have to read it again in order to reconstruct
@@ -5591,18 +5591,18 @@ static void raid5_make_request(struct md
 	    mddev->reshape_position == MaxSector) {
 		bi = chunk_aligned_read(mddev, bi);
 		if (!bi)
-			return;
+			return true;
 	}
 
 	if (unlikely(bio_op(bi) == REQ_OP_DISCARD)) {
 		make_discard_request(mddev, bi);
-		return;
+		md_write_end(mddev);
+		return true;
 	}
 
 	logical_sector = bi->bi_iter.bi_sector & ~((sector_t)STRIPE_SECTORS-1);
 	last_sector = bio_end_sector(bi);
 	bi->bi_next = NULL;
-	md_write_start(mddev, bi);
 
 	prepare_to_wait(&conf->wait_for_overlap, &w, TASK_UNINTERRUPTIBLE);
 	for (;logical_sector < last_sector; logical_sector += STRIPE_SECTORS) {
@@ -5743,6 +5743,7 @@ static void raid5_make_request(struct md
 	if (rw == WRITE)
 		md_write_end(mddev);
 	bio_endio(bi);
+	return true;
 }
 
 static sector_t raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks);

  parent reply	other threads:[~2017-07-25 19:57 UTC|newest]

Thread overview: 192+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-25 19:19 [PATCH 4.12 000/196] 4.12.4-stable review Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 001/196] disable new gcc-7.1.1 warnings for now Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 002/196] [media] ir-core: fix gcc-7 warning on bool arithmetic Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 003/196] [media] s5p-jpeg: dont return a random width/height Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 004/196] thermal: max77620: fix device-node reference imbalance Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 005/196] thermal: cpu_cooling: Avoid accessing potentially freed structures Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 006/196] ath9k: fix tx99 use after free Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 007/196] ath9k: fix tx99 bus error Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 008/196] ath9k: fix an invalid pointer dereference in ath9k_rng_stop() Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 009/196] iwlwifi: mvm: fix the recovery flow while connecting Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 010/196] NFC: fix broken device allocation Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 011/196] NFC: nfcmrvl_uart: add missing tty-device sanity check Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 012/196] NFC: nfcmrvl: do not use device-managed resources Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 013/196] NFC: nfcmrvl: use nfc-device for firmware download Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 014/196] NFC: nfcmrvl: fix firmware-management initialisation Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 015/196] nfc: Ensure presence of required attributes in the activate_target handler Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 016/196] nfc: Fix the sockaddr length sanitization in llcp_sock_connect Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 017/196] NFC: Add sockaddr length checks before accessing sa_family in bind handlers Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 018/196] perf intel-pt: Move decoder error setting into one condition Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 019/196] perf intel-pt: Improve sample timestamp Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 020/196] perf intel-pt: Fix missing stack clear Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 021/196] perf intel-pt: Ensure IP is zero when state is INTEL_PT_STATE_NO_IP Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 022/196] perf intel-pt: Fix last_ip usage Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 023/196] perf intel-pt: Ensure never to set last_ip when packet count is zero Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 024/196] perf intel-pt: Use FUP always when scanning for an IP Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 025/196] perf intel-pt: Clear FUP flag on error Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 026/196] Bluetooth: use constant time memory comparison for secret values Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 027/196] wlcore: fix 64K page support Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 028/196] pstore: Dont warn if data is uncompressed and type is not PSTORE_TYPE_DMESG Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 029/196] mwifiex: fixup error cases in mwifiex_add_virtual_intf() Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 030/196] Btrfs: fix invalid extent maps due to hole punching Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 031/196] btrfs: Dont clear SGID when inheriting ACLs Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 032/196] Btrfs: incremental send, fix invalid memory access Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 033/196] igb: Explicitly select page 0 at initialization Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 034/196] spi: atmel: fix corrupted data issue on SAM9 family SoCs Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 035/196] ASoC: zx-i2s: flip I2S master/slave mode Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 036/196] ASoC: compress: Derive substream from stream based on direction Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 037/196] ASoC: atmel: tse850: fix off-by-one in the "ANA" enumeration count Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 038/196] PM / Domains: Fix unsafe iteration over modified list of device links Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 039/196] PM / Domains: Fix unsafe iteration over modified list of domain providers Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 040/196] PM / Domains: Fix unsafe iteration over modified list of domains Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 041/196] scsi: ses: do not add a device to an enclosure if enclosure_add_links() fails Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 042/196] scsi: virtio_scsi: let host do exception handling Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 043/196] scsi: qla2xxx: Allow ABTS, PURX, RIDA on ATIOQ for ISP83XX/27XX Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 044/196] scsi: Add STARGET_CREATED_REMOVE state to scsi_target_state Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 045/196] scsi: Avoid that scsi_exit_rq() triggers a use-after-free Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 046/196] iscsi-target: Add login_keys_workaround attribute for non RFC initiators Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 047/196] xen/scsiback: Fix a TMR related use-after-free Greg Kroah-Hartman
2017-07-25 19:20   ` Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 048/196] scsi: virtio_scsi: always read VPD pages for multiqueue too Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 049/196] powerpc/mm/radix: Only add X for pages overlapping kernel text Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 050/196] powerpc/pseries: Fix passing of pp0 in updatepp() and updateboltedpp() Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 051/196] powerpc/mm/radix: Fix execute permissions for interrupt_vectors Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 052/196] powerpc/64: Fix atomic64_inc_not_zero() to return an int Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 053/196] powerpc: Fix emulation of mcrf in emulate_step() Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 054/196] powerpc: Fix emulation of mfocrf " Greg Kroah-Hartman
2017-07-25 19:20   ` Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 055/196] powerpc/asm: Mark cr0 as clobbered in mftb() Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 056/196] powerpc/mm/radix: Properly clear process table entry Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 057/196] powerpc/perf: Fix SDAR_MODE value for continous sampling on Power9 Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 058/196] xen/x86: fix cpu hotplug Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 059/196] PCI: vmd: Move SRCU cleanup after bus, child device removal Greg Kroah-Hartman
2017-07-25 19:20 ` [PATCH 4.12 060/196] PCI: Work around poweroff & suspend-to-RAM issue on Macbook Pro 11 Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 061/196] PCI: rockchip: Use normal register bank for config accessors Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 062/196] PCI/PM: Restore the status of PCI devices across hibernation Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 063/196] PCI/MSI: Ignore affinity if pre/post vector count is more than min_vecs Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 064/196] usb: xhci: fix spinlock recursion for USB2 test mode Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 065/196] xhci: fix memleak in xhci_run() Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 066/196] xhci: fix 20000ms port resume timeout Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 067/196] xhci: Fix NULL pointer dereference when cleaning up streams for removed host Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 068/196] xhci: Bad Ethernet performance plugged in ASM1042A host Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 069/196] [media] mxl111sf: Fix driver to use heap allocate buffers for USB messages Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 070/196] usb: storage: return on error to avoid a null pointer dereference Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 071/196] USB: cdc-acm: add device-id for quirky printer Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 072/196] usb: renesas_usbhs: fix usbhsc_resume() for !USBHSF_RUNTIME_PWCTRL Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 073/196] usb: renesas_usbhs: gadget: disable all eps when the driver stops Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 074/196] HID: multitouch: do not blindly set EV_KEY or EV_ABS bits Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 075/196] md: dont use flush_signals in userspace processes Greg Kroah-Hartman
2017-07-25 19:21 ` Greg Kroah-Hartman [this message]
2017-07-25 19:21 ` [PATCH 4.12 078/196] [media] cx88: Fix regression in initial video standard setting Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 080/196] tools/testing/nvdimm: fix nfit_test buffer overflow Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 081/196] libnvdimm, btt: fix btt_rw_page not returning errors Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 082/196] libnvdimm: fix the clear-error check in nsio_rw_bytes Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 083/196] libnvdimm: fix badblock range handling of ARS range Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 084/196] ext2: Dont clear SGID when inheriting ACLs Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 085/196] dm raid: stop using BUG() in __rdev_sectors() Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 086/196] Raid5 should update rdev->sectors after reshape Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 087/196] s390/syscalls: Fix out of bounds arguments access Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 088/196] drm/amdgpu/gfx8: drop per-APU CU limits Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 097/196] drm/etnaviv: Expose our reservation object when exporting a dmabuf Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 098/196] ipmi: use rcu lock around call to intf->handlers->sender() Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 099/196] ipmi:ssif: Add missing unlock in error branch Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 100/196] xfs: Dont clear SGID when inheriting ACLs Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 101/196] CIFS: Reconnect expired SMB sessions Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 102/196] f2fs: load inodes flag from disk Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 103/196] f2fs: wake up all waiters in f2fs_submit_discard_endio Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 104/196] f2fs: sanity check checkpoint segno and blkoff Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 105/196] f2fs: try to freeze in gc and discard threads Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 106/196] f2fs: Do not issue small discards in LFS mode Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 107/196] f2fs: sanity check size of nat and sit cache Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 108/196] f2fs: use spin_{,un}lock_irq{save,restore} Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 109/196] f2fs: Dont clear SGID when inheriting ACLs Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 110/196] serial: st-asc: Potential error pointer dereference Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 111/196] serial: sh-sci: Uninitialized variables in sysfs files Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 112/196] ovl: mark parent impure on ovl_link() Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 113/196] ovl: fix random return value on mount Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 114/196] drm/amd/powerplay: fix memory leak in cz_hwmgr backend Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 116/196] vfio: Fix group release deadlock Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 117/196] vfio: New external user group/file match Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 118/196] vfio: Remove unnecessary uses of vfio_container.group_lock Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 119/196] nvme-rdma: remove race conditions from IB signalling Greg Kroah-Hartman
2017-07-25 19:21 ` [PATCH 4.12 120/196] ftrace: Fix uninitialized variable in match_records() Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 121/196] iommu/arm-smmu: Plumb in new ACPI identifiers Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 122/196] drm/i915/gvt: Fix inconsistent locks holding sequence Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 123/196] drm/atomic: Add missing drm_atomic_state_clear to atomic_remove_fb Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 124/196] MIPS: Fix mips_atomic_set() retry condition Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 125/196] MIPS: Fix mips_atomic_set() with EVA Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 126/196] MIPS: Negate error syscall return in trace Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 127/196] mtd: nand: tango: Fix incorrect use of SEQIN command Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 128/196] ubifs: Correctly evict xattr inodes Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 129/196] ubifs: Dont leak kernel memory to the MTD Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 130/196] ubifs: Dont encrypt special files on creation Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 131/196] ubifs: Set double hash cookie also for RENAME_EXCHANGE Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 132/196] ACPI / EC: Drop EC noirq hooks to fix a regression Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 133/196] Revert "ACPI / EC: Enable event freeze mode..." " Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 134/196] x86/acpi: Prevent out of bound access caused by broken ACPI tables Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 135/196] x86/ioapic: Pass the correct data to unmask_ioapic_irq() Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 136/196] MIPS: Fix MIPS I ISA /proc/cpuinfo reporting Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 137/196] MIPS: Save static registers before sysmips Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 138/196] MIPS: Actually decode JALX in `__compute_return_epc_for_insn Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 139/196] MIPS: Fix unaligned PC interpretation in `compute_return_epc Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 140/196] MIPS: math-emu: Prevent wrong ISA mode instruction emulation Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 141/196] MIPS: Send SIGILL for BPOSGE32 in `__compute_return_epc_for_insn Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 142/196] MIPS: Rename `sigill_r6 to `sigill_r2r6 " Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 143/196] MIPS: Send SIGILL for linked branches " Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 144/196] MIPS: Send SIGILL for R6 " Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 145/196] MIPS: Fix a typo: s/preset/present/ in r2-to-r6 emulation error message Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 146/196] Input: i8042 - fix crash at boot time Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 147/196] IB/iser: Fix connection teardown race condition Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 148/196] IB/core: Namespace is mandatory input for address resolution Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 149/196] sunrpc: use constant time memory comparison for mac Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 150/196] net/sunrpc/xprt_sock: fix regression in connection error reporting Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 151/196] NFS: Fix initialization of nfs_page_array->npages Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 152/196] PNFS fix EACCESS on commit to DS handling Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 153/196] NFS: only invalidate dentrys that are clearly invalid Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 154/196] udf: Fix races with i_size changes during readpage Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 155/196] udf: Fix deadlock between writeback and udf_setsize() Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 156/196] target: Fix COMPARE_AND_WRITE caw_sem leak during se_cmd quiesce Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 157/196] iser-target: Avoid isert_conn->cm_id dereference in isert_login_recv_done Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 159/196] perf/core: Fix scheduling regression of pinned groups Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 160/196] Revert "perf/core: Drop kernel samples even though :u is specified" Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 161/196] staging: rtl8188eu: add TL-WN722N v2 support Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 163/196] staging: sm750fb: avoid conflicting vesafb Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 164/196] staging: lustre: ko2iblnd: check copy_from_iter/copy_to_iter return code Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 165/196] ceph: fix race in concurrent readdir Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 166/196] RDMA/uverbs: Fix the check for port number Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 167/196] RDMA/core: Initialize port_num in qp_attr Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 168/196] drm/mst: Fix error handling during MST sideband message reception Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 169/196] drm/mst: Avoid dereferencing a NULL mstb in drm_dp_mst_handle_up_req() Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 170/196] drm/mst: Avoid processing partially received up/down message transactions Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 171/196] drm/i915: Make DP-MST connector info work Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 172/196] mlx5: Avoid that mlx5_ib_sg_to_klms() overflows the klms[] array Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 173/196] hfsplus: Dont clear SGID when inheriting ACLs Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 174/196] vtime, sched/cputime: Remove vtime_account_user() Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 175/196] sched/cputime: Always set tsk->vtime_snap_whence after accounting vtime Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 176/196] sched/cputime: Rename vtime fields Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 177/196] sched/cputime: Move the vtime task fields to their own struct Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 178/196] sched/cputime: Accumulate vtime on top of nsec clocksource Greg Kroah-Hartman
2017-07-26 14:21   ` Mel Gorman
2017-07-26 19:55     ` Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 179/196] sched/fair: Fix load_balance() affinity redo path Greg Kroah-Hartman
2017-07-25 19:22 ` [PATCH 4.12 180/196] percpu_counter: Rename __percpu_counter_add to percpu_counter_add_batch Greg Kroah-Hartman
2017-07-25 19:22   ` Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 181/196] writeback: rework wb_[dec|inc]_stat family of functions Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 182/196] kernel/fork.c: virtually mapped stacks: do not disable interrupts Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 183/196] acpi/nfit: Fix memory corruption/Unregister mce decoder on failure Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 184/196] vmbus: re-enable channel tasklet Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 185/196] cpufreq: intel_pstate: Correct the busy calculation for KNL Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 186/196] spmi: Include OF based modalias in device uevent Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 187/196] reiserfs: Dont clear SGID when inheriting ACLs Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 188/196] device-dax: fix sysfs duplicate warnings Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 189/196] drm/imx: parallel-display: Accept drm_of_find_panel_or_bridge failure Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 190/196] PM / Domains: defer dev_pm_domain_set() until genpd->attach_dev succeeds if present Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 191/196] tracing: Fix kmemleak in instance_rmdir Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 192/196] drm/i915/fbdev: Check for existence of ifbdev->vma before operations Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 193/196] drm/i915: Hold RPM wakelock while initializing OA buffer Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 195/196] smp/hotplug: Move unparking of percpu threads to the control CPU Greg Kroah-Hartman
2017-07-25 19:23 ` [PATCH 4.12 196/196] smp/hotplug: Replace BUG_ON and react useful Greg Kroah-Hartman
2017-07-26  2:57 ` [PATCH 4.12 000/196] 4.12.4-stable review Guenter Roeck
2017-07-26 19:54   ` Greg Kroah-Hartman
2017-07-26 14:25 ` Shuah Khan
2017-07-26 16:20   ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170725192050.398609677@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=neilb@suse.com \
    --cc=nix@esperi.org.uk \
    --cc=shli@fb.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.