diff options
author | ru <ru@FreeBSD.org> | 2008-04-29 06:48:00 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2008-04-29 06:48:00 +0000 |
commit | 2f007af8077d32f602bef4ba826e379ef66d6665 (patch) | |
tree | f30085e6aff1c406e3ed4c8eaef556277c0b1d31 /usr.bin/fstat | |
parent | 4121b0c965df199689f538ea14e1851ac66a1c37 (diff) | |
download | FreeBSD-src-2f007af8077d32f602bef4ba826e379ef66d6665.zip FreeBSD-src-2f007af8077d32f602bef4ba826e379ef66d6665.tar.gz |
- Fix makefile so it doesn't break the build in some corner cases. [1]
- Remove an extra copy of zfs.c.
Reported by: yar [1]
Diffstat (limited to 'usr.bin/fstat')
-rw-r--r-- | usr.bin/fstat/Makefile | 4 | ||||
-rw-r--r-- | usr.bin/fstat/zfs/zfs.c | 133 |
2 files changed, 3 insertions, 134 deletions
diff --git a/usr.bin/fstat/Makefile b/usr.bin/fstat/Makefile index bcf4df8..45d0e45 100644 --- a/usr.bin/fstat/Makefile +++ b/usr.bin/fstat/Makefile @@ -18,7 +18,9 @@ CFLAGS+=-D_KVM_VNODE CFLAGS+= -DZFS OBJS+= zfs/zfs.o SUBDIR= zfs -zfs/zfs.o: zfs +${PROG}: zfs +zfs/zfs.o: + @cd ${.CURDIR}/zfs && ${MAKE} zfs.o .endif .include <bsd.prog.mk> diff --git a/usr.bin/fstat/zfs/zfs.c b/usr.bin/fstat/zfs/zfs.c deleted file mode 100644 index cb9744d..0000000 --- a/usr.bin/fstat/zfs/zfs.c +++ /dev/null @@ -1,133 +0,0 @@ -/*- - * Copyright (c) 2007 Ulf Lilleengen - * 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$ - */ - -#include <sys/types.h> -#define _KERNEL -#include <sys/mount.h> -#undef _KERNEL -#include <sys/sysctl.h> - -#undef lbolt -#undef lbolt64 -#undef gethrestime_sec -#include <sys/zfs_context.h> -#include <sys/spa.h> -#include <sys/spa_impl.h> -#include <sys/dmu.h> -#include <sys/zap.h> -#include <sys/fs/zfs.h> -#include <sys/zfs_znode.h> - -#include <err.h> -#include <kvm.h> -#include <stdio.h> -#include <stdlib.h> - -#define ZFS -#undef dprintf -#include <fstat.h> - -/* - * Offset calculations that are used to get data from znode without having the - * definition. - */ -#define LOCATION_ZID (2 * sizeof(void *)) -#define LOCATION_ZPHYS(zsize) ((zsize) - (2 * sizeof(void *))) - -int -zfs_filestat(struct vnode *vp, struct filestat *fsp) -{ - - znode_phys_t zphys; - struct mount mount, *mountptr; - uint64_t *zid; - void *znodeptr, *vnodeptr; - char *dataptr; - int *zphys_addr; - size_t len, size; - - len = sizeof(size); - if (sysctlbyname("debug.sizeof.znode", &size, &len, NULL, 0) == -1) { - dprintf(stderr, "error getting sysctl\n"); - return (0); - } - znodeptr = malloc(size); - if (znodeptr == NULL) { - dprintf(stderr, "error allocating memory for znode storage\n"); - return (0); - } - - /* Since we have problems including vnode.h, we'll use the wrappers. */ - vnodeptr = getvnodedata(vp); - if (!KVM_READ(vnodeptr, znodeptr, size)) { - dprintf(stderr, "can't read znode at %p for pid %d\n", - (void *)vnodeptr, Pid); - goto bad; - } - - /* - * z_id field is stored in the third pointer. We therefor skip the two - * first bytes. - * - * Pointer to the z_phys structure is the next last pointer. Therefore - * go back two bytes from the end. - */ - dataptr = znodeptr; - zid = (uint64_t *)(dataptr + LOCATION_ZID); - zphys_addr = (int *)(dataptr + LOCATION_ZPHYS(size)); - - if (!KVM_READ(*zphys_addr, &zphys, sizeof(zphys))) { - dprintf(stderr, "can't read znode_phys at %p for pid %d\n", - zphys_addr, Pid); - goto bad; - } - - /* Get the mount pointer, and read from the address. */ - mountptr = getvnodemount(vp); - if (!KVM_READ(mountptr, &mount, sizeof(mount))) { - dprintf(stderr, "can't read mount at %p for pid %d\n", - (void *)mountptr, Pid); - goto bad; - } - - fsp->fsid = (long)mount.mnt_stat.f_fsid.val[0]; - fsp->fileid = *zid; - /* - * XXX: Shows up wrong in output, but UFS has this error too. Could - * be that we're casting mode-variables from 64-bit to 8-bit or simply - * error in the mode-to-string function. - */ - fsp->mode = (mode_t)zphys.zp_mode; - fsp->size = (u_long)zphys.zp_size; - fsp->rdev = (dev_t)zphys.zp_rdev; - free(znodeptr); - return (1); -bad: - free(znodeptr); - return (0); -} |