]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.36 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 15 Feb 2011 19:40:47 +0000 (11:40 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 15 Feb 2011 19:40:47 +0000 (11:40 -0800)
queue-2.6.36/dm-dont-take-i_mutex-to-change-device-size.patch [new file with mode: 0644]
queue-2.6.36/dm-mpath-disable-blk_abort_queue.patch [new file with mode: 0644]
queue-2.6.36/ieee80211-correct-ieee80211_addba_param_buf_size_mask-macro.patch [new file with mode: 0644]
queue-2.6.36/net-fec-fix-mmfr_op-type-in-fec_enet_mdio_write.patch [new file with mode: 0644]
queue-2.6.36/series

diff --git a/queue-2.6.36/dm-dont-take-i_mutex-to-change-device-size.patch b/queue-2.6.36/dm-dont-take-i_mutex-to-change-device-size.patch
new file mode 100644 (file)
index 0000000..2c2b9e5
--- /dev/null
@@ -0,0 +1,49 @@
+From c217649bf2d60ac119afd71d938278cffd55962b Mon Sep 17 00:00:00 2001
+From: Mike Snitzer <snitzer@redhat.com>
+Date: Thu, 13 Jan 2011 19:53:46 +0000
+Subject: dm: dont take i_mutex to change device size
+
+From: Mike Snitzer <snitzer@redhat.com>
+
+commit c217649bf2d60ac119afd71d938278cffd55962b upstream.
+
+No longer needlessly hold md->bdev->bd_inode->i_mutex when changing the
+size of a DM device.  This additional locking is unnecessary because
+i_size_write() is already protected by the existing critical section in
+dm_swap_table().  DM already has a reference on md->bdev so the
+associated bd_inode may be changed without lifetime concerns.
+
+A negative side-effect of having held md->bdev->bd_inode->i_mutex was
+that a concurrent DM device resize and flush (via fsync) would deadlock.
+Dropping md->bdev->bd_inode->i_mutex eliminates this potential for
+deadlock.  The following reproducer no longer deadlocks:
+  https://www.redhat.com/archives/dm-devel/2009-July/msg00284.html
+
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Alasdair G Kergon <agk@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/dm.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/md/dm.c
++++ b/drivers/md/dm.c
+@@ -2111,13 +2111,14 @@ static void event_callback(void *context
+       wake_up(&md->eventq);
+ }
++/*
++ * Protected by md->suspend_lock obtained by dm_swap_table().
++ */
+ static void __set_size(struct mapped_device *md, sector_t size)
+ {
+       set_capacity(md->disk, size);
+-      mutex_lock(&md->bdev->bd_inode->i_mutex);
+       i_size_write(md->bdev->bd_inode, (loff_t)size << SECTOR_SHIFT);
+-      mutex_unlock(&md->bdev->bd_inode->i_mutex);
+ }
+ /*
diff --git a/queue-2.6.36/dm-mpath-disable-blk_abort_queue.patch b/queue-2.6.36/dm-mpath-disable-blk_abort_queue.patch
new file mode 100644 (file)
index 0000000..182c7b0
--- /dev/null
@@ -0,0 +1,81 @@
+From 09c9d4c9b6a2b5909ae3c6265e4cd3820b636863 Mon Sep 17 00:00:00 2001
+From: Mike Snitzer <snitzer@redhat.com>
+Date: Thu, 13 Jan 2011 19:59:46 +0000
+Subject: dm mpath: disable blk_abort_queue
+
+From: Mike Snitzer <snitzer@redhat.com>
+
+commit 09c9d4c9b6a2b5909ae3c6265e4cd3820b636863 upstream.
+
+Revert commit 224cb3e981f1b2f9f93dbd49eaef505d17d894c2
+  dm: Call blk_abort_queue on failed paths
+
+Multipath began to use blk_abort_queue() to allow for
+lower latency path deactivation.  This was found to
+cause list corruption:
+
+   the cmd gets blk_abort_queued/timedout run on it and the scsi eh
+   somehow is able to complete and run scsi_queue_insert while
+   scsi_request_fn is still trying to process the request.
+
+   https://www.redhat.com/archives/dm-devel/2010-November/msg00085.html
+
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Alasdair G Kergon <agk@redhat.com>
+Cc: Mike Anderson <andmike@linux.vnet.ibm.com>
+Cc: Mike Christie <michaelc@cs.wisc.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/md/dm-mpath.c |   12 ------------
+ 1 file changed, 12 deletions(-)
+
+--- a/drivers/md/dm-mpath.c
++++ b/drivers/md/dm-mpath.c
+@@ -33,7 +33,6 @@ struct pgpath {
+       unsigned fail_count;            /* Cumulative failure count */
+       struct dm_path path;
+-      struct work_struct deactivate_path;
+       struct work_struct activate_path;
+ };
+@@ -116,7 +115,6 @@ static struct workqueue_struct *kmultipa
+ static void process_queued_ios(struct work_struct *work);
+ static void trigger_event(struct work_struct *work);
+ static void activate_path(struct work_struct *work);
+-static void deactivate_path(struct work_struct *work);
+ /*-----------------------------------------------
+@@ -129,7 +127,6 @@ static struct pgpath *alloc_pgpath(void)
+       if (pgpath) {
+               pgpath->is_active = 1;
+-              INIT_WORK(&pgpath->deactivate_path, deactivate_path);
+               INIT_WORK(&pgpath->activate_path, activate_path);
+       }
+@@ -141,14 +138,6 @@ static void free_pgpath(struct pgpath *p
+       kfree(pgpath);
+ }
+-static void deactivate_path(struct work_struct *work)
+-{
+-      struct pgpath *pgpath =
+-              container_of(work, struct pgpath, deactivate_path);
+-
+-      blk_abort_queue(pgpath->path.dev->bdev->bd_disk->queue);
+-}
+-
+ static struct priority_group *alloc_priority_group(void)
+ {
+       struct priority_group *pg;
+@@ -995,7 +984,6 @@ static int fail_path(struct pgpath *pgpa
+                     pgpath->path.dev->name, m->nr_valid_paths);
+       schedule_work(&m->trigger_event);
+-      queue_work(kmultipathd, &pgpath->deactivate_path);
+ out:
+       spin_unlock_irqrestore(&m->lock, flags);
diff --git a/queue-2.6.36/ieee80211-correct-ieee80211_addba_param_buf_size_mask-macro.patch b/queue-2.6.36/ieee80211-correct-ieee80211_addba_param_buf_size_mask-macro.patch
new file mode 100644 (file)
index 0000000..463732c
--- /dev/null
@@ -0,0 +1,34 @@
+From 8d661f1e462d50bd83de87ee628aaf820ce3c66c Mon Sep 17 00:00:00 2001
+From: Amitkumar Karwar <akarwar@marvell.com>
+Date: Tue, 11 Jan 2011 16:14:24 -0800
+Subject: ieee80211: correct IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK macro
+
+From: Amitkumar Karwar <akarwar@marvell.com>
+
+commit 8d661f1e462d50bd83de87ee628aaf820ce3c66c upstream.
+
+It is defined in include/linux/ieee80211.h. As per IEEE spec.
+bit6 to bit15 in block ack parameter represents buffer size.
+So the bitmask should be 0xFFC0.
+
+Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
+Signed-off-by: Bing Zhao <bzhao@marvell.com>
+Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/ieee80211.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/include/linux/ieee80211.h
++++ b/include/linux/ieee80211.h
+@@ -959,7 +959,7 @@ struct ieee80211_ht_info {
+ /* block-ack parameters */
+ #define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002
+ #define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C
+-#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFA0
++#define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFC0
+ #define IEEE80211_DELBA_PARAM_TID_MASK 0xF000
+ #define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800
diff --git a/queue-2.6.36/net-fec-fix-mmfr_op-type-in-fec_enet_mdio_write.patch b/queue-2.6.36/net-fec-fix-mmfr_op-type-in-fec_enet_mdio_write.patch
new file mode 100644 (file)
index 0000000..6ff28a8
--- /dev/null
@@ -0,0 +1,38 @@
+From 862f0982eadcea0e114576c57ea426d3d51a69a6 Mon Sep 17 00:00:00 2001
+From: Shawn Guo <shawn.guo@freescale.com>
+Date: Wed, 5 Jan 2011 21:13:09 +0000
+Subject: net/fec: fix MMFR_OP type in fec_enet_mdio_write
+
+From: Shawn Guo <shawn.guo@freescale.com>
+
+commit 862f0982eadcea0e114576c57ea426d3d51a69a6 upstream.
+
+FEC_MMFR_OP_WRITE should be used than FEC_MMFR_OP_READ in
+a mdio write operation.
+
+It's probably a typo introduced by commit:
+
+e6b043d512fa8d9a3801bf5d72bfa3b8fc3b3cc8
+netdev/fec.c: add phylib supporting to enable carrier detection (v2)
+
+Signed-off-by: Shawn Guo <shawn.guo@freescale.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/fec.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/fec.c
++++ b/drivers/net/fec.c
+@@ -651,8 +651,8 @@ static int fec_enet_mdio_write(struct mi
+       fep->mii_timeout = 0;
+       init_completion(&fep->mdio_done);
+-      /* start a read op */
+-      writel(FEC_MMFR_ST | FEC_MMFR_OP_READ |
++      /* start a write op */
++      writel(FEC_MMFR_ST | FEC_MMFR_OP_WRITE |
+               FEC_MMFR_PA(mii_id) | FEC_MMFR_RA(regnum) |
+               FEC_MMFR_TA | FEC_MMFR_DATA(value),
+               fep->hwp + FEC_MII_DATA);
index 1431fbc69e1319d70ac2e54b8fa9bc2ec7f5e3f0..748bd4c26edc2d40787c105c45904c771ef06a3f 100644 (file)
@@ -152,3 +152,7 @@ keys-don-t-call-up_write-if-__key_link_begin-returns-an-error.patch
 selinux-define-permissions-for-dcb-netlink-messages.patch
 selinux-do-not-compute-transition-labels-on-mountpoint-labeled-filesystems.patch
 tpm-autodetect-itpm-devices.patch
+ieee80211-correct-ieee80211_addba_param_buf_size_mask-macro.patch
+dm-dont-take-i_mutex-to-change-device-size.patch
+dm-mpath-disable-blk_abort_queue.patch
+net-fec-fix-mmfr_op-type-in-fec_enet_mdio_write.patch