mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-10 16:58:47 +03:00
Integrate suspend.
This commit is contained in:
parent
c22c93f0b6
commit
20c5fcf764
@ -136,33 +136,19 @@ static int _lv_deactivate(struct logical_volume *lv)
|
|||||||
|
|
||||||
static int _lv_suspend(struct logical_volume *lv)
|
static int _lv_suspend(struct logical_volume *lv)
|
||||||
{
|
{
|
||||||
#if 0
|
int r;
|
||||||
char buffer[128];
|
struct dev_manager *dm;
|
||||||
|
|
||||||
log_very_verbose("Suspending %s", lv->name);
|
if (!(dm = dev_manager_create(lv->vg->name))) {
|
||||||
if (test_mode()) {
|
|
||||||
_skip("Suspending '%s'.", lv->name);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!build_dm_name(buffer, sizeof(buffer), "",
|
|
||||||
lv->vg->name, lv->name)) {
|
|
||||||
stack;
|
stack;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!device_suspend(buffer)) {
|
if (!(r = dev_manager_suspend(dm, lv)))
|
||||||
stack;
|
stack;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
fs_del_lv(lv);
|
dev_manager_destroy(dm);
|
||||||
|
return r;
|
||||||
return 1;
|
|
||||||
#else
|
|
||||||
log_err("lv_suspend not implemented.");
|
|
||||||
return 1;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _lv_rename(const char *old_name, struct logical_volume *lv)
|
static int _lv_rename(const char *old_name, struct logical_volume *lv)
|
||||||
@ -278,6 +264,7 @@ static struct logical_volume *_lv_from_lvid(struct cmd_context *cmd,
|
|||||||
return lvl->lv;
|
return lvl->lv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* These return success if the device is not active */
|
||||||
int lv_suspend_if_active(struct cmd_context *cmd, const char *lvid_s)
|
int lv_suspend_if_active(struct cmd_context *cmd, const char *lvid_s)
|
||||||
{
|
{
|
||||||
struct logical_volume *lv;
|
struct logical_volume *lv;
|
||||||
@ -286,6 +273,11 @@ int lv_suspend_if_active(struct cmd_context *cmd, const char *lvid_s)
|
|||||||
if (!(lv = _lv_from_lvid(cmd, lvid_s)))
|
if (!(lv = _lv_from_lvid(cmd, lvid_s)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (test_mode()) {
|
||||||
|
_skip("Suspending '%s'.", lv->name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!lv_info(lv, &info)) {
|
if (!lv_info(lv, &info)) {
|
||||||
stack;
|
stack;
|
||||||
return 0;
|
return 0;
|
||||||
@ -306,6 +298,11 @@ int lv_resume_if_active(struct cmd_context *cmd, const char *lvid_s)
|
|||||||
if (!(lv = _lv_from_lvid(cmd, lvid_s)))
|
if (!(lv = _lv_from_lvid(cmd, lvid_s)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (test_mode()) {
|
||||||
|
_skip("Resuming '%s'.", lv->name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!lv_info(lv, &info)) {
|
if (!lv_info(lv, &info)) {
|
||||||
stack;
|
stack;
|
||||||
return 0;
|
return 0;
|
||||||
@ -325,6 +322,11 @@ int lv_deactivate(struct cmd_context *cmd, const char *lvid_s)
|
|||||||
if (!(lv = _lv_from_lvid(cmd, lvid_s)))
|
if (!(lv = _lv_from_lvid(cmd, lvid_s)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (test_mode()) {
|
||||||
|
_skip("Deactivating '%s'.", lv->name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!lv_info(lv, &info)) {
|
if (!lv_info(lv, &info)) {
|
||||||
stack;
|
stack;
|
||||||
return 0;
|
return 0;
|
||||||
@ -344,6 +346,11 @@ int lv_activate(struct cmd_context *cmd, const char *lvid_s)
|
|||||||
if (!(lv = _lv_from_lvid(cmd, lvid_s)))
|
if (!(lv = _lv_from_lvid(cmd, lvid_s)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (test_mode()) {
|
||||||
|
_skip("Activating '%s'.", lv->name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!lv_info(lv, &info)) {
|
if (!lv_info(lv, &info)) {
|
||||||
stack;
|
stack;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -587,7 +587,6 @@ int dev_manager_info(struct dev_manager *dm, struct logical_volume *lv,
|
|||||||
int dev_manager_suspend(struct dev_manager *dm, struct logical_volume *lv)
|
int dev_manager_suspend(struct dev_manager *dm, struct logical_volume *lv)
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
struct dm_info info;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Build a name for the top layer.
|
* Build a name for the top layer.
|
||||||
@ -597,20 +596,7 @@ int dev_manager_suspend(struct dev_manager *dm, struct logical_volume *lv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (!_suspend_or_resume(name, 1)) {
|
||||||
* Try and get some info on this device.
|
|
||||||
*/
|
|
||||||
if (!_info(name, &info)) {
|
|
||||||
stack;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!info.exists) {
|
|
||||||
log_warn("No such device '%s'.", lv->name);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!info.suspended && !_suspend_or_resume(name, 1)) {
|
|
||||||
stack;
|
stack;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user