[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

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

Jens Axboe wrote:
> On Mon, Sep 01 2008, Alasdair G Kergon wrote:
>> On Mon, Sep 01, 2008 at 05:15:58AM -0400, Valdis Kletnieks vt edu 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

Signed-off-by: Alan D. Brunelle <alan brunelle hp com>
 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) {

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]