From 73a1389f1315edc3b943149eb76327f6677728b5 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Fri, 10 May 2013 14:37:19 +0100 Subject: [PATCH] --- yaml --- r: 375260 b: refs/heads/master c: 5d0db96d13a4e2cd22b52494fb19ce5a9c8b8d90 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/md/dm-thin.c | 25 ++++++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 4996f13fb09e..597a5d3e2cea 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b17446df2ebcaf32889376d90f4b9b2baebb2db6 +refs/heads/master: 5d0db96d13a4e2cd22b52494fb19ce5a9c8b8d90 diff --git a/trunk/drivers/md/dm-thin.c b/trunk/drivers/md/dm-thin.c index 111c148fb1d0..ef021b0c8106 100644 --- a/trunk/drivers/md/dm-thin.c +++ b/trunk/drivers/md/dm-thin.c @@ -1945,6 +1945,7 @@ static int pool_ctr(struct dm_target *ti, unsigned argc, char **argv) unsigned long block_size; dm_block_t low_water_blocks; struct dm_dev *metadata_dev; + fmode_t metadata_mode; /* * FIXME Remove validation from scope of lock. @@ -1956,10 +1957,22 @@ static int pool_ctr(struct dm_target *ti, unsigned argc, char **argv) r = -EINVAL; goto out_unlock; } + as.argc = argc; as.argv = argv; - r = dm_get_device(ti, argv[0], FMODE_READ | FMODE_WRITE, &metadata_dev); + /* + * Set default pool features. + */ + pool_features_init(&pf); + + dm_consume_args(&as, 4); + r = parse_pool_features(&as, &pf, ti); + if (r) + goto out_unlock; + + metadata_mode = FMODE_READ | ((pf.mode == PM_READ_ONLY) ? 0 : FMODE_WRITE); + r = dm_get_device(ti, argv[0], metadata_mode, &metadata_dev); if (r) { ti->error = "Error opening metadata block device"; goto out_unlock; @@ -1992,16 +2005,6 @@ static int pool_ctr(struct dm_target *ti, unsigned argc, char **argv) goto out; } - /* - * Set default pool features. - */ - pool_features_init(&pf); - - dm_consume_args(&as, 4); - r = parse_pool_features(&as, &pf, ti); - if (r) - goto out; - pt = kzalloc(sizeof(*pt), GFP_KERNEL); if (!pt) { r = -ENOMEM;