提交 54b0d127 编写于 作者: N Neil Brown 提交者: Jens Axboe

block: fix bug in ptbl lookup cache

Neil writes:

   Hi Jens,

    I've found a little bug for you.  It was introduced by
        a6f23657

        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: NJens Axboe <jens.axboe@oracle.com>
上级 2150edc6
...@@ -334,6 +334,7 @@ void delete_partition(struct gendisk *disk, int partno) ...@@ -334,6 +334,7 @@ void delete_partition(struct gendisk *disk, int partno)
blk_free_devt(part_devt(part)); blk_free_devt(part_devt(part));
rcu_assign_pointer(ptbl->part[partno], NULL); rcu_assign_pointer(ptbl->part[partno], NULL);
rcu_assign_pointer(ptbl->last_lookup, NULL);
kobject_put(part->holder_dir); kobject_put(part->holder_dir);
device_del(part_to_dev(part)); device_del(part_to_dev(part));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册