From: David Jeffery <djeffery@redhat.com>
To: Mike Snitzer <snitzer@redhat.com>
Cc: dm-devel@redhat.com
Subject: Re: [PATCH v2] dm table: do not allow queue limits that will exceed hardware limits
Date: Mon, 17 Sep 2012 15:44:29 -0400 (EDT) [thread overview]
Message-ID: <213748621.1049831.1347911069189.JavaMail.root@redhat.com> (raw)
In-Reply-To: <20120914204133.GA376@redhat.com>
----- Original Message -----
> v2: adjust the patch header to be more succinct
>
> diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
> index f6979ad..9b931b4 100644
> --- a/drivers/md/dm-table.c
> +++ b/drivers/md/dm-table.c
> @@ -1264,6 +1264,15 @@ combine_limits:
> (unsigned long long) ti->len);
> }
>
> + /*
> + * If a table doesn't have any component devices (e.g. multipath
> + * loses all paths) don't allow the queue_limits to be left at
> + * their maximum (as established by blk_set_stacking_limits() so
> + * limits could be inherited from component devices).
> + */
> + if (limits->max_sectors == UINT_MAX)
> + blk_set_default_limits(limits);
> +
> return validate_hardware_logical_block_alignment(table, limits);
> }
>
> --
> 1.7.1
>
>
Instead of setting to defaults, how about maintaining previous limits?
The initial queue setup sets defaults when a queue is first configured,
and this maintains known, working limits if all paths are temporarly
lost. For example, I have a test setup with a lower than normal max
segment list. It can fail a test with the previous patch as the
default limits exceed the hardware limits. But this setup will work if
we leave queue limits unchanged in the special case of there being no
target devices.
David Jeffery
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 4e09b6f..89ec9ee 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -2425,6 +2425,15 @@ struct dm_table *dm_swap_table(struct mapped_device *md, struct dm_table *table)
goto out;
}
+ /*
+ * If a table doesn't have any component devices (e.g. multipath
+ * loses all paths) don't allow the queue_limits to be left at
+ * their maximum (as established by blk_set_stacking_limits()).
+ * Instead, maintain the previous limits.
+ */
+ if (limits.max_sectors == UINT_MAX)
+ limits = md->queue->limits;
+
map = __bind(md, table, &limits);
out:
next prev parent reply other threads:[~2012-09-17 19:44 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-31 15:04 [PATCH] multipath queues build invalid requests when all paths are lost David Jeffery
2012-09-04 14:58 ` Mike Snitzer
2012-09-04 16:10 ` Mike Snitzer
2012-09-04 16:12 ` Mike Snitzer
2012-09-08 16:50 ` Mikulas Patocka
2012-09-12 15:37 ` [PATCH] dm mpath: only retry ioctl if queue_if_no_path was configured Mike Snitzer
2012-09-12 17:01 ` Mikulas Patocka
2012-09-12 19:37 ` [PATCH] dm table: do not allow queue limits that will exceed hardware limits Mike Snitzer
2012-09-14 20:41 ` [PATCH v2] " Mike Snitzer
2012-09-17 19:44 ` David Jeffery [this message]
2012-09-17 19:52 ` Alasdair G Kergon
2012-09-18 11:40 ` Alasdair G Kergon
2012-09-18 13:02 ` Mike Snitzer
2012-09-21 15:37 ` [PATCH v3] dm: re-use live table's limits if next table has no data devices Mike Snitzer
2012-09-17 20:24 ` [PATCH v2] dm table: do not allow queue limits that will exceed hardware limits Alasdair G Kergon
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=213748621.1049831.1347911069189.JavaMail.root@redhat.com \
--to=djeffery@redhat.com \
--cc=dm-devel@redhat.com \
--cc=snitzer@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).