From: Alex Elder <elder@inktank.com>
To: Laurent Barbe <laurent@ksperis.com>
Cc: ceph-devel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] rbd: revalidate_disk upon rbd resize
Date: Thu, 11 Apr 2013 08:27:36 -0500 [thread overview]
Message-ID: <5166BA48.6070809@inktank.com> (raw)
In-Reply-To: <CADksbcpbhp8-Db2bqQc_fFwmT-iObYdjK+rXJF5DiZ9wu1sSQA@mail.gmail.com>
On 04/11/2013 03:47 AM, Laurent Barbe wrote:
> Thanks Alex,
>
> What do you mean about "lock inversion", deadlock ?
> Is it the mutex_lock in block_dev.c:revalidate_disk() and the mutex
> in rbd_dev_refresh ?
Yes.
When we refresh an rbd device we get the rbd device header
semaphore, and with this patch we then acquire the bdev's
mutex.
Meanhwhile, via blkdev_close() __blkdev_put() acquires the
bdev->bd_mutex, and eventually we get down to creating an
image object request. If it's a write, we need to get the
snapshot context, and to do that we get the rbd device
header mutex.
So we're acquiring the locks in two different orders, and
that's what I meant by "lock inversion," and yes, that
can lead to deadlock.
There may be a simple fix--like holding off calling
revalidate_disk() until after we release the lock,
most likely in rbd_dev_refresh(). But I just haven't
really thought it through yet.
-Alex
>
> 2013/4/11 Alex Elder <elder@inktank.com>
>
>> On 04/10/2013 02:30 PM, Alex Elder wrote:
>>> On 04/10/2013 11:06 AM, Laurent Barbe wrote:
>>>> If rbd disk is open and rbd resize is done, new size is not visible by
>>>> filesystem.
>>>> Like is done in virtio-blk and dm driver, revalidate_disk() permits to
>>>> update the bd_inode size.
>>>
>>> Looks good to me. I'll take this in via the ceph-client tree.
>>> Thanks a lot.
>>
>> Unfortunately this leads to a lock inversion. I'm going to
>> think about how to go about resolving it, so I won't be
>> committing it just yet.
>>
>> -Alex
>>
>>>
>>> Reviewed-by: Alex Elder <elder@inktank.com>
>>>
>>>> Signed-off-by: Laurent Barbe <laurent@ksperis.com>
>>>> ---
>>>> drivers/block/rbd.c | 1 +
>>>> 1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
>>>> index f556f8a..1963025 100644
>>>> --- a/drivers/block/rbd.c
>>>> +++ b/drivers/block/rbd.c
>>>> @@ -2293,6 +2293,7 @@ static void rbd_update_mapping_size(struct
>> rbd_device *rbd_dev)
>>>> dout("setting size to %llu sectors", (unsigned long long) size);
>>>> rbd_dev->mapping.size = (u64) size;
>>>> set_capacity(rbd_dev->disk, size);
>>>> + revalidate_disk(rbd_dev->disk);
>>>> }
>>>>
>>>> /*
>>>>
>>>
>>
>>
>
next prev parent reply other threads:[~2013-04-11 13:27 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-10 16:06 [PATCH] rbd: revalidate_disk upon rbd resize Laurent Barbe
2013-04-10 19:30 ` Alex Elder
2013-04-11 2:53 ` Alex Elder
[not found] ` <CADksbcpbhp8-Db2bqQc_fFwmT-iObYdjK+rXJF5DiZ9wu1sSQA@mail.gmail.com>
2013-04-11 13:27 ` Alex Elder [this message]
2013-04-11 13:59 ` Laurent Barbe
-- strict thread matches above, loose matches on Subject: below --
2013-04-12 13:52 Laurent Barbe
2013-04-12 13:59 ` Laurent Barbe
2013-04-15 17:24 ` Alex Elder
2013-04-22 17:10 ` Alex Elder
2013-04-22 17:14 ` Sage Weil
2013-04-22 17:35 ` Alex Elder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5166BA48.6070809@inktank.com \
--to=elder@inktank.com \
--cc=ceph-devel@vger.kernel.org \
--cc=laurent@ksperis.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.