* [linux-lvm] lvcreate with a 52 drive volume
@ 2003-08-15 15:12 markw
2003-08-15 15:32 ` Alasdair G Kergon
0 siblings, 1 reply; 13+ messages in thread
From: markw @ 2003-08-15 15:12 UTC (permalink / raw)
To: linux-lvm
I'm having trouble creating a striped logical volume across all 52 disks
in a volume group. This is what happens when I try to create the
logical volume:
# lvcreate -i52 -I4 -l450996 -n mydata data_volume
device-mapper ioctl cmd 9 failed: Invalid argument
Couldn't load device 'data_volume-mydata'.
Failed to activate new LV.
I see these two lines echoed to the console:
device-mapper: couldn't split parameters
device-mapper: error adding target to table
Here's the output for vgdisplay:
--- Volume group ---
VG Name data_volume
System ID
Format lvm2
Metadata Areas 52
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 256
Cur LV 0
Open LV 0
Max PV 256
Cur PV 52
Act PV 52
VG Size 1.72 TB
PE Size 4.00 MB
Total PE 450996
Alloc PE / Size 0 / 0
Free PE / Size 450996 / 1.72 TB
VG UUID kKlfs8-CWAA-zMg5-ELOm-GmI7-zOhx-KsXyAA
I reduced the number of disks in the stipe set by 4 drives (and the
logical volume size appropriately) until I could create a logical
volume with these parameters:
lvcreate -i12 -I4 -l104076 -n mydata data_volume
Any suggestions?
Thanks!
--
Mark Wong - - markw@osdl.org
Open Source Development Lab Inc - A non-profit corporation
12725 SW Millikan Way - Suite 400 - Beaverton, OR 97005
(503) 626-2455 x 32 (office)
(503) 626-2436 (fax)
http://www.osdl.org/archive/markw/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [linux-lvm] lvcreate with a 52 drive volume
2003-08-15 15:12 [linux-lvm] lvcreate with a 52 drive volume markw
@ 2003-08-15 15:32 ` Alasdair G Kergon
2003-08-15 18:05 ` markw
0 siblings, 1 reply; 13+ messages in thread
From: Alasdair G Kergon @ 2003-08-15 15:32 UTC (permalink / raw)
To: markw; +Cc: linux-lvm
On Fri, Aug 15, 2003 at 01:11:51PM -0700, markw@osdl.org wrote:
> # lvcreate -i52 -I4 -l450996 -n mydata data_volume
> device-mapper ioctl cmd 9 failed: Invalid argument
> Couldn't load device 'data_volume-mydata'.
> Failed to activate new LV.
Mark, please would you enable the debug messages
as described in the docs,
viz. the following settings in lvm.conf:
log {
file="/tmp/lvm2.log"
level=7
activation=1
}
then look at /tmp/lvm2.log after running the
problematic command?
> device-mapper: couldn't split parameters
> device-mapper: error adding target to table
The log file will show you the actual parameters
that were passed to device-mapper leading to
the error messages.
Please put the log file(s) somewhere on the web and
post URL(s) to the list - or mail the log file(s)
to me privately as a *compressed* attachment.
Alasdair
--
agk@uk.sistina.com
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [linux-lvm] lvcreate with a 52 drive volume
2003-08-15 15:32 ` Alasdair G Kergon
@ 2003-08-15 18:05 ` markw
2003-08-16 11:51 ` Alasdair G Kergon
0 siblings, 1 reply; 13+ messages in thread
From: markw @ 2003-08-15 18:05 UTC (permalink / raw)
To: linux-lvm
Ok, I've put the log file:
http://developer.osdl.org/markw/lvm2.log
Compressed:
http://developer.osdl.org/markw/lvm2.log.gz
Thanks,
Mark
On 15 Aug, Alasdair G Kergon wrote:
> On Fri, Aug 15, 2003 at 01:11:51PM -0700, markw@osdl.org wrote:
>> # lvcreate -i52 -I4 -l450996 -n mydata data_volume
>> device-mapper ioctl cmd 9 failed: Invalid argument
>> Couldn't load device 'data_volume-mydata'.
>> Failed to activate new LV.
>
> Mark, please would you enable the debug messages
> as described in the docs,
> viz. the following settings in lvm.conf:
>
> log {
> file="/tmp/lvm2.log"
> level=7
> activation=1
> }
>
> then look at /tmp/lvm2.log after running the
> problematic command?
>
>> device-mapper: couldn't split parameters
>> device-mapper: error adding target to table
>
> The log file will show you the actual parameters
> that were passed to device-mapper leading to
> the error messages.
>
> Please put the log file(s) somewhere on the web and
> post URL(s) to the list - or mail the log file(s)
> to me privately as a *compressed* attachment.
>
> Alasdair
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [linux-lvm] lvcreate with a 52 drive volume
2003-08-15 18:05 ` markw
@ 2003-08-16 11:51 ` Alasdair G Kergon
2003-08-18 12:33 ` markw
0 siblings, 1 reply; 13+ messages in thread
From: Alasdair G Kergon @ 2003-08-16 11:51 UTC (permalink / raw)
To: linux-lvm
On Fri, Aug 15, 2003 at 04:04:37PM -0700, markw@osdl.org wrote:
> http://developer.osdl.org/markw/lvm2.log.gz
Thanks.
The line of interest is:
0 3694559232 striped 52 8 /dev/rd/c0d0 384 /dev/rd/c0d1 384 /dev/rd/c0d2
384 /dev/rd/c0d3 384 /dev/rd/c0d4 384 /dev/rd/c0d5 384 /dev/rd/c0d6 384
/dev/rd/c0d7 384 /dev/rd/c0d8 384 /dev/rd/c0d9 384 /dev/rd/c0d10 384
/dev/rd/c0d11 384 /dev/rd/c0d12 384 /dev/rd/c0d14 384 /dev/rd/c0d15 384
/dev/rd/c0d16 384 /dev/rd/c0d17 384 /dev/rd/c0d18 384 /dev/rd/c0d19 384
/dev/rd/c0d20 384 /dev/rd/c0d21 384 /dev/rd/c0d22 384 /dev/rd/c0d23 384
/dev/rd/c0d24 384 /dev/rd/c0d25 384 /dev/rd/c0d26 384 /dev/rd/c1d0 384
/dev/rd/c1d1 384 /dev/rd/c1d2 384 /dev/rd/c1d3 384 /dev/rd/c1d4 384
/dev/rd/c1d5 384 /dev/rd/c1d6 384 /dev/rd/c1d7 384 /dev/rd/c1d8 384
/dev/rd/c1d9 384 /dev/rd/c1d10 384 /dev/rd/c1d11 384 /dev/rd/c1d12 384
/dev/rd/c1d14 384 /dev/rd/c1d15 384 /dev/rd/c1d16 384 /dev/rd/c1d17 384
/dev/rd/c1d18 384 /dev/rd/c1d19 384 /dev/rd/c1d20 384 /dev/rd/c1d21 384
/dev/rd/c1d22 384 /dev/rd/c1d23 384 /dev/rd/c1d24 384 /dev/rd/c1d25 384
/dev/rd/c1d26 384
The error you got was:
device-mapper: couldn't split parameters
Look at dm-table.c:498,
char *argv[32];
which suggests a hard-coded limit of 32 [tokens after "striped"?]
slipped into the code:-(
Try recompiling with a larger number there.
Alasdair
--
agk@uk.sistina.com
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [linux-lvm] lvcreate with a 52 drive volume
2003-08-16 11:51 ` Alasdair G Kergon
@ 2003-08-18 12:33 ` markw
2003-08-18 12:39 ` Jan Niehusmann
2003-08-18 13:00 ` Alasdair G Kergon
0 siblings, 2 replies; 13+ messages in thread
From: markw @ 2003-08-18 12:33 UTC (permalink / raw)
To: linux-lvm, agk
On 16 Aug, Alasdair G Kergon wrote:
> Look at dm-table.c:498,
> char *argv[32];
> which suggests a hard-coded limit of 32 [tokens after "striped"?]
> slipped into the code:-(
>
> Try recompiling with a larger number there.
Hmmm, I changed the number, but when I do a 'make clean' and a 'make',
I don't see dm-table.c compiled anywhere in the device-mapper tree or
the LVM2 tools. Am I neglecting something obvious?
Thanks,
Mark
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [linux-lvm] lvcreate with a 52 drive volume
2003-08-18 12:33 ` markw
@ 2003-08-18 12:39 ` Jan Niehusmann
2003-08-18 13:00 ` Alasdair G Kergon
1 sibling, 0 replies; 13+ messages in thread
From: Jan Niehusmann @ 2003-08-18 12:39 UTC (permalink / raw)
To: linux-lvm
On Mon, Aug 18, 2003 at 10:32:42AM -0700, markw@osdl.org wrote:
> Hmmm, I changed the number, but when I do a 'make clean' and a 'make',
> I don't see dm-table.c compiled anywhere in the device-mapper tree or
> the LVM2 tools. Am I neglecting something obvious?
It should get compiled into dm-mod.o, if you compile dm as a module.
Jan
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [linux-lvm] lvcreate with a 52 drive volume
2003-08-18 12:33 ` markw
2003-08-18 12:39 ` Jan Niehusmann
@ 2003-08-18 13:00 ` Alasdair G Kergon
2003-08-18 13:28 ` markw
2003-08-18 16:10 ` markw
1 sibling, 2 replies; 13+ messages in thread
From: Alasdair G Kergon @ 2003-08-18 13:00 UTC (permalink / raw)
To: linux-lvm
On Mon, Aug 18, 2003 at 10:32:42AM -0700, markw@osdl.org wrote:
> Hmmm, I changed the number, but when I do a 'make clean' and a 'make',
> I don't see dm-table.c compiled anywhere in the device-mapper tree or
> the LVM2 tools. Am I neglecting something obvious?
It's hard-coded into the kernel I'm afraid, not the tools:
Are you editing <your_kernel_source_dir>/drivers/md/dm-table.c then
rebuilding the kernel (or module, if it's a module)?
Alasdair
--
agk@uk.sistina.com
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [linux-lvm] lvcreate with a 52 drive volume
2003-08-18 13:00 ` Alasdair G Kergon
@ 2003-08-18 13:28 ` markw
2003-08-18 16:10 ` markw
1 sibling, 0 replies; 13+ messages in thread
From: markw @ 2003-08-18 13:28 UTC (permalink / raw)
To: linux-lvm
On 18 Aug, Alasdair G Kergon wrote:
> On Mon, Aug 18, 2003 at 10:32:42AM -0700, markw@osdl.org wrote:
>> Hmmm, I changed the number, but when I do a 'make clean' and a 'make',
>> I don't see dm-table.c compiled anywhere in the device-mapper tree or
>> the LVM2 tools. Am I neglecting something obvious?
>
> It's hard-coded into the kernel I'm afraid, not the tools:
>
> Are you editing <your_kernel_source_dir>/drivers/md/dm-table.c then
> rebuilding the kernel (or module, if it's a module)?
Aha, no I'm not. I will try that now. :)
Thanks,
Mark
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [linux-lvm] lvcreate with a 52 drive volume
2003-08-18 13:00 ` Alasdair G Kergon
2003-08-18 13:28 ` markw
@ 2003-08-18 16:10 ` markw
2003-08-18 16:21 ` Alasdair G Kergon
1 sibling, 1 reply; 13+ messages in thread
From: markw @ 2003-08-18 16:10 UTC (permalink / raw)
To: linux-lvm, agk
Ok, I increased the size of argv to 2048 in the dm-table.c file that's
part of the linux-2.6.0-test3 tree, and then I got the following kernel
oops when I ran lvcreate:
Unable to handle kernel NULL pointer dereference at virtual address 00000000
printing eip:
02142cf9
*pde = 00000000
Oops: 0000 [#1]
SMP
CPU: 2048
EIP: 0060:[<02142cf9>] Not tainted VLI
EFLAGS: 00010046
EIP is at __kmalloc+0x4d/0x7a
eax: 00000800 ebx: d5e06000 ecx: d9eef520 edx: 00000000
esi: 00000246 edi: 000000d0 ebp: 00000000 esp: d5e07ea0
ds: 007b es: 007b ss: 0068
Process (pid: 0, threadinfo=d5e06000 task=5b782032)
Stack: 65746365 d5e07f08 d5e07f08 da93c080 00000008 022b0290 000001b0 000000d0
0000000a 3a363164 043c2000 00000007 da93714c 00000034 da937160 da93c080
d5c2d280 da93c0ac d5e07f08 022af594 da93c080 0000006a d5e07f08 da93715c
Call Trace:
[<022b0290>] stripe_ctr+0x1da/0x1e2
[<022af594>] dm_table_add_target+0x156/0x1ac
Code: e3 39 c1 76 12 83 c2 0c 8b 02 85 c0 75 f3 31 c0 83 c4 08 5b 5e 5f c3 f7 c7 01 00 00 00 74 34 8b 4a 08 9c 5e fa 8b 43 10 8b 14 81 <8b> 02 85 c0 74 14 83 e8 01 c7 42 0c 01 00 00 00 89 02 8b 44 82
Unable to handle kernel NULL pointer dereference at virtual address 00000000
printing eip:
0212a6a9
*pde = 00000000
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [linux-lvm] lvcreate with a 52 drive volume
2003-08-18 16:10 ` markw
@ 2003-08-18 16:21 ` Alasdair G Kergon
2003-08-18 19:01 ` markw
0 siblings, 1 reply; 13+ messages in thread
From: Alasdair G Kergon @ 2003-08-18 16:21 UTC (permalink / raw)
To: linux-lvm
On Mon, Aug 18, 2003 at 02:09:18PM -0700, markw@osdl.org wrote:
> Ok, I increased the size of argv to 2048 in the dm-table.c file that's
2048 is probably too big for the kernel stack.
Set it only as big as you need it.
We're working on a proper fix.
Alasdair
--
agk@uk.sistina.com
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [linux-lvm] lvcreate with a 52 drive volume
2003-08-18 16:21 ` Alasdair G Kergon
@ 2003-08-18 19:01 ` markw
2003-08-19 10:36 ` Alasdair G Kergon
0 siblings, 1 reply; 13+ messages in thread
From: markw @ 2003-08-18 19:01 UTC (permalink / raw)
To: linux-lvm
On 18 Aug, Alasdair G Kergon wrote:
> On Mon, Aug 18, 2003 at 02:09:18PM -0700, markw@osdl.org wrote:
>> Ok, I increased the size of argv to 2048 in the dm-table.c file that's
>
> 2048 is probably too big for the kernel stack.
>
> Set it only as big as you need it.
>
> We're working on a proper fix.
>
> Alasdair
Yeah, I got greedy, 1024 worked for me. :)
Thanks again,
Mark
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [linux-lvm] lvcreate with a 52 drive volume
2003-08-18 19:01 ` markw
@ 2003-08-19 10:36 ` Alasdair G Kergon
2003-08-19 15:14 ` markw
0 siblings, 1 reply; 13+ messages in thread
From: Alasdair G Kergon @ 2003-08-19 10:36 UTC (permalink / raw)
To: linux-lvm; +Cc: dm-devel
[-- Attachment #1: Type: text/plain, Size: 567 bytes --]
On Mon, Aug 18, 2003 at 05:00:12PM -0700, markw@osdl.org wrote:
> On 18 Aug, Alasdair G Kergon wrote:
> > On Mon, Aug 18, 2003 at 02:09:18PM -0700, markw@osdl.org wrote:
> >> Ok, I increased the size of argv to 2048 in the dm-table.c file that's
> > 2048 is probably too big for the kernel stack.
> > Set it only as big as you need it.
> Yeah, I got greedy, 1024 worked for me. :)
Here's a patch to try that removes the hard-coded limit of 32.
(Plus one to fix the error message if you give a linear
target more than 2 arguments.)
Alasdair
--
agk@uk.sistina.com
[-- Attachment #2: dm_argv.patch --]
[-- Type: text/plain, Size: 1910 bytes --]
Remove hard-coded limit of 32 arguments per target.
--- linux-2.4.21/drivers/md/dm-table.c Tue Jul 1 20:17:31 2003
+++ linux/drivers/md/dm-table.c Tue Aug 19 15:43:50 2003
@@ -17,6 +17,7 @@
#define NODE_SIZE L1_CACHE_BYTES
#define KEYS_PER_NODE (NODE_SIZE / sizeof(sector_t))
#define CHILDREN_PER_NODE (KEYS_PER_NODE + 1)
+#define MAX_TARGET_ARGS 64
struct dm_table {
atomic_t holders;
@@ -443,10 +444,16 @@
/*
* Destructively splits up the argument list to pass to ctr.
*/
-static int split_args(int max, int *argc, char **argv, char *input)
+static int split_args(int *argc, char ***argvp, char *input)
{
char *start, *end = input, *out;
+ char **argv;
+ int max_args = MAX_TARGET_ARGS;
+
*argc = 0;
+ argv = kmalloc(sizeof(*argv) * max_args, GFP_NOIO);
+ if (!argv)
+ return -ENOMEM;
while (1) {
start = end;
@@ -475,8 +482,20 @@
}
/* have we already filled the array ? */
- if ((*argc + 1) > max)
- return -EINVAL;
+ if ((*argc + 1) > max_args) {
+ char **argv2;
+
+ max_args *= 2;
+ argv2 = kmalloc(sizeof(*argv2) * max_args, GFP_NOIO);
+ if (!argv2) {
+ kfree(argv);
+ return -ENOMEM;
+ }
+
+ memcpy(argv2, argv, sizeof(*argv) * *argc);
+ kfree(argv);
+ argv = argv2;
+ }
/* we know this is whitespace */
if (*end)
@@ -488,6 +507,7 @@
(*argc)++;
}
+ *argvp = argv;
return 0;
}
@@ -495,7 +515,7 @@
sector_t start, sector_t len, char *params)
{
int r = -EINVAL, argc;
- char *argv[32];
+ char **argv;
struct dm_target *tgt;
if ((r = check_space(t)))
@@ -524,13 +544,14 @@
goto bad;
}
- r = split_args(ARRAY_SIZE(argv), &argc, argv, params);
+ r = split_args(&argc, &argv, params);
if (r) {
- tgt->error = "couldn't split parameters";
+ tgt->error = "couldn't split parameters (insufficient memory)";
goto bad;
}
r = tgt->type->ctr(tgt, argc, argv);
+ kfree(argv);
if (r)
goto bad;
[-- Attachment #3: dm_linear_errmsg.patch --]
[-- Type: text/plain, Size: 385 bytes --]
Fix error message when linear targets gets handed more than 2 arguments.
--- linux-2.4.21/drivers/md/dm-linear.c Fri Jul 4 18:56:24 2003
+++ linux/drivers/md/dm-linear.c Tue Aug 19 16:09:38 2003
@@ -27,7 +27,7 @@
struct linear_c *lc;
if (argc != 2) {
- ti->error = "dm-linear: Not enough arguments";
+ ti->error = "dm-linear: Invalid argument count";
return -EINVAL;
}
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [linux-lvm] lvcreate with a 52 drive volume
2003-08-19 10:36 ` Alasdair G Kergon
@ 2003-08-19 15:14 ` markw
0 siblings, 0 replies; 13+ messages in thread
From: markw @ 2003-08-19 15:14 UTC (permalink / raw)
To: linux-lvm, agk; +Cc: dm-devel
On 19 Aug, Alasdair G Kergon wrote:
> On Mon, Aug 18, 2003 at 05:00:12PM -0700, markw@osdl.org wrote:
>> On 18 Aug, Alasdair G Kergon wrote:
>> > On Mon, Aug 18, 2003 at 02:09:18PM -0700, markw@osdl.org wrote:
>> >> Ok, I increased the size of argv to 2048 in the dm-table.c file that's
>> > 2048 is probably too big for the kernel stack.
>> > Set it only as big as you need it.
>> Yeah, I got greedy, 1024 worked for me. :)
>
> Here's a patch to try that removes the hard-coded limit of 32.
>
> (Plus one to fix the error message if you give a linear
> target more than 2 arguments.)
I've applied it to 2.6.0-test3-mm3 and it works.
Thanks,
Mark
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2003-08-19 15:14 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-08-15 15:12 [linux-lvm] lvcreate with a 52 drive volume markw
2003-08-15 15:32 ` Alasdair G Kergon
2003-08-15 18:05 ` markw
2003-08-16 11:51 ` Alasdair G Kergon
2003-08-18 12:33 ` markw
2003-08-18 12:39 ` Jan Niehusmann
2003-08-18 13:00 ` Alasdair G Kergon
2003-08-18 13:28 ` markw
2003-08-18 16:10 ` markw
2003-08-18 16:21 ` Alasdair G Kergon
2003-08-18 19:01 ` markw
2003-08-19 10:36 ` Alasdair G Kergon
2003-08-19 15:14 ` markw
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox