Re: [dm-devel] Re: 2.6.27-rc5-mmotm0829 - lvm issues at boot, possibledisk_devt() related?

From: Alan D. Brunelle
Date: Tue Sep 02 2008 - 08:16:58 EST


Jens Axboe wrote:
> On Mon, Sep 01 2008, Alasdair G Kergon wrote:
>> On Mon, Sep 01, 2008 at 05:15:58AM -0400, Valdis.Kletnieks@xxxxxx wrote:
>>> On Mon, 01 Sep 2008 09:58:40 +0200, Tejun Heo said:
>>>> Yeah, I made a mistake converting two of them and devt lookup fails when
>>>> the disk is zero sized. Bartlomiej debugged the problem and posted a
>>>> patch and I followed up with an updated patch. It should be fine in the
>>>> next round.
>>>> http://article.gmane.org/gmane.linux.kernel.next/2663
>>>> http://article.gmane.org/gmane.linux.kernel.next/2676
>>>> If you're seeing other problems, please let me know.
>>> Confirming - 2.6.27-rc5-mmotm0829 plus the merge of the 2 above patches
>>> does find the LVM volumes and come up. Thanks for the clue.. :)
>> I expect we'll need some patches to userspace lvm2 to support these extended
>> device numbers properly too...
>>
>> Alasdair (back from holiday)
>
> They'll be defaulting to off from now on, so it should not be a big
> worry. But Alan Brunelle did find that the "10-character limit
> in dm/lib/libdm-deptree is too small".
>

Tejun pointed out:

"dev_t is 32bits and MINORBITS is 20. So, major 12 bits, minor 20
bits, so 4 characters for major, 7 characters for minor."

That would mean: 4+':'+7+'\0' = 13 characters at a minimum, so attached
patch seems to work...
[PATCH] Set major,minor buffers to 13 character to hold largest values

Need 4 for major, 7 for minor, 1 for the separator plus 1 for the
terminator.

Signed-off-by: Alan D. Brunelle <alan.brunelle@xxxxxx>
---
lib/libdm-deptree.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/libdm-deptree.c b/lib/libdm-deptree.c
index c73ed50..a437311 100644
--- a/lib/libdm-deptree.c
+++ b/lib/libdm-deptree.c
@@ -1243,7 +1243,7 @@ static int _emit_areas_line(struct dm_task *dmt __attribute((unused)),
size_t paramsize, int *pos)
{
struct seg_area *area;
- char devbuf[10];
+ char devbuf[13];
int tw;
const char *prefix = "";

@@ -1270,7 +1270,7 @@ static int _emit_segment_line(struct dm_task *dmt, struct load_segment *seg, uin
int pos = 0;
int tw;
int r;
- char originbuf[10], cowbuf[10], logbuf[10];
+ char originbuf[13], cowbuf[13], logbuf[13];
const char *logtype;

switch(seg->type) {
--
1.5.4.3