1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-03-28 02:50:41 +03:00

lvchange: Accept --cachepolicy.

This commit is contained in:
Petr Rockai 2014-11-19 18:39:58 +01:00
parent f67e1fadb0
commit c164f59631
2 changed files with 34 additions and 1 deletions

View File

@ -106,6 +106,7 @@ xx(lvchange,
"\t[--addtag Tag]\n"
"\t[--alloc AllocationPolicy]\n"
"\t[-C|--contiguous y|n]\n"
"\t[--cachepolicy policy=type] [--cachepolicy parameter=value]\n"
"\t[--commandprofile ProfileName]\n"
"\t[-d|--debug]\n"
"\t[--deltag Tag]\n"
@ -143,7 +144,7 @@ xx(lvchange,
activationmode_ARG, addtag_ARG, alloc_ARG, autobackup_ARG, activate_ARG,
available_ARG,
contiguous_ARG, deltag_ARG, discards_ARG, detachprofile_ARG, force_ARG,
cachepolicy_ARG, contiguous_ARG, deltag_ARG, discards_ARG, detachprofile_ARG, force_ARG,
ignorelockingfailure_ARG, ignoremonitoring_ARG, ignoreactivationskip_ARG,
ignoreskippedcluster_ARG, major_ARG, metadataprofile_ARG, minor_ARG,
monitor_ARG, minrecoveryrate_ARG, maxrecoveryrate_ARG, noudevsync_ARG,

View File

@ -605,6 +605,30 @@ static int lvchange_persistent(struct cmd_context *cmd,
return 1;
}
static int lvchange_cachepolicy(struct cmd_context *cmd, struct logical_volume *lv)
{
struct dm_config_tree *policy = NULL;
int r = 0;
if (!lv_is_cache(lv) && !lv_is_cache_pool(lv)) {
log_error("LV %s is not a cache LV.", lv->name);
log_error("Only cache or cache pool devices can have --cachepolicy set.");
goto_out;
}
if (!(policy = get_cachepolicy_params(cmd)))
goto_out;
if (!lv_cache_setpolicy(lv, policy))
goto_out;
if (!lv_update_and_reload(lv))
goto_out;
r = 1;
out:
if (policy)
dm_config_destroy(policy);
return r;
}
static int lvchange_tag(struct cmd_context *cmd, struct logical_volume *lv, int arg)
{
if (!change_tag(cmd, NULL, lv, NULL, arg))
@ -990,6 +1014,13 @@ static int _lvchange_single(struct cmd_context *cmd, struct logical_volume *lv,
docmds++;
}
if (arg_count(cmd, cachepolicy_ARG)) {
if (!archive(lv->vg))
return_ECMD_FAILED;
doit += lvchange_cachepolicy(cmd, lv);
docmds++;
}
if (doit)
log_print_unless_silent("Logical volume \"%s\" changed.", lv->name);
@ -1049,6 +1080,7 @@ int lvchange(struct cmd_context *cmd, int argc, char **argv)
arg_count(cmd, maxrecoveryrate_ARG) ||
arg_count(cmd, resync_ARG) ||
arg_count(cmd, syncaction_ARG) ||
arg_count(cmd, cachepolicy_ARG) ||
arg_count(cmd, writebehind_ARG) ||
arg_count(cmd, writemostly_ARG) ||
arg_count(cmd, zero_ARG);