Branch data Line data Source code
1 : : /*
2 : : * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
3 : : * Copyright (C) 2004-2006 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 "lib.h"
17 : : #include "disk-rep.h"
18 : :
19 : : /*
20 : : * FIXME: Quick hack. We can use caching to
21 : : * prevent a total re-read, even so vg_number
22 : : * causes the tools to check *every* pv. Yuck.
23 : : * Put in separate file so it wouldn't contaminate
24 : : * other code.
25 : : */
26 : 0 : int get_free_vg_number(struct format_instance *fid, struct dev_filter *filter,
27 : : const char *candidate_vg, int *result)
28 : : {
29 : : struct dm_list all_pvs;
30 : : struct disk_list *dl;
31 : 0 : struct dm_pool *mem = dm_pool_create("lvm1 vg_number", 10 * 1024);
32 : 0 : int numbers[MAX_VG], i, r = 0;
33 : :
34 : 0 : dm_list_init(&all_pvs);
35 : :
36 [ # # ]: 0 : if (!mem)
37 : 0 : return_0;
38 : :
39 [ # # ]: 0 : if (!read_pvs_in_vg(fid->fmt, NULL, filter, mem, &all_pvs))
40 : 0 : goto_out;
41 : :
42 : 0 : memset(numbers, 0, sizeof(numbers));
43 : :
44 [ # # ]: 0 : dm_list_iterate_items(dl, &all_pvs) {
45 [ # # ][ # # ]: 0 : if (!*dl->pvd.vg_name || !strcmp((char *)dl->pvd.vg_name, candidate_vg))
46 : 0 : continue;
47 : :
48 : 0 : numbers[dl->vgd.vg_number] = 1;
49 : : }
50 : :
51 [ # # ]: 0 : for (i = 0; i < MAX_VG; i++) {
52 [ # # ]: 0 : if (!numbers[i]) {
53 : 0 : r = 1;
54 : 0 : *result = i;
55 : 0 : break;
56 : : }
57 : : }
58 : :
59 : : out:
60 : 0 : dm_pool_destroy(mem);
61 : 0 : return r;
62 : : }
|