From: Josh Durgin <josh.durgin@inktank.com>
To: Alex Elder <elder@inktank.com>
Cc: ceph-devel@vger.kernel.org
Subject: Re: [PATCH] rbd: fix a bug in resizing a mapping
Date: Tue, 30 Apr 2013 11:48:35 -0700 [thread overview]
Message-ID: <51801203.4050406@inktank.com> (raw)
In-Reply-To: <517EB308.6020503@inktank.com>
On 04/29/2013 10:51 AM, Alex Elder wrote:
> On 04/27/2013 07:39 AM, Alex Elder wrote:
>> On 04/27/2013 07:18 AM, Alex Elder wrote:
>>> When a snapshot context update occurs, rbd_update_mapping_size() is
>>> called to set the capacity of the disk to record the updated
>>> size of the image in case it has changed.
This patch looks good.
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
>>> There's a bug though. The mapping size is in units of *bytes*. The
>>> code that updates the mapping size field is assigning a value that
>>> has been scaled down to *sectors*.
>>>
>>> Fix that. Also, check to see if the size has actually changed, and
>>> don't bother updating things (specifically, calling set_capacity())
>>> if it has not.
>>>
>>> This resolves:
>>> http://tracker.ceph.com/issues/4833
>>>
>>> Signed-off-by: Alex Elder <elder@inktank.com>
>>> ---
>>> drivers/block/rbd.c | 14 ++++++++------
>>> 1 file changed, 8 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
>>> index 5918e0b..37d9349 100644
>>> --- a/drivers/block/rbd.c
>>> +++ b/drivers/block/rbd.c
>>> @@ -3034,15 +3034,17 @@ static void rbd_remove_all_snaps(struct
>>> rbd_device *rbd_dev)
>>>
>>> static void rbd_update_mapping_size(struct rbd_device *rbd_dev)
>>> {
>>> - sector_t size;
>>> -
>>> if (rbd_dev->spec->snap_id != CEPH_NOSNAP)
>>> return;
>>>
>>> - size = (sector_t) rbd_dev->header.image_size / SECTOR_SIZE;
>>> - dout("setting size to %llu sectors", (unsigned long long) size);
>>> - rbd_dev->mapping.size = (u64) size;
>>> - set_capacity(rbd_dev->disk, size);
>>> + if (rbd_dev->mapping.size != rbd_dev->header.image_size) {
>>> + sector_t size;
>>> +
>>> + rbd_dev->mapping.size = rbd_dev->header.image_size;
>>> + size = (sector_t)rbd_dev->mapping.size / SECTOR_SIZE;
>>> + dout("setting size to %llu sectors", (unsigned long long)size);
>>> + set_capacity(rbd_dev->disk, size);
>>> + }
>>> }
>>>
>>> /*
>>>
>>
>
prev parent reply other threads:[~2013-04-30 18:49 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-27 12:18 [PATCH] rbd: fix a bug in resizing a mapping Alex Elder
2013-04-27 12:39 ` Alex Elder
2013-04-29 17:51 ` Alex Elder
2013-04-30 18:48 ` Josh Durgin [this message]
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=51801203.4050406@inktank.com \
--to=josh.durgin@inktank.com \
--cc=ceph-devel@vger.kernel.org \
--cc=elder@inktank.com \
/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.