Date: Thu, 6 Jun 2002 19:17:57 -0700 (PDT) From: KT Sin <ktsin@acm.org> To: freebsd-gnats-submit@FreeBSD.org Subject: bin/38963: Unable to newfs vinum volumes Message-ID: <200206070217.g572HvqS089849@www.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 38963 >Category: bin >Synopsis: Unable to newfs vinum volumes >Confidential: no >Severity: serious >Priority: high >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Jun 06 19:20:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: KT Sin >Release: 5.0-CURRENT >Organization: daddylonglegs.com >Environment: FreeBSD passion.daddylonglegs.com 5.0-CURRENT FreeBSD 5.0-CURRENT #0: Mon Jun 3 22:55:19 SGT 2002 ktsin@passion.daddylonglegs.com:/usr/src/sys/i386/compile/PASSION i386 >Description: passion:~[624]# newfs /dev/vinum/work newfs: /dev/vinum/work: can't figure out filesystem partition The attempt to remove -v flag in revision 1.60 of newfs.c broke newfs when newfsing vinum volumes. A snippet of the diff to rev 1.59: @@ -279,11 +274,11 @@ main(int argc, char *argv[]) if (lp != NULL) { cp = strchr(special, '\0'); cp--; - if (!vflag && (*cp < 'a' || *cp > 'h') && !isdigit(*cp)) + if ((*cp < 'a' || *cp > 'h') && !isdigit(*cp)) errx(1, "%s: can't figure out file system partition", special); - if (vflag || isdigit(*cp)) - pp = &lp->d_partitions[0]; + if (isdigit(*cp)) + pp = &lp->d_partitions[RAW_PART]; else pp = &lp->d_partitions[*cp - 'a']; oldpartition = *pp; We should not have removed vflags from all conditional statements blindly. A better approach is to implicitly set vflag to 1 since we want to make -v the default behaviour. When vflag is 1, (!vflag && (*cp < 'a' || *cp > 'h') && !isdigit(*cp)) is always false and (vflag || isdigit(*cp)) is always true. >How-To-Repeat: Just run newfs on a vinum volume. 8) >Fix: --- sbin/newfs/newfs.c.orig Thu May 16 15:36:55 2002 +++ sbin/newfs/newfs.c Fri Jun 7 09:52:02 2002 @@ -274,13 +274,7 @@ if (lp != NULL) { cp = strchr(special, '\0'); cp--; - if ((*cp < 'a' || *cp > 'h') && !isdigit(*cp)) - errx(1, "%s: can't figure out filesystem partition", - special); - if (isdigit(*cp)) - pp = &lp->d_partitions[RAW_PART]; - else - pp = &lp->d_partitions[*cp - 'a']; + pp = &lp->d_partitions[RAW_PART]; oldpartition = *pp; if (pp->p_size == 0) errx(1, "%s: `%c' partition is unavailable", >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200206070217.g572HvqS089849>