Branch data Line data Source code
1 : : /*
2 : : * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
3 : : * Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved.
4 : : *
5 : : * This file is part of LVM2.
6 : : *
7 : : * This copyrighted material is made available to anyone wishing to use,
8 : : * modify, copy, or redistribute it subject to the terms and conditions
9 : : * of the GNU Lesser General Public License v.2.1.
10 : : *
11 : : * You should have received a copy of the GNU Lesser General Public License
12 : : * along with this program; if not, write to the Free Software Foundation,
13 : : * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
14 : : */
15 : :
16 : : #include "tools.h"
17 : :
18 : 0 : static int vgimport_single(struct cmd_context *cmd __attribute((unused)),
19 : : const char *vg_name,
20 : : struct volume_group *vg,
21 : : void *handle __attribute((unused)))
22 : : {
23 : : struct pv_list *pvl;
24 : : struct physical_volume *pv;
25 : :
26 [ # # ]: 0 : if (!vg_is_exported(vg)) {
27 : 0 : log_error("Volume group \"%s\" is not exported", vg_name);
28 : 0 : goto bad;
29 : : }
30 : :
31 [ # # ]: 0 : if (vg_status(vg) & PARTIAL_VG) {
32 : 0 : log_error("Volume group \"%s\" is partially missing", vg_name);
33 : 0 : goto bad;
34 : : }
35 : :
36 [ # # ]: 0 : if (!archive(vg))
37 : 0 : goto_bad;
38 : :
39 : 0 : vg->status &= ~EXPORTED_VG;
40 : :
41 [ # # ]: 0 : dm_list_iterate_items(pvl, &vg->pvs) {
42 : 0 : pv = pvl->pv;
43 : 0 : pv->status &= ~EXPORTED_VG;
44 : : }
45 : :
46 [ # # ][ # # ]: 0 : if (!vg_write(vg) || !vg_commit(vg))
47 : 0 : goto_bad;
48 : :
49 : 0 : backup(vg);
50 : :
51 : 0 : log_print("Volume group \"%s\" successfully imported", vg->name);
52 : :
53 : 0 : return ECMD_PROCESSED;
54 : :
55 : : bad:
56 : 0 : return ECMD_FAILED;
57 : : }
58 : :
59 : 0 : int vgimport(struct cmd_context *cmd, int argc, char **argv)
60 : : {
61 [ # # ][ # # ]: 0 : if (!argc && !arg_count(cmd, all_ARG)) {
62 : 0 : log_error("Please supply volume groups or use -a for all.");
63 : 0 : return ECMD_FAILED;
64 : : }
65 : :
66 [ # # ][ # # ]: 0 : if (argc && arg_count(cmd, all_ARG)) {
67 : 0 : log_error("No arguments permitted when using -a for all.");
68 : 0 : return ECMD_FAILED;
69 : : }
70 : :
71 : 0 : return process_each_vg(cmd, argc, argv,
72 : : READ_FOR_UPDATE | READ_ALLOW_EXPORTED,
73 : : NULL,
74 : : &vgimport_single);
75 : : }
|