1*4d2f9b07SSascha Wildner /* 2*4d2f9b07SSascha Wildner * Copyright (c) 2018 The DragonFly Project. All rights reserved. 3*4d2f9b07SSascha Wildner * 4*4d2f9b07SSascha Wildner * Redistribution and use in source and binary forms, with or without 5*4d2f9b07SSascha Wildner * modification, are permitted provided that the following conditions 6*4d2f9b07SSascha Wildner * are met: 7*4d2f9b07SSascha Wildner * 8*4d2f9b07SSascha Wildner * 1. Redistributions of source code must retain the above copyright 9*4d2f9b07SSascha Wildner * notice, this list of conditions and the following disclaimer. 10*4d2f9b07SSascha Wildner * 2. Redistributions in binary form must reproduce the above copyright 11*4d2f9b07SSascha Wildner * notice, this list of conditions and the following disclaimer in 12*4d2f9b07SSascha Wildner * the documentation and/or other materials provided with the 13*4d2f9b07SSascha Wildner * distribution. 14*4d2f9b07SSascha Wildner * 3. Neither the name of The DragonFly Project nor the names of its 15*4d2f9b07SSascha Wildner * contributors may be used to endorse or promote products derived 16*4d2f9b07SSascha Wildner * from this software without specific, prior written permission. 17*4d2f9b07SSascha Wildner * 18*4d2f9b07SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19*4d2f9b07SSascha Wildner * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20*4d2f9b07SSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 21*4d2f9b07SSascha Wildner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 22*4d2f9b07SSascha Wildner * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 23*4d2f9b07SSascha Wildner * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 24*4d2f9b07SSascha Wildner * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25*4d2f9b07SSascha Wildner * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 26*4d2f9b07SSascha Wildner * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27*4d2f9b07SSascha Wildner * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 28*4d2f9b07SSascha Wildner * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29*4d2f9b07SSascha Wildner * SUCH DAMAGE. 30*4d2f9b07SSascha Wildner */ 31*4d2f9b07SSascha Wildner 32*4d2f9b07SSascha Wildner #include <sys/param.h> 33*4d2f9b07SSascha Wildner #include <sys/stat.h> 34*4d2f9b07SSascha Wildner #include <sys/time.h> 35*4d2f9b07SSascha Wildner 36*4d2f9b07SSascha Wildner #include <kvm.h> 37*4d2f9b07SSascha Wildner #include <stdio.h> 38*4d2f9b07SSascha Wildner 39*4d2f9b07SSascha Wildner #define _KERNEL_STRUCTURES 40*4d2f9b07SSascha Wildner #include <sys/vnode.h> 41*4d2f9b07SSascha Wildner #include <sys/mount.h> 42*4d2f9b07SSascha Wildner #include <stddef.h> 43*4d2f9b07SSascha Wildner #include <vfs/hammer2/hammer2.h> 44*4d2f9b07SSascha Wildner #include <vfs/hammer2/hammer2_disk.h> 45*4d2f9b07SSascha Wildner #undef _KERNEL_STRUCTURES 46*4d2f9b07SSascha Wildner 47*4d2f9b07SSascha Wildner #include "fstat.h" 48*4d2f9b07SSascha Wildner 49*4d2f9b07SSascha Wildner int 50*4d2f9b07SSascha Wildner hammer2_filestat(struct vnode *vp, struct filestat *fsp) 51*4d2f9b07SSascha Wildner { 52*4d2f9b07SSascha Wildner struct hammer2_inode ino; 53*4d2f9b07SSascha Wildner 54*4d2f9b07SSascha Wildner if (!kread(VTOI(vp), &ino, sizeof(ino))) { 55*4d2f9b07SSascha Wildner dprintf(stderr, "can't read hammer2_inode at %p for pid %d\n", 56*4d2f9b07SSascha Wildner (void *)VTOI(vp), Pid); 57*4d2f9b07SSascha Wildner return 0; 58*4d2f9b07SSascha Wildner } 59*4d2f9b07SSascha Wildner 60*4d2f9b07SSascha Wildner fsp->fsid = fsp->rdev = dev2udev(vp->v_rdev); 61*4d2f9b07SSascha Wildner fsp->mode = ino.meta.mode | mtrans(vp->v_type); 62*4d2f9b07SSascha Wildner fsp->fileid = ino.meta.inum; 63*4d2f9b07SSascha Wildner fsp->size = ino.meta.size; 64*4d2f9b07SSascha Wildner return 1; 65*4d2f9b07SSascha Wildner } 66