提交 4e90188b 编写于 作者: A Alasdair G Kergon 提交者: Linus Torvalds

[PATCH] device-mapper: fix deadlocks in core

Avoid another bdget_disk which can deadlock.
Signed-Off-By: NAlasdair G Kergon <agk@redhat.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 cf222b37
......@@ -825,18 +825,13 @@ static void event_callback(void *context)
wake_up(&md->eventq);
}
static void __set_size(struct gendisk *disk, sector_t size)
static void __set_size(struct mapped_device *md, sector_t size)
{
struct block_device *bdev;
set_capacity(disk, size);
bdev = bdget_disk(disk, 0);
if (bdev) {
down(&bdev->bd_inode->i_sem);
i_size_write(bdev->bd_inode, (loff_t)size << SECTOR_SHIFT);
up(&bdev->bd_inode->i_sem);
bdput(bdev);
}
set_capacity(md->disk, size);
down(&md->frozen_bdev->bd_inode->i_sem);
i_size_write(md->frozen_bdev->bd_inode, (loff_t)size << SECTOR_SHIFT);
up(&md->frozen_bdev->bd_inode->i_sem);
}
static int __bind(struct mapped_device *md, struct dm_table *t)
......@@ -845,7 +840,7 @@ static int __bind(struct mapped_device *md, struct dm_table *t)
sector_t size;
size = dm_table_get_size(t);
__set_size(md->disk, size);
__set_size(md, size);
if (size == 0)
return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册