diff options
author | Neil Brown <neilb@suse.de> | 2009-01-07 08:55:39 +0100 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2009-01-09 21:46:13 +0100 |
commit | 54b0d127696aba2ef1ec5430301c968ab539fa0d (patch) | |
tree | be6d3ddccce6a17a053ea6e286bf2822bc6ee912 /fs/partitions | |
parent | 2150edc6c5cf00f7adb54538b9ea2a3e9cedca3f (diff) |
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>
Diffstat (limited to 'fs/partitions')
-rw-r--r-- | fs/partitions/check.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index 5198ada6739..6d720243f5f 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)); |