All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josef Bacik <josef@toxicpanda.com>
To: Mike Christie <mchristi@redhat.com>
Cc: josef@toxicpanda.com, linux-block@vger.kernel.org
Subject: Re: [PATCH 2/2] nbd: add netlink reconfigure resize support v3
Date: Thu, 13 Jun 2019 13:01:04 -0400	[thread overview]
Message-ID: <20190613170103.pludlfrz2jtkzwij@MacBook-Pro-91.local> (raw)
In-Reply-To: <20190529201606.14903-3-mchristi@redhat.com>

On Wed, May 29, 2019 at 03:16:06PM -0500, Mike Christie wrote:
> If the device is setup with ioctl we can resize the device after the
> initial setup, but if the device is setup with netlink we cannot use the
> resize related ioctls and there is no netlink reconfigure size ATTR
> handling code.
> 
> This patch adds netlink reconfigure resize support to match the ioctl
> interface.
> 
> Signed-off-by: Mike Christie <mchristi@redhat.com>

Sorry I missed this too, but I think there's a problem with this actually.

> ---
> 
> V3;
> - If the device size or block size has not changed do not call
> nbd_size_set.
> 
> V2:
> - Merge reconfig and connect resize related code to helper and avoid
> multiple nbd_size_set calls.
> 
>  drivers/block/nbd.c | 48 ++++++++++++++++++++++++++++++---------------
>  1 file changed, 32 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
> index 236253fbf455..9486555e6391 100644
> --- a/drivers/block/nbd.c
> +++ b/drivers/block/nbd.c
> @@ -1685,6 +1685,30 @@ nbd_device_policy[NBD_DEVICE_ATTR_MAX + 1] = {
>  	[NBD_DEVICE_CONNECTED]		=	{ .type = NLA_U8 },
>  };
>  
> +static int nbd_genl_size_set(struct genl_info *info, struct nbd_device *nbd)
> +{
> +	struct nbd_config *config = nbd->config;
> +	u64 bsize = config->blksize;
> +	u64 bytes = config->bytesize;
> +
> +	if (info->attrs[NBD_ATTR_SIZE_BYTES])
> +		bytes = nla_get_u64(info->attrs[NBD_ATTR_SIZE_BYTES]);
> +
> +	if (info->attrs[NBD_ATTR_BLOCK_SIZE_BYTES]) {
> +		bsize = nla_get_u64(info->attrs[NBD_ATTR_BLOCK_SIZE_BYTES]);
> +		if (!bsize)
> +			bsize = NBD_DEF_BLKSIZE;
> +		if (!nbd_is_valid_blksize(bsize)) {
> +			printk(KERN_ERR "Invalid block size %llu\n", bsize);
> +			return -EINVAL;
> +		}
> +	}
> +
> +	if (bytes != config->bytesize || bsize != config->blksize)
> +		nbd_size_set(nbd, bsize, div64_u64(bytes, bsize));

This part won't actually update the bdev if there already is one because
nbd->task_recv is NULL for netlink related devices.  Probably need to fix that
to update the bdev unconditionally, and then just see if bdget_disk() returns
NULL in nbd_size_update.  Also I hate myself for how many size update functions
there are.  Thanks,

Josef

  reply	other threads:[~2019-06-13 17:01 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-29 20:16 [PATCH 0/2] nbd: block/dev size changes Mike Christie
2019-05-29 20:16 ` [PATCH 1/2] nbd: fix crash when the blksize is zero v2 Mike Christie
2019-05-30  3:19   ` Xiubo Li
2019-06-13 16:56   ` Josef Bacik
2019-05-29 20:16 ` [PATCH 2/2] nbd: add netlink reconfigure resize support v3 Mike Christie
2019-06-13 17:01   ` Josef Bacik [this message]
2019-06-13 17:35     ` Mike Christie
2019-06-13 17:44       ` Josef Bacik

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=20190613170103.pludlfrz2jtkzwij@MacBook-Pro-91.local \
    --to=josef@toxicpanda.com \
    --cc=linux-block@vger.kernel.org \
    --cc=mchristi@redhat.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.