NetBSD Problem Report #44286

From www@NetBSD.org  Tue Dec 28 09:44:32 2010
Return-Path: <www@NetBSD.org>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
	by www.NetBSD.org (Postfix) with ESMTP id DFC6B63B89F
	for <gnats-bugs@gnats.NetBSD.org>; Tue, 28 Dec 2010 09:44:31 +0000 (UTC)
Message-Id: <20101228094431.6AAF563B89A@www.NetBSD.org>
Date: Tue, 28 Dec 2010 09:44:31 +0000 (UTC)
From: gremlin@portal-to-web.de
Reply-To: gremlin@portal-to-web.de
To: gnats-bugs@NetBSD.org
Subject: Partition size not correctly recognised in lvm / pvcreate
X-Send-Pr-Version: www-1.0

>Number:         44286
>Category:       bin
>Synopsis:       Partition size not correctly recognised in lvm / pvcreate
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Dec 28 09:45:00 +0000 2010
>Originator:     Martin Mersberger
>Release:        NetBSD-current
>Organization:
>Environment:
NetBSD melon 5.99.41 NetBSD 5.99.41 (GENERIC-PF) #0: Sun Dec 26 23:47:17 UTC 2010  root@melon:/usr/obj/sys/arch/sparc64/compile/GENERIC-PF sparc64

>Description:
When I try to create a LVM physical volume on a raid1 raidframe set, it seems, that DIOCGDINFO is used to determine the size of the wedge.

Looking at the code, dev-io.c, *size /= lab.d_secsize (sector size via disklabel..) - but *size is not set beforehand (ie. when get_dev_size is invoked in filter.c). I guess, that's not correctly implemented at the moment...

ie. a pvcreate (Don't worry about the output dev-io.c:289 - that's some debug I added locally - but at this lines +-10, the error occurs)

melon# lvm pvcreate /dev/rraid0f -vvvv
#/usr/src/external/gpl2/lvm2/dist/tools/lvmcmdline.c:1002         Processing: pvcreate /dev/rraid0f -vvvv
#/usr/src/external/gpl2/lvm2/dist/tools/lvmcmdline.c:1005         O_DIRECT will be used
#/usr/src/external/gpl2/lvm2/dist/lib/config/config.c:992       global/locking_type not found in config: defaulting to 1
#/usr/src/external/gpl2/lvm2/dist/lib/config/config.c:992       global/wait_for_locks not found in config: defaulting to 1
#/usr/src/external/gpl2/lvm2/dist/lib/locking/locking.c:242       File-based locking selected.
#/usr/src/external/gpl2/lvm2/dist/lib/config/config.c:970       global/locking_dir not found in config: defaulting to /var/lock/lvm
#/usr/src/external/gpl2/lvm2/dist/lib/config/config.c:992       metadata/pvmetadatasize not found in config: defaulting to 255
#/usr/src/external/gpl2/lvm2/dist/lib/config/config.c:992       metadata/pvmetadatacopies not found in config: defaulting to 1
#/usr/src/external/gpl2/lvm2/dist/lib/locking/file_locking.c:237       Locking /var/lock/lvm/P_orphans WB
#/usr/src/external/gpl2/lvm2/dist/lib/locking/file_locking.c:143         _do_flock /var/lock/lvm/P_orphans:aux WB
#/usr/src/external/gpl2/lvm2/dist/lib/locking/file_locking.c:143         _do_flock /var/lock/lvm/P_orphans WB
#/usr/src/external/gpl2/lvm2/dist/lib/locking/file_locking.c:53         _undo_flock /var/lock/lvm/P_orphans:aux
#/usr/src/external/gpl2/lvm2/dist/lib/device/dev-io.c:539         Opened /dev/rraid0f RW O_DIRECT
#/usr/src/external/gpl2/lvm2/dist/lib/device/dev-io.c:159         /dev/rraid0f: block size is 512 bytes
#/usr/src/external/gpl2/lvm2/dist/lib/label/label.c:186       /dev/rraid0f: No label detected
#/usr/src/external/gpl2/lvm2/dist/lib/device/dev-io.c:585         Closed /dev/rraid0f
#/usr/src/external/gpl2/lvm2/dist/lib/device/dev-io.c:539         Opened /dev/rraid0f RW O_EXCL O_DIRECT
#/usr/src/external/gpl2/lvm2/dist/lib/device/dev-io.c:585         Closed /dev/rraid0f
#/usr/src/external/gpl2/lvm2/dist/lib/device/dev-io.c:289         Size via DIOCGDINFO initial size is 0
#/usr/src/external/gpl2/lvm2/dist/lib/device/dev-io.c:309       /dev/rraid0f: size is 0 sectors
#/usr/src/external/gpl2/lvm2/dist/lib/metadata/metadata.c:1535   /dev/rraid0f: Size must exceed minimum of 1024 sectors.
#/usr/src/external/gpl2/lvm2/dist/lib/metadata/metadata.c:1393   Failed to setup physical volume "/dev/rraid0f"
#/usr/src/external/gpl2/lvm2/dist/tools/pvcreate.c:105         <backtrace>
#/usr/src/external/gpl2/lvm2/dist/lib/locking/file_locking.c:76       Unlocking /var/lock/lvm/P_orphans
#/usr/src/external/gpl2/lvm2/dist/lib/locking/file_locking.c:53         _undo_flock /var/lock/lvm/P_orphans

>How-To-Repeat:
Try to create a physical volume on a device, which does not support DIOCGWEDGEINFO ioctls. (same effect for example, if you are using a vnd...)
>Fix:
partutil.c does contain some code (getdiskinfo), where partition sizes are calculated via struct disklabel and partition.

IMHO, that code would give better results. 
Anonother option might be, to utilize partutil.c directly in dev-io.c at let partutil do the work.

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.