summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2011-02-15 11:45:03 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2011-02-15 11:45:03 -0800
commit4311ad2dde5f42e8047da970e8cf2523c6657d29 (patch)
treed671e7cffaac0d5ba4402f58ee0cf9ab30cd2f83
parent77cdffb9553fa2a9bbe0822a96113b72bd50e934 (diff)
downloadlongterm-queue-2.6.33-4311ad2dde5f42e8047da970e8cf2523c6657d29.tar.gz
.33
-rw-r--r--queue-2.6.33/dm-dont-take-i_mutex-to-change-device-size.patch49
-rw-r--r--queue-2.6.33/dm-mpath-disable-blk_abort_queue.patch81
-rw-r--r--queue-2.6.33/ieee80211-correct-ieee80211_addba_param_buf_size_mask-macro.patch34
-rw-r--r--queue-2.6.33/series3
4 files changed, 167 insertions, 0 deletions
diff --git a/queue-2.6.33/dm-dont-take-i_mutex-to-change-device-size.patch b/queue-2.6.33/dm-dont-take-i_mutex-to-change-device-size.patch
new file mode 100644
index 0000000..3cce814
--- /dev/null
+++ b/queue-2.6.33/dm-dont-take-i_mutex-to-change-device-size.patch
@@ -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
+@@ -2039,13 +2039,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.33/dm-mpath-disable-blk_abort_queue.patch b/queue-2.6.33/dm-mpath-disable-blk_abort_queue.patch
new file mode 100644
index 0000000..da670aa
--- /dev/null
+++ b/queue-2.6.33/dm-mpath-disable-blk_abort_queue.patch
@@ -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;
+ };
+
+@@ -117,7 +116,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);
+
+
+ /*-----------------------------------------------
+@@ -130,7 +128,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);
+ }
+
+@@ -142,14 +139,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;
+@@ -958,7 +947,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.33/ieee80211-correct-ieee80211_addba_param_buf_size_mask-macro.patch b/queue-2.6.33/ieee80211-correct-ieee80211_addba_param_buf_size_mask-macro.patch
new file mode 100644
index 0000000..5f1bf67
--- /dev/null
+++ b/queue-2.6.33/ieee80211-correct-ieee80211_addba_param_buf_size_mask-macro.patch
@@ -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
+@@ -910,7 +910,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.33/series b/queue-2.6.33/series
index 3944f1f..7bf3546 100644
--- a/queue-2.6.33/series
+++ b/queue-2.6.33/series
@@ -320,3 +320,6 @@ tpm_tis-use-timeouts-returned-from-tpm.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