xref: /dflybsd-src/usr.bin/fstat/tmpfs.c (revision 91ffdfc56308b48600d5b200bd03a4da6ae6e2e4)
162e1ddd2SSascha Wildner /*
262e1ddd2SSascha Wildner  * Copyright (c) 2013 The DragonFly Project.  All rights reserved.
362e1ddd2SSascha Wildner  *
462e1ddd2SSascha Wildner  * Redistribution and use in source and binary forms, with or without
562e1ddd2SSascha Wildner  * modification, are permitted provided that the following conditions
662e1ddd2SSascha Wildner  * are met:
762e1ddd2SSascha Wildner  *
862e1ddd2SSascha Wildner  * 1. Redistributions of source code must retain the above copyright
962e1ddd2SSascha Wildner  *    notice, this list of conditions and the following disclaimer.
1062e1ddd2SSascha Wildner  * 2. Redistributions in binary form must reproduce the above copyright
1162e1ddd2SSascha Wildner  *    notice, this list of conditions and the following disclaimer in
1262e1ddd2SSascha Wildner  *    the documentation and/or other materials provided with the
1362e1ddd2SSascha Wildner  *    distribution.
1462e1ddd2SSascha Wildner  * 3. Neither the name of The DragonFly Project nor the names of its
1562e1ddd2SSascha Wildner  *    contributors may be used to endorse or promote products derived
1662e1ddd2SSascha Wildner  *    from this software without specific, prior written permission.
1762e1ddd2SSascha Wildner  *
1862e1ddd2SSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1962e1ddd2SSascha Wildner  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2062e1ddd2SSascha Wildner  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
2162e1ddd2SSascha Wildner  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
2262e1ddd2SSascha Wildner  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
2362e1ddd2SSascha Wildner  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
2462e1ddd2SSascha Wildner  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
2562e1ddd2SSascha Wildner  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
2662e1ddd2SSascha Wildner  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
2762e1ddd2SSascha Wildner  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
2862e1ddd2SSascha Wildner  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2962e1ddd2SSascha Wildner  * SUCH DAMAGE.
3062e1ddd2SSascha Wildner  */
3162e1ddd2SSascha Wildner 
32*91ffdfc5SSascha Wildner #define _KERNEL_STRUCTURES
33*91ffdfc5SSascha Wildner 
3462e1ddd2SSascha Wildner #include <sys/param.h>
3562e1ddd2SSascha Wildner #include <sys/stat.h>
3662e1ddd2SSascha Wildner #include <sys/time.h>
3762e1ddd2SSascha Wildner 
3862e1ddd2SSascha Wildner #include <kvm.h>
3962e1ddd2SSascha Wildner #include <stdio.h>
4062e1ddd2SSascha Wildner 
4162e1ddd2SSascha Wildner #include <sys/vnode.h>
4262e1ddd2SSascha Wildner #include <vfs/tmpfs/tmpfs.h>
4362e1ddd2SSascha Wildner 
4462e1ddd2SSascha Wildner #include "fstat.h"
4562e1ddd2SSascha Wildner 
4662e1ddd2SSascha Wildner int
tmpfs_filestat(struct vnode * vp,struct filestat * fsp)4762e1ddd2SSascha Wildner tmpfs_filestat(struct vnode *vp, struct filestat *fsp)
4862e1ddd2SSascha Wildner {
4962e1ddd2SSascha Wildner 	struct tmpfs_node ino;
5062e1ddd2SSascha Wildner 	struct mount mount_l;
5162e1ddd2SSascha Wildner 
5262e1ddd2SSascha Wildner 	if (!kread(VTOI(vp), &ino, sizeof(ino))) {
5362e1ddd2SSascha Wildner 		dprintf(stderr, "can't read struct tmpfs_node at %p for pid %d\n",
5462e1ddd2SSascha Wildner 		    VTOI(vp), Pid);
5562e1ddd2SSascha Wildner 		return 0;
5662e1ddd2SSascha Wildner 	}
5762e1ddd2SSascha Wildner 	if (!kread(vp->v_mount, &mount_l, sizeof(struct mount))) {
5862e1ddd2SSascha Wildner 		dprintf(stderr, "can't read struct mount at %p for pid %d\n",
5962e1ddd2SSascha Wildner 		    vp->v_mount, Pid);
6062e1ddd2SSascha Wildner 		return 0;
6162e1ddd2SSascha Wildner 	}
6262e1ddd2SSascha Wildner 	fsp->fsid = mount_l.mnt_stat.f_fsid.val[0];
6362e1ddd2SSascha Wildner 	fsp->mode = ino.tn_mode | mtrans(ino.tn_type);
6462e1ddd2SSascha Wildner 	fsp->fileid = ino.tn_id;
6562e1ddd2SSascha Wildner 	fsp->size = ino.tn_size;
6662e1ddd2SSascha Wildner 	fsp->rdev = ino.tn_spec.tn_rdev;
6762e1ddd2SSascha Wildner 	return 1;
6862e1ddd2SSascha Wildner }
69