[kernel] r18115 - in dists/sid/linux-2.6/debian: . patches/bugfix/all patches/series

Ben Hutchings benh at alioth.debian.org
Fri Sep 23 04:48:15 UTC 2011


Author: benh
Date: Fri Sep 23 04:48:13 2011
New Revision: 18115

Log:
block: Free queue resources at blk_release_queue() (Closes: #631187)

Added:
   dists/sid/linux-2.6/debian/patches/bugfix/all/block-Free-queue-resources-at-blk_release_queue.patch
Modified:
   dists/sid/linux-2.6/debian/changelog
   dists/sid/linux-2.6/debian/patches/series/5

Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog	Fri Sep 23 04:46:41 2011	(r18114)
+++ dists/sid/linux-2.6/debian/changelog	Fri Sep 23 04:48:13 2011	(r18115)
@@ -4,6 +4,7 @@
   * Ignore ABI change in rt2800lib (fixes FTBFS on several architectures)
   * fm801: Fix double free in case of error in tuner detection
   * fm801: Gracefully handle failure of tuner auto-detect (Closes: #641946)
+  * block: Free queue resources at blk_release_queue() (Closes: #631187)
 
  -- Ben Hutchings <ben at decadent.org.uk>  Tue, 20 Sep 2011 23:50:35 +0100
 

Added: dists/sid/linux-2.6/debian/patches/bugfix/all/block-Free-queue-resources-at-blk_release_queue.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/bugfix/all/block-Free-queue-resources-at-blk_release_queue.patch	Fri Sep 23 04:48:13 2011	(r18115)
@@ -0,0 +1,65 @@
+From: Hannes Reinecke <hare at suse.de>
+Subject: [PATCH] block: Free queue resources at blk_release_queue()
+Date: Thu, 22 Sep 2011 15:18:33 +0200
+
+A kernel crash is observed when a mounted ext3/ext4 filesystem
+is physically removed.
+The problem is that blk_cleanup_queue() frees up some resources
+eg by calling elevator_exit(), which are not checked for in
+normal operation.
+So we should rather move these calls to the destructor function
+blk_release_queue() as at that point all remaining references
+are gone.
+However, in doing so we have to ensure that any externally
+supplied queue_lock is disconnected as the driver might
+free up the lock after the call of blk_cleanup_queue(),
+
+Signed-off-by: Hannes Reinecke <hare at suse.de>
+
+diff --git a/block/blk-core.c b/block/blk-core.c
+index 90e1ffd..81a431b 100644
+--- a/block/blk-core.c
++++ b/block/blk-core.c
+@@ -348,9 +348,10 @@ void blk_put_queue(struct request_queue *q)
+ EXPORT_SYMBOL(blk_put_queue);
+ 
+ /*
+- * Note: If a driver supplied the queue lock, it should not zap that lock
+- * unexpectedly as some queue cleanup components like elevator_exit() and
+- * blk_throtl_exit() need queue lock.
++ * Note: If a driver supplied the queue lock, it is disconnected
++ * by this function. The actual state of the lock doesn't matter
++ * here as the request_queue isn't accessible after this point
++ * (QUEUE_FLAG_DEAD is set) and no other requests will be queued.
+  */
+ void blk_cleanup_queue(struct request_queue *q)
+ {
+@@ -367,10 +368,8 @@ void blk_cleanup_queue(struct request_queue *q)
+ 	queue_flag_set_unlocked(QUEUE_FLAG_DEAD, q);
+ 	mutex_unlock(&q->sysfs_lock);
+ 
+-	if (q->elevator)
+-		elevator_exit(q->elevator);
+-
+-	blk_throtl_exit(q);
++	if (q->queue_lock != &q->__queue_lock)
++		q->queue_lock = &q->__queue_lock;
+ 
+ 	blk_put_queue(q);
+ }
+diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
+index 0ee17b5..a5a756b 100644
+--- a/block/blk-sysfs.c
++++ b/block/blk-sysfs.c
+@@ -477,6 +477,11 @@ static void blk_release_queue(struct kobject *kobj)
+ 
+ 	blk_sync_queue(q);
+ 
++	if (q->elevator)
++		elevator_exit(q->elevator);
++
++	blk_throtl_exit(q);
++
+ 	if (rl->rq_pool)
+ 		mempool_destroy(rl->rq_pool);
+ 

Modified: dists/sid/linux-2.6/debian/patches/series/5
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/5	Fri Sep 23 04:46:41 2011	(r18114)
+++ dists/sid/linux-2.6/debian/patches/series/5	Fri Sep 23 04:48:13 2011	(r18115)
@@ -1,2 +1,3 @@
 + bugfix/all/fm801-Fix-double-free-in-case-of-error-in-tuner-dete.patch
 + bugfix/all/fm801-Gracefully-handle-failure-of-tuner-auto-detect.patch
++ bugfix/all/block-Free-queue-resources-at-blk_release_queue.patch



More information about the Kernel-svn-changes mailing list