summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2009-01-07 08:55:39 +0100
committerJens Axboe <jens.axboe@oracle.com>2009-01-09 21:46:13 +0100
commit54b0d127696aba2ef1ec5430301c968ab539fa0d (patch)
treebe6d3ddccce6a17a053ea6e286bf2822bc6ee912
parent2150edc6c5cf00f7adb54538b9ea2a3e9cedca3f (diff)
downloadlinux-54b0d127696aba2ef1ec5430301c968ab539fa0d.tar.bz2
block: fix bug in ptbl lookup cache
Neil writes: Hi Jens, I've found a little bug for you. It was introduced by a6f23657d3072bde6844055bbc2290e497f33fbc block: add one-hit cache for disk partition lookup and has the effect of killing my machine whenever I try to assemble an md array :-( One of the devices in the array has partitions, and mdadm always deletes partitions before putting a whole-device in an array (as it can cause confusion). The next IO to that device locks the machine. I don't really understand exactly why it locks up, but it happens in disk_map_sector_rcu(). This patch fixes it. Which is due to a missing clear of the (now) stale partition lookup data. So clear that when we delete a partition. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r--fs/partitions/check.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/partitions/check.c b/fs/partitions/check.c
index 5198ada67398..6d720243f5f4 100644
--- a/fs/partitions/check.c
+++ b/fs/partitions/check.c
@@ -334,6 +334,7 @@ void delete_partition(struct gendisk *disk, int partno)
blk_free_devt(part_devt(part));
rcu_assign_pointer(ptbl->part[partno], NULL);
+ rcu_assign_pointer(ptbl->last_lookup, NULL);
kobject_put(part->holder_dir);
device_del(part_to_dev(part));