|
@@ -1947,15 +1947,27 @@ static void __bind_mempools(struct mapped_device *md, struct dm_table *t)
|
|
|
{
|
|
|
struct dm_md_mempools *p = dm_table_get_md_mempools(t);
|
|
|
|
|
|
- if (md->io_pool && (md->tio_pool || dm_table_get_type(t) == DM_TYPE_BIO_BASED) && md->bs) {
|
|
|
- /*
|
|
|
- * The md already has necessary mempools. Reload just the
|
|
|
- * bioset because front_pad may have changed because
|
|
|
- * a different table was loaded.
|
|
|
- */
|
|
|
- bioset_free(md->bs);
|
|
|
- md->bs = p->bs;
|
|
|
- p->bs = NULL;
|
|
|
+ if (md->io_pool && md->bs) {
|
|
|
+ /* The md already has necessary mempools. */
|
|
|
+ if (dm_table_get_type(t) == DM_TYPE_BIO_BASED) {
|
|
|
+ /*
|
|
|
+ * Reload bioset because front_pad may have changed
|
|
|
+ * because a different table was loaded.
|
|
|
+ */
|
|
|
+ bioset_free(md->bs);
|
|
|
+ md->bs = p->bs;
|
|
|
+ p->bs = NULL;
|
|
|
+ } else if (dm_table_get_type(t) == DM_TYPE_REQUEST_BASED) {
|
|
|
+ BUG_ON(!md->tio_pool);
|
|
|
+ /*
|
|
|
+ * There's no need to reload with request-based dm
|
|
|
+ * because the size of front_pad doesn't change.
|
|
|
+ * Note for future: If you are to reload bioset,
|
|
|
+ * prep-ed requests in the queue may refer
|
|
|
+ * to bio from the old bioset, so you must walk
|
|
|
+ * through the queue to unprep.
|
|
|
+ */
|
|
|
+ }
|
|
|
goto out;
|
|
|
}
|
|
|
|