From owner-svn-src-head@FreeBSD.ORG Fri Sep 16 08:22:48 2011 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 902BD1065670; Fri, 16 Sep 2011 08:22:48 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7ED408FC0C; Fri, 16 Sep 2011 08:22:48 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p8G8Mmam011048; Fri, 16 Sep 2011 08:22:48 GMT (envelope-from avg@svn.freebsd.org) Received: (from avg@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p8G8MmKf011046; Fri, 16 Sep 2011 08:22:48 GMT (envelope-from avg@svn.freebsd.org) Message-Id: <201109160822.p8G8MmKf011046@svn.freebsd.org> From: Andriy Gapon Date: Fri, 16 Sep 2011 08:22:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r225608 - in head: sys/boot/zfs tools/tools/zfsboottest X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Sep 2011 08:22:48 -0000 Author: avg Date: Fri Sep 16 08:22:48 2011 New Revision: 225608 URL: http://svn.freebsd.org/changeset/base/225608 Log: zfstest: rename to zfsboottest and move to tools Approved by: re (kib) MFC after: 1 week Added: head/tools/tools/zfsboottest/ head/tools/tools/zfsboottest/Makefile (contents, props changed) head/tools/tools/zfsboottest/zfsboottest.c - copied unchanged from r225581, head/sys/boot/zfs/zfstest.c Deleted: head/sys/boot/zfs/zfstest.c Added: head/tools/tools/zfsboottest/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/tools/zfsboottest/Makefile Fri Sep 16 08:22:48 2011 (r225608) @@ -0,0 +1,23 @@ +# $FreeBSD$ + +.PATH: ${.CURDIR}/../../../sys/boot/zfs ${.CURDIR}/../../../sys/cddl/boot/zfs + +PROG= zfsboottest +NO_MAN= + +CFLAGS= -O1 \ + -I${.CURDIR}/../../../sys/boot/zfs \ + -I${.CURDIR}/../../../sys/cddl/boot/zfs \ + -I. \ + -fdiagnostics-show-option \ + -W -Wextra -Wno-sign-compare -Wno-unused-parameter \ + -Werror + +.if ${MACHINE_CPUARCH} == "amd64" +beforedepend zfsboottest.o: machine +CLEANFILES+= machine +machine: + ln -sf ${.CURDIR}/../../../sys/i386/include machine +.endif + +.include Copied: head/tools/tools/zfsboottest/zfsboottest.c (from r225581, head/sys/boot/zfs/zfstest.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/tools/zfsboottest/zfsboottest.c Fri Sep 16 08:22:48 2011 (r225608, copy of r225581, head/sys/boot/zfs/zfstest.c) @@ -0,0 +1,144 @@ +/*- + * Copyright (c) 2010 Doug Rabson + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* $FreeBSD$ */ +/* + * Compile with 'cc -I. -I../../cddl/boot/zfs zfstest.c -o zfstest' + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define NBBY 8 + +void +pager_output(const char *line) +{ + fprintf(stderr, "%s", line); +} + +#include "zfsimpl.c" + +static int +vdev_read(vdev_t *vdev, void *priv, off_t off, void *buf, size_t bytes) +{ + int fd = *(int *) priv; + + if (pread(fd, buf, bytes, off) != bytes) + return (-1); + return (0); +} + +static int +zfs_read(spa_t *spa, dnode_phys_t *dn, void *buf, size_t size, off_t off) +{ + const znode_phys_t *zp = (const znode_phys_t *) dn->dn_bonus; + size_t n; + int rc; + + n = size; + if (off + n > zp->zp_size) + n = zp->zp_size - off; + + rc = dnode_read(spa, dn, off, buf, n); + if (rc) + return (-rc); + + return (n); +} + +int +main(int argc, char** argv) +{ + char buf[512]; + int fd[100]; + struct stat sb; + dnode_phys_t dn; + spa_t *spa; + int i, n, off; + + zfs_init(); + if (argc == 1) { + static char *av[] = { + "zfstest", "COPYRIGHT", + "/dev/da0p2", "/dev/da1p2", "/dev/da2p2", + NULL, + }; + argc = 5; + argv = av; + } + for (i = 2; i < argc; i++) { + fd[i] = open(argv[i], O_RDONLY); + if (fd[i] < 0) + continue; + if (vdev_probe(vdev_read, &fd[i], NULL) != 0) + close(fd[i]); + } + spa_all_status(); + + spa = STAILQ_FIRST(&zfs_pools); + if (spa == NULL) { + fprintf(stderr, "no pools\n"); + exit(1); + } + + if (zfs_mount_pool(spa)) { + fprintf(stderr, "can't mount pool\n"); + exit(1); + } + + if (zfs_lookup(spa, argv[1], &dn)) { + fprintf(stderr, "can't lookup\n"); + exit(1); + } + + if (zfs_dnode_stat(spa, &dn, &sb)) { + fprintf(stderr, "can't stat\n"); + exit(1); + } + + + off = 0; + do { + n = zfs_read(spa, &dn, buf, 512, off); + if (n < 0) { + fprintf(stderr, "zfs_read failed\n"); + exit(1); + } + write(1, buf, n); + off += n; + } while (off < sb.st_size); + + return (0); +}