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