On Thu, Oct 28 2010 at 3:54pm -0400, Mike Snitzer <snitzer@xxxxxxxxxx> wrote: > On Thu, Oct 28 2010 at 8:15am -0400, > Jun'ichi Nomura <j-nomura@xxxxxxxxxxxxx> wrote: > > Though I can't point out actual problem, > > I think it's deadlock-prone to take bd_mutex in dm_swap_table. > > > > There are already codes which do I/O while holding bd_mutex, > > e.g. block/ioctl.c, though the code is not called for dm, > > so we can' just set a general rule "Don't do I/O while holding bd_mutex". > > Right, it would work provided we had that understanding within DM. I think I misunderstood what you were saying as: no code does I/O to DM while holding bd_mutex so we _can_ just set the general rule.... But re-reading your mail made me realize you were likely saying the opposite? e.g. your can' was meant to be can't. So even though we currently can't see a real deadlock associated with using ->bd_mutex directly you're contending there is potential for one (may already be one in hiding or one could be introduced in the future). That is fine, best to be conservative. > I'll cleanup the patch from my previous mail to include some in-code > comments and re-post it. Please ack it if you agree that direct use of > bd_mutex in __set_size() is a reasonable fix given the current code. Taking a step back, don't we already have adequate locking for __set_size's i_size_write() via dm_swap_table's md->suspend_lock? So something like the following? Mike --- drivers/md/dm.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 7cb1352..e71b8a1 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1996,9 +1996,8 @@ static void __set_size(struct mapped_device *md, sector_t size) { set_capacity(md->disk, size); - mutex_lock(&md->bdev->bd_inode->i_mutex); + /* i_size_write() is protected by md->suspend_lock */ i_size_write(md->bdev->bd_inode, (loff_t)size << SECTOR_SHIFT); - mutex_unlock(&md->bdev->bd_inode->i_mutex); } /* -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel