From: Joe Thornber When setting the size of a Device-Mapper device in the gendisk entry, also try to set the size of the corresponding block_device entry's inode. This is necessary to allow online device/filesystem resizing to work correctly. [Kevin Corry] 25-akpm/drivers/md/dm.c | 17 +++++++++++++++-- 1 files changed, 15 insertions(+), 2 deletions(-) diff -puN drivers/md/dm.c~dm-1-fix-block-device-resizing drivers/md/dm.c --- 25/drivers/md/dm.c~dm-1-fix-block-device-resizing Tue Nov 25 12:53:41 2003 +++ 25-akpm/drivers/md/dm.c Tue Nov 25 12:53:41 2003 @@ -662,6 +662,20 @@ static void event_callback(void *context up_write(&md->lock); } +static void __set_size(struct gendisk *disk, 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, size << SECTOR_SHIFT); + up(&bdev->bd_inode->i_sem); + bdput(bdev); + } +} + static int __bind(struct mapped_device *md, struct dm_table *t) { request_queue_t *q = md->queue; @@ -669,7 +683,7 @@ static int __bind(struct mapped_device * md->map = t; size = dm_table_get_size(t); - set_capacity(md->disk, size); + __set_size(md->disk, size); if (size == 0) return 0; @@ -688,7 +702,6 @@ static void __unbind(struct mapped_devic dm_table_event_callback(md->map, NULL, NULL); dm_table_put(md->map); md->map = NULL; - set_capacity(md->disk, 0); } /* _