64 bit inode changes.

This commit is contained in:
christos 2005-08-19 02:04:03 +00:00
parent d2d5cc4265
commit 50f8955b6e
32 changed files with 517 additions and 388 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: kern_sa.c,v 1.62 2005/06/06 19:56:46 jdc Exp $ */ /* $NetBSD: kern_sa.c,v 1.63 2005/08/19 02:04:03 christos Exp $ */
/*- /*-
* Copyright (c) 2001, 2004, 2005 The NetBSD Foundation, Inc. * Copyright (c) 2001, 2004, 2005 The NetBSD Foundation, Inc.
@ -37,7 +37,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: kern_sa.c,v 1.62 2005/06/06 19:56:46 jdc Exp $"); __KERNEL_RCSID(0, "$NetBSD: kern_sa.c,v 1.63 2005/08/19 02:04:03 christos Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -698,9 +698,34 @@ sa_yield(struct lwp *l)
int int
sys_sa_preempt(struct lwp *l, void *v, register_t *retval) sys_sa_preempt(struct lwp *l, void *v, register_t *retval)
{ {
struct sys_sa_preempt_args /* {
syscallarg(lwpid_t) sa_id;
} */ *uap = v;
int target_lid;
struct proc *p = l->l_proc;
struct lwp *t;
/* XXX Implement me. */ target_lid = SCARG(uap, sa_id);
return (ENOSYS);
LIST_FOREACH(t, &p->p_lwps, l_sibling)
if (t->l_lid == target_lid)
break;
if (t == NULL)
return ESRCH;
/* XXX: Not correct, but the best we can do for now */
if (t != l && t->l_stat == LSONPROC && l->l_cpu != t->l_cpu) {
#ifdef DIAGNOSTIC
printf("reschedule %d\n", t->l_lid);
#endif
need_resched(t->l_cpu);
#ifndef DIAGNOSTIC
} else {
printf("can't reschedule %d\n", t->l_lid);
#endif
}
return 0;
} }

View File

@ -1,4 +1,4 @@
/* $NetBSD: syscalls.c,v 1.160 2005/07/10 22:05:24 thorpej Exp $ */ /* $NetBSD: syscalls.c,v 1.161 2005/08/19 02:04:03 christos Exp $ */
/* /*
* System call names. * System call names.
@ -8,7 +8,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: syscalls.c,v 1.160 2005/07/10 22:05:24 thorpej Exp $"); __KERNEL_RCSID(0, "$NetBSD: syscalls.c,v 1.161 2005/08/19 02:04:03 christos Exp $");
#if defined(_KERNEL_OPT) #if defined(_KERNEL_OPT)
#include "opt_ktrace.h" #include "opt_ktrace.h"
@ -391,15 +391,15 @@ const char *const syscallnames[] = {
"#269 (unimplemented)", /* 269 = unimplemented */ "#269 (unimplemented)", /* 269 = unimplemented */
"__posix_rename", /* 270 = __posix_rename */ "__posix_rename", /* 270 = __posix_rename */
"swapctl", /* 271 = swapctl */ "swapctl", /* 271 = swapctl */
"getdents", /* 272 = getdents */ "compat_30_getdents", /* 272 = compat_30 getdents */
"minherit", /* 273 = minherit */ "minherit", /* 273 = minherit */
"lchmod", /* 274 = lchmod */ "lchmod", /* 274 = lchmod */
"lchown", /* 275 = lchown */ "lchown", /* 275 = lchown */
"lutimes", /* 276 = lutimes */ "lutimes", /* 276 = lutimes */
"__msync13", /* 277 = __msync13 */ "__msync13", /* 277 = __msync13 */
"__stat13", /* 278 = __stat13 */ "compat_30___stat13", /* 278 = compat_30 __stat13 */
"__fstat13", /* 279 = __fstat13 */ "compat_30___fstat13", /* 279 = compat_30 __fstat13 */
"__lstat13", /* 280 = __lstat13 */ "compat_30___lstat13", /* 280 = compat_30 __lstat13 */
"__sigaltstack14", /* 281 = __sigaltstack14 */ "__sigaltstack14", /* 281 = __sigaltstack14 */
"__vfork14", /* 282 = __vfork14 */ "__vfork14", /* 282 = __vfork14 */
"__posix_chown", /* 283 = __posix_chown */ "__posix_chown", /* 283 = __posix_chown */
@ -522,4 +522,8 @@ const char *const syscallnames[] = {
"removexattr", /* 384 = removexattr */ "removexattr", /* 384 = removexattr */
"lremovexattr", /* 385 = lremovexattr */ "lremovexattr", /* 385 = lremovexattr */
"fremovexattr", /* 386 = fremovexattr */ "fremovexattr", /* 386 = fremovexattr */
"__stat30", /* 387 = __stat30 */
"__fstat30", /* 388 = __fstat30 */
"__lstat30", /* 389 = __lstat30 */
"__getdents30", /* 390 = __getdents30 */
}; };

View File

@ -1,10 +1,10 @@
# $NetBSD: syscalls.conf,v 1.8 2004/04/21 01:05:38 christos Exp $ # $NetBSD: syscalls.conf,v 1.9 2005/08/19 02:04:03 christos Exp $
sysnames="syscalls.c" sysnames="syscalls.c"
sysnumhdr="../sys/syscall.h" sysnumhdr="../sys/syscall.h"
syssw="init_sysent.c" syssw="init_sysent.c"
sysarghdr="../sys/syscallargs.h" sysarghdr="../sys/syscallargs.h"
compatopts="compat_43 compat_09 compat_10 compat_11 compat_12 compat_13 compat_14 compat_15 compat_16 compat_20" compatopts="compat_43 compat_09 compat_10 compat_11 compat_12 compat_13 compat_14 compat_15 compat_16 compat_20 compat_30"
libcompatopts="" libcompatopts=""
switchname="sysent" switchname="sysent"

View File

@ -1,4 +1,4 @@
$NetBSD: syscalls.master,v 1.147 2005/07/10 22:04:20 thorpej Exp $ $NetBSD: syscalls.master,v 1.148 2005/08/19 02:04:03 christos Exp $
; @(#)syscalls.master 8.2 (Berkeley) 1/13/94 ; @(#)syscalls.master 8.2 (Berkeley) 1/13/94
@ -562,7 +562,7 @@
270 STD { int sys___posix_rename(const char *from, \ 270 STD { int sys___posix_rename(const char *from, \
const char *to); } const char *to); }
271 STD { int sys_swapctl(int cmd, void *arg, int misc); } 271 STD { int sys_swapctl(int cmd, void *arg, int misc); }
272 STD { int sys_getdents(int fd, char *buf, size_t count); } 272 COMPAT_30 { int sys_getdents(int fd, char *buf, size_t count); }
273 STD { int sys_minherit(void *addr, size_t len, \ 273 STD { int sys_minherit(void *addr, size_t len, \
int inherit); } int inherit); }
274 STD { int sys_lchmod(const char *path, mode_t mode); } 274 STD { int sys_lchmod(const char *path, mode_t mode); }
@ -571,9 +571,9 @@
276 STD { int sys_lutimes(const char *path, \ 276 STD { int sys_lutimes(const char *path, \
const struct timeval *tptr); } const struct timeval *tptr); }
277 STD { int sys___msync13(void *addr, size_t len, int flags); } 277 STD { int sys___msync13(void *addr, size_t len, int flags); }
278 STD { int sys___stat13(const char *path, struct stat *ub); } 278 COMPAT_30 { int sys___stat13(const char *path, struct stat30 *ub); }
279 STD { int sys___fstat13(int fd, struct stat *sb); } 279 COMPAT_30 { int sys___fstat13(int fd, struct stat30 *sb); }
280 STD { int sys___lstat13(const char *path, struct stat *ub); } 280 COMPAT_30 { int sys___lstat13(const char *path, struct stat30 *ub); }
281 STD { int sys___sigaltstack14( \ 281 STD { int sys___sigaltstack14( \
const struct sigaltstack *nss, \ const struct sigaltstack *nss, \
struct sigaltstack *oss); } struct sigaltstack *oss); }
@ -778,3 +778,7 @@
const char *name); } const char *name); }
386 STD { int sys_fremovexattr(int fd, \ 386 STD { int sys_fremovexattr(int fd, \
const char *name); } const char *name); }
387 STD { int sys___stat30(const char *path, struct stat *ub); }
388 STD { int sys___fstat30(int fd, struct stat *sb); }
389 STD { int sys___lstat30(const char *path, struct stat *ub); }
390 STD { int sys___getdents30(int fd, char *buf, size_t count); }

View File

@ -1,4 +1,4 @@
/* $NetBSD: vfs_getcwd.c,v 1.27 2005/06/05 23:47:48 thorpej Exp $ */ /* $NetBSD: vfs_getcwd.c,v 1.28 2005/08/19 02:04:03 christos Exp $ */
/*- /*-
* Copyright (c) 1999 The NetBSD Foundation, Inc. * Copyright (c) 1999 The NetBSD Foundation, Inc.
@ -37,7 +37,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: vfs_getcwd.c,v 1.27 2005/06/05 23:47:48 thorpej Exp $"); __KERNEL_RCSID(0, "$NetBSD: vfs_getcwd.c,v 1.28 2005/08/19 02:04:03 christos Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -57,8 +57,6 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_getcwd.c,v 1.27 2005/06/05 23:47:48 thorpej Exp
#include <sys/sa.h> #include <sys/sa.h>
#include <sys/syscallargs.h> #include <sys/syscallargs.h>
#define DIRENT_MINSIZE (sizeof(struct dirent) - (MAXNAMLEN + 1) + 4)
/* /*
* Vnode variable naming conventions in this file: * Vnode variable naming conventions in this file:
* *
@ -218,7 +216,7 @@ unionread:
reclen = dp->d_reclen; reclen = dp->d_reclen;
/* check for malformed directory.. */ /* check for malformed directory.. */
if (reclen < DIRENT_MINSIZE) { if (reclen < _DIRENT_MINSIZE(dp)) {
error = EINVAL; error = EINVAL;
goto out; goto out;
} }

View File

@ -1,4 +1,4 @@
/* $NetBSD: vfs_syscalls.c,v 1.227 2005/08/05 13:22:23 jmmv Exp $ */ /* $NetBSD: vfs_syscalls.c,v 1.228 2005/08/19 02:04:03 christos Exp $ */
/* /*
* Copyright (c) 1989, 1993 * Copyright (c) 1989, 1993
@ -37,7 +37,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.227 2005/08/05 13:22:23 jmmv Exp $"); __KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.228 2005/08/19 02:04:03 christos Exp $");
#include "opt_compat_netbsd.h" #include "opt_compat_netbsd.h"
#include "opt_compat_43.h" #include "opt_compat_43.h"
@ -2113,9 +2113,9 @@ out:
*/ */
/* ARGSUSED */ /* ARGSUSED */
int int
sys___stat13(struct lwp *l, void *v, register_t *retval) sys___stat30(struct lwp *l, void *v, register_t *retval)
{ {
struct sys___stat13_args /* { struct sys___stat30_args /* {
syscallarg(const char *) path; syscallarg(const char *) path;
syscallarg(struct stat *) ub; syscallarg(struct stat *) ub;
} */ *uap = v; } */ *uap = v;
@ -2141,9 +2141,9 @@ sys___stat13(struct lwp *l, void *v, register_t *retval)
*/ */
/* ARGSUSED */ /* ARGSUSED */
int int
sys___lstat13(struct lwp *l, void *v, register_t *retval) sys___lstat30(struct lwp *l, void *v, register_t *retval)
{ {
struct sys___lstat13_args /* { struct sys___lstat30_args /* {
syscallarg(const char *) path; syscallarg(const char *) path;
syscallarg(struct stat *) ub; syscallarg(struct stat *) ub;
} */ *uap = v; } */ *uap = v;
@ -3256,9 +3256,9 @@ out:
* Read a block of directory entries in a file system independent format. * Read a block of directory entries in a file system independent format.
*/ */
int int
sys_getdents(struct lwp *l, void *v, register_t *retval) sys___getdents30(struct lwp *l, void *v, register_t *retval)
{ {
struct sys_getdents_args /* { struct sys___getdents30_args /* {
syscallarg(int) fd; syscallarg(int) fd;
syscallarg(char *) buf; syscallarg(char *) buf;
syscallarg(size_t) count; syscallarg(size_t) count;

View File

@ -1,4 +1,4 @@
/* $NetBSD: ufs.c,v 1.44 2005/02/26 22:58:57 perry Exp $ */ /* $NetBSD: ufs.c,v 1.45 2005/08/19 02:04:03 christos Exp $ */
/*- /*-
* Copyright (c) 1993 * Copyright (c) 1993
@ -134,6 +134,7 @@ struct fs {
#ifndef indp_t #ifndef indp_t
#define indp_t uint32_t #define indp_t uint32_t
#endif #endif
typedef uint32_t ino32_t;
#ifndef FSBTODB #ifndef FSBTODB
#define FSBTODB(fs, indp) fsbtodb(fs, indp) #define FSBTODB(fs, indp) fsbtodb(fs, indp)
#endif #endif
@ -166,10 +167,10 @@ struct file {
daddr_t f_buf_blkno; /* block number of data block */ daddr_t f_buf_blkno; /* block number of data block */
}; };
static int read_inode(ino_t, struct open_file *); static int read_inode(ino32_t, struct open_file *);
static int block_map(struct open_file *, indp_t, indp_t *); static int block_map(struct open_file *, indp_t, indp_t *);
static int buf_read_file(struct open_file *, char **, size_t *); static int buf_read_file(struct open_file *, char **, size_t *);
static int search_directory(const char *, int, struct open_file *, ino_t *); static int search_directory(const char *, int, struct open_file *, ino32_t *);
#ifdef LIBSA_FFSv1 #ifdef LIBSA_FFSv1
static void ffs_oldfscompat(struct fs *); static void ffs_oldfscompat(struct fs *);
#endif #endif
@ -182,7 +183,7 @@ static int ffs_find_superblock(struct open_file *, struct fs *);
* Find an inode's block. Look it up in the ifile. Whee! * Find an inode's block. Look it up in the ifile. Whee!
*/ */
static int static int
find_inode_sector(ino_t inumber, struct open_file *f, daddr_t *isp) find_inode_sector(ino32_t inumber, struct open_file *f, daddr_t *isp)
{ {
struct file *fp = (struct file *)f->f_fsdata; struct file *fp = (struct file *)f->f_fsdata;
struct fs *fs = fp->f_fs; struct fs *fs = fp->f_fs;
@ -217,7 +218,7 @@ find_inode_sector(ino_t inumber, struct open_file *f, daddr_t *isp)
* Read a new inode into a file structure. * Read a new inode into a file structure.
*/ */
static int static int
read_inode(ino_t inumber, struct open_file *f) read_inode(ino32_t inumber, struct open_file *f)
{ {
struct file *fp = (struct file *)f->f_fsdata; struct file *fp = (struct file *)f->f_fsdata;
struct fs *fs = fp->f_fs; struct fs *fs = fp->f_fs;
@ -440,7 +441,7 @@ buf_read_file(struct open_file *f, char **buf_p, size_t *size_p)
*/ */
static int static int
search_directory(const char *name, int length, struct open_file *f, search_directory(const char *name, int length, struct open_file *f,
ino_t *inumber_p) ino32_t *inumber_p)
{ {
struct file *fp = (struct file *)f->f_fsdata; struct file *fp = (struct file *)f->f_fsdata;
struct direct *dp; struct direct *dp;
@ -461,7 +462,7 @@ search_directory(const char *name, int length, struct open_file *f,
for (;dp < edp; dp = (void *)((char *)dp + dp->d_reclen)) { for (;dp < edp; dp = (void *)((char *)dp + dp->d_reclen)) {
if (dp->d_reclen <= 0) if (dp->d_reclen <= 0)
break; break;
if (dp->d_ino == (ino_t)0) if (dp->d_ino == (ino32_t)0)
continue; continue;
#if BYTE_ORDER == LITTLE_ENDIAN #if BYTE_ORDER == LITTLE_ENDIAN
if (fp->f_fs->fs_maxsymlinklen <= 0) if (fp->f_fs->fs_maxsymlinklen <= 0)
@ -518,12 +519,12 @@ ufs_open(const char *path, struct open_file *f)
const char *cp, *ncp; const char *cp, *ncp;
int c; int c;
#endif #endif
ino_t inumber; ino32_t inumber;
struct file *fp; struct file *fp;
struct fs *fs; struct fs *fs;
int rc; int rc;
#ifndef LIBSA_NO_FS_SYMLINK #ifndef LIBSA_NO_FS_SYMLINK
ino_t parent_inumber; ino32_t parent_inumber;
int nlinks = 0; int nlinks = 0;
char namebuf[MAXPATHLEN+1]; char namebuf[MAXPATHLEN+1];
char *buf; char *buf;
@ -707,7 +708,7 @@ ufs_open(const char *path, struct open_file *f)
if (*cp != '/') if (*cp != '/')
inumber = parent_inumber; inumber = parent_inumber;
else else
inumber = (ino_t)ROOTINO; inumber = (ino32_t)ROOTINO;
if ((rc = read_inode(inumber, f)) != 0) if ((rc = read_inode(inumber, f)) != 0)
goto out; goto out;

View File

@ -1,4 +1,4 @@
/* $NetBSD: ufs_ls.c,v 1.10 2005/04/09 13:04:35 dsl Exp $ */ /* $NetBSD: ufs_ls.c,v 1.11 2005/08/19 02:04:03 christos Exp $ */
/* /*
* Copyright (c) 1993 * Copyright (c) 1993
@ -65,10 +65,12 @@
#define NELEM(x) (sizeof (x) / sizeof(*x)) #define NELEM(x) (sizeof (x) / sizeof(*x))
typedef uint32_t ino32_t;
typedef struct entry_t entry_t; typedef struct entry_t entry_t;
struct entry_t { struct entry_t {
entry_t *e_next; entry_t *e_next;
ino_t e_ino; ino32_t e_ino;
uint8_t e_type; uint8_t e_type;
char e_name[1]; char e_name[1];
}; };

View File

@ -1,12 +1,14 @@
# $NetBSD: Makefile.inc,v 1.4 2001/12/12 12:06:45 lukem Exp $ # $NetBSD: Makefile.inc,v 1.5 2005/08/19 02:04:03 christos Exp $
.if !defined(__SYS_LKM_MAKEFILE_INC) .if !defined(__SYS_LKM_MAKEFILE_INC)
__SYS_LKM_MAKEFILE_INC= 1 __SYS_LKM_MAKEFILE_INC= 1
NOMAN= # defined NOMAN= # defined
CPPFLAGS+=-DLOCKDEBUG -DDEBUG -DDIAGNOSTIC
.include <bsd.own.mk> .include <bsd.own.mk>
WARNS?= 1 WARNS?= 1
CPPFLAGS+=-DDEBUG -DDIAGNOSTIC # -DMALLOCLOG -DLOCKDEBUG
.endif # __SYS_LKM_MAKEFILE_INC .endif # __SYS_LKM_MAKEFILE_INC

View File

@ -1,8 +1,8 @@
# $NetBSD: Makefile,v 1.3 2004/06/29 04:42:54 itojun Exp $ # $NetBSD: Makefile,v 1.4 2005/08/19 02:04:03 christos Exp $
.include "../Makefile.inc" .include "../Makefile.inc"
CPPFLAGS+= -I$S/dist/pf -I$S -DINET6 -DINET CPPFLAGS+= -I$S/dist/pf -I$S -DINET
KMOD= pf KMOD= pf
SRCS= if_pflog.c pf_real.c pf_ioctl.c pf_osfp.c pf_if.c \ SRCS= if_pflog.c pf_real.c pf_ioctl.c pf_osfp.c pf_if.c \
pf_norm.c pf_table.c pf_lkm.c pf_norm.c pf_table.c pf_lkm.c

View File

@ -1,4 +1,4 @@
/* $NetBSD: fdesc_vnops.c,v 1.84 2005/05/29 21:55:33 christos Exp $ */ /* $NetBSD: fdesc_vnops.c,v 1.85 2005/08/19 02:04:03 christos Exp $ */
/* /*
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
@ -41,7 +41,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: fdesc_vnops.c,v 1.84 2005/05/29 21:55:33 christos Exp $"); __KERNEL_RCSID(0, "$NetBSD: fdesc_vnops.c,v 1.85 2005/08/19 02:04:03 christos Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -656,7 +656,6 @@ fdesc_setattr(v)
return (0); return (0);
} }
#define UIO_MX 32
struct fdesc_target { struct fdesc_target {
ino_t ft_fileno; ino_t ft_fileno;
@ -664,7 +663,6 @@ struct fdesc_target {
u_char ft_namlen; u_char ft_namlen;
const char *ft_name; const char *ft_name;
} fdesc_targets[] = { } fdesc_targets[] = {
/* NOTE: The name must be less than UIO_MX-16 chars in length */
#define N(s) sizeof(s)-1, s #define N(s) sizeof(s)-1, s
{ FD_DEVFD, DT_DIR, N("fd") }, { FD_DEVFD, DT_DIR, N("fd") },
{ FD_STDIN, DT_LNK, N("stdin") }, { FD_STDIN, DT_LNK, N("stdin") },
@ -672,6 +670,7 @@ struct fdesc_target {
{ FD_STDERR, DT_LNK, N("stderr") }, { FD_STDERR, DT_LNK, N("stderr") },
{ FD_CTTY, DT_UNKNOWN, N("tty") }, { FD_CTTY, DT_UNKNOWN, N("tty") },
#undef N #undef N
#define UIO_MX _DIRENT_RECLEN((struct dirent *)NULL, sizeof("stderr") - 1)
}; };
static int nfdesc_targets = sizeof(fdesc_targets) / sizeof(fdesc_targets[0]); static int nfdesc_targets = sizeof(fdesc_targets) / sizeof(fdesc_targets[0]);

View File

@ -1,4 +1,4 @@
/* $NetBSD: nfs_bio.c,v 1.132 2005/07/21 10:39:46 yamt Exp $ */ /* $NetBSD: nfs_bio.c,v 1.133 2005/08/19 02:04:03 christos Exp $ */
/* /*
* Copyright (c) 1989, 1993 * Copyright (c) 1989, 1993
@ -35,7 +35,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: nfs_bio.c,v 1.132 2005/07/21 10:39:46 yamt Exp $"); __KERNEL_RCSID(0, "$NetBSD: nfs_bio.c,v 1.133 2005/08/19 02:04:03 christos Exp $");
#include "opt_nfs.h" #include "opt_nfs.h"
#include "opt_ddb.h" #include "opt_ddb.h"
@ -88,10 +88,10 @@ nfs_bioread(vp, uio, ioflag, cred, cflag)
struct proc *p = uio->uio_procp; struct proc *p = uio->uio_procp;
struct nfsmount *nmp = VFSTONFS(vp->v_mount); struct nfsmount *nmp = VFSTONFS(vp->v_mount);
struct nfsdircache *ndp = NULL, *nndp = NULL; struct nfsdircache *ndp = NULL, *nndp = NULL;
caddr_t baddr, ep, edp; caddr_t baddr;
int got_buf = 0, error = 0, n = 0, on = 0, en, enn; int got_buf = 0, error = 0, n = 0, on = 0, en, enn;
int enough = 0; int enough = 0;
struct dirent *dp, *pdp; struct dirent *dp, *pdp, *edp, *ep;
off_t curoff = 0; off_t curoff = 0;
#ifdef DIAGNOSTIC #ifdef DIAGNOSTIC
@ -310,11 +310,12 @@ diragain:
en = ndp->dc_entry; en = ndp->dc_entry;
pdp = dp = (struct dirent *)bp->b_data; pdp = dp = (struct dirent *)bp->b_data;
edp = bp->b_data + bp->b_bcount - bp->b_resid; edp = (struct dirent *)(void *)(bp->b_data + bp->b_bcount -
bp->b_resid);
enn = 0; enn = 0;
while (enn < en && (caddr_t)dp < edp) { while (enn < en && dp < edp) {
pdp = dp; pdp = dp;
dp = (struct dirent *)((caddr_t)dp + dp->d_reclen); dp = _DIRENT_NEXT(dp);
enn++; enn++;
} }
@ -325,7 +326,7 @@ diragain:
* stale. Flush it and try again (i.e. go to * stale. Flush it and try again (i.e. go to
* the server). * the server).
*/ */
if ((caddr_t)dp >= edp || (caddr_t)dp + dp->d_reclen > edp || if (dp >= edp || (struct dirent *)_DIRENT_NEXT(edp) > edp ||
(en > 0 && NFS_GETCOOKIE(pdp) != ndp->dc_cookie)) { (en > 0 && NFS_GETCOOKIE(pdp) != ndp->dc_cookie)) {
#ifdef DEBUG #ifdef DEBUG
printf("invalid cache: %p %p %p off %lx %lx\n", printf("invalid cache: %p %p %p off %lx %lx\n",
@ -350,8 +351,7 @@ diragain:
*/ */
if (en == 0 && pdp == dp) { if (en == 0 && pdp == dp) {
dp = (struct dirent *) dp = _DIRENT_NEXT(dp);
((caddr_t)dp + dp->d_reclen);
enn++; enn++;
} }
@ -361,14 +361,14 @@ diragain:
} else } else
n = bp->b_bcount - bp->b_resid - on; n = bp->b_bcount - bp->b_resid - on;
ep = bp->b_data + on + n; ep = (struct dirent *)(void *)(bp->b_data + on + n);
/* /*
* Find last complete entry to copy, caching entries * Find last complete entry to copy, caching entries
* (if requested) as we go. * (if requested) as we go.
*/ */
while ((caddr_t)dp < ep && (caddr_t)dp + dp->d_reclen <= ep) { while (dp < ep && (struct dirent *)_DIRENT_NEXT(dp) <= ep) {
if (cflag & NFSBIO_CACHECOOKIES) { if (cflag & NFSBIO_CACHECOOKIES) {
nndp = nfs_enterdircache(vp, NFS_GETCOOKIE(pdp), nndp = nfs_enterdircache(vp, NFS_GETCOOKIE(pdp),
ndp->dc_blkcookie, enn, bp->b_lblkno); ndp->dc_blkcookie, enn, bp->b_lblkno);
@ -379,7 +379,7 @@ diragain:
nfs_putdircache(np, nndp); nfs_putdircache(np, nndp);
} }
pdp = dp; pdp = dp;
dp = (struct dirent *)((caddr_t)dp + dp->d_reclen); dp = _DIRENT_NEXT(dp);
enn++; enn++;
} }
nfs_putdircache(np, ndp); nfs_putdircache(np, ndp);
@ -415,7 +415,7 @@ diragain:
} }
} }
n = ((caddr_t)pdp + pdp->d_reclen) - (bp->b_data + on); n = (char *)_DIRENT_NEXT(pdp) - (bp->b_data + on);
/* /*
* If not eof and read aheads are enabled, start one. * If not eof and read aheads are enabled, start one.

View File

@ -1,4 +1,4 @@
/* $NetBSD: nfs_vnops.c,v 1.224 2005/07/21 10:39:46 yamt Exp $ */ /* $NetBSD: nfs_vnops.c,v 1.225 2005/08/19 02:04:04 christos Exp $ */
/* /*
* Copyright (c) 1989, 1993 * Copyright (c) 1989, 1993
@ -39,7 +39,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.224 2005/07/21 10:39:46 yamt Exp $"); __KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.225 2005/08/19 02:04:04 christos Exp $");
#include "opt_inet.h" #include "opt_inet.h"
#include "opt_nfs.h" #include "opt_nfs.h"
@ -262,7 +262,11 @@ extern u_int32_t nfs_xdrneg1;
extern const nfstype nfsv3_type[9]; extern const nfstype nfsv3_type[9];
int nfs_numasync = 0; int nfs_numasync = 0;
#define DIRHDSIZ (sizeof (struct dirent) - (MAXNAMLEN + 1)) #define DIRHDSIZ _DIRENT_NAMEOFF(dp)
#define UIO_ADVANCE(uio, siz) \
(void)((uio)->uio_resid -= (siz), \
(uio)->uio_iov->iov_base = (char *)(uio)->uio_iov->iov_base + (siz), \
(uio)->uio_iov->iov_len -= (siz))
static void nfs_cache_enter(struct vnode *, struct vnode *, static void nfs_cache_enter(struct vnode *, struct vnode *,
struct componentname *); struct componentname *);
@ -1443,10 +1447,8 @@ retry:
mb = m; mb = m;
bpos = mtod(caddr_t, mb) + mb->m_len; bpos = mtod(caddr_t, mb) + mb->m_len;
#endif #endif
iovp->iov_base = (char *)iovp->iov_base + len; UIO_ADVANCE(uiop, len);
iovp->iov_len -= len;
uiop->uio_offset += len; uiop->uio_offset += len;
uiop->uio_resid -= len;
s = splvm(); s = splvm();
simple_lock(&ctx.nwc_slock); simple_lock(&ctx.nwc_slock);
ctx.nwc_mbufcount++; ctx.nwc_mbufcount++;
@ -1471,12 +1473,8 @@ retry:
break; break;
} else if (rlen < len) { } else if (rlen < len) {
backup = len - rlen; backup = len - rlen;
uiop->uio_iov->iov_base = UIO_ADVANCE(uiop, -backup);
(caddr_t)uiop->uio_iov->iov_base -
backup;
uiop->uio_iov->iov_len += backup;
uiop->uio_offset -= backup; uiop->uio_offset -= backup;
uiop->uio_resid += backup;
len = rlen; len = rlen;
} }
commit = fxdr_unsigned(int, *tl++); commit = fxdr_unsigned(int, *tl++);
@ -1536,11 +1534,8 @@ retry:
* then, we should resend them to nfsd. * then, we should resend them to nfsd.
*/ */
backup = origresid - tsiz; backup = origresid - tsiz;
uiop->uio_iov->iov_base = UIO_ADVANCE(uiop, -backup);
(caddr_t)uiop->uio_iov->iov_base - backup;
uiop->uio_iov->iov_len += backup;
uiop->uio_offset -= backup; uiop->uio_offset -= backup;
uiop->uio_resid += backup;
tsiz = origresid; tsiz = origresid;
goto retry; goto retry;
} }
@ -2557,7 +2552,7 @@ nfs_readdirrpc(vp, uiop, cred)
struct nfsmount *nmp = VFSTONFS(vp->v_mount); struct nfsmount *nmp = VFSTONFS(vp->v_mount);
struct nfsnode *dnp = VTONFS(vp); struct nfsnode *dnp = VTONFS(vp);
u_quad_t fileno; u_quad_t fileno;
int error = 0, tlen, more_dirs = 1, blksiz = 0, bigenough = 1; int error = 0, more_dirs = 1, blksiz = 0, bigenough = 1;
#ifndef NFS_V2_ONLY #ifndef NFS_V2_ONLY
int attrflag; int attrflag;
#endif #endif
@ -2651,47 +2646,34 @@ nfs_readdirrpc(vp, uiop, cred)
m_freem(mrep); m_freem(mrep);
goto nfsmout; goto nfsmout;
} }
tlen = nfsm_rndup(len); /* for cookie stashing */
if (tlen == len) reclen = _DIRENT_RECLEN(dp, len) + 2 * sizeof(off_t);
tlen += 4; /* To ensure null termination */
tlen += sizeof (off_t) + sizeof (int);
reclen = ALIGN(tlen + DIRHDSIZ);
tlen = reclen - DIRHDSIZ;
left = NFS_DIRFRAGSIZ - blksiz; left = NFS_DIRFRAGSIZ - blksiz;
if (reclen > left) { if (reclen > left) {
memset(uiop->uio_iov->iov_base, 0, left); memset(uiop->uio_iov->iov_base, 0, left);
dp->d_reclen += left; dp->d_reclen += left;
uiop->uio_iov->iov_base = UIO_ADVANCE(uiop, left);
(caddr_t)uiop->uio_iov->iov_base + left;
uiop->uio_iov->iov_len -= left;
uiop->uio_resid -= left;
blksiz = 0; blksiz = 0;
NFS_STASHCOOKIE(dp, uiop->uio_offset); NFS_STASHCOOKIE(dp, uiop->uio_offset);
} }
if (reclen > uiop->uio_resid) if (reclen > uiop->uio_resid)
bigenough = 0; bigenough = 0;
if (bigenough) { if (bigenough) {
int tlen;
dp = (struct dirent *)uiop->uio_iov->iov_base; dp = (struct dirent *)uiop->uio_iov->iov_base;
dp->d_fileno = (int)fileno; dp->d_fileno = fileno;
dp->d_namlen = len; dp->d_namlen = len;
dp->d_reclen = reclen; dp->d_reclen = reclen;
dp->d_type = DT_UNKNOWN; dp->d_type = DT_UNKNOWN;
blksiz += dp->d_reclen; blksiz += reclen;
if (blksiz == NFS_DIRFRAGSIZ) if (blksiz == NFS_DIRFRAGSIZ)
blksiz = 0; blksiz = 0;
uiop->uio_resid -= DIRHDSIZ; UIO_ADVANCE(uiop, DIRHDSIZ);
uiop->uio_iov->iov_base =
(caddr_t)uiop->uio_iov->iov_base + DIRHDSIZ;
uiop->uio_iov->iov_len -= DIRHDSIZ;
nfsm_mtouio(uiop, len); nfsm_mtouio(uiop, len);
tlen -= len; tlen = reclen - (DIRHDSIZ + len);
/* null terminate */ (void)memset(uiop->uio_iov->iov_base, 0, tlen);
KDASSERT(tlen > 0); UIO_ADVANCE(uiop, tlen);
memset(uiop->uio_iov->iov_base, 0, tlen);
uiop->uio_iov->iov_base =
(caddr_t)uiop->uio_iov->iov_base + tlen;
uiop->uio_iov->iov_len -= tlen;
uiop->uio_resid -= tlen;
} else } else
nfsm_adv(nfsm_rndup(len)); nfsm_adv(nfsm_rndup(len));
#ifndef NFS_V2_ONLY #ifndef NFS_V2_ONLY
@ -2757,10 +2739,7 @@ nfs_readdirrpc(vp, uiop, cred)
memset(uiop->uio_iov->iov_base, 0, left); memset(uiop->uio_iov->iov_base, 0, left);
dp->d_reclen += left; dp->d_reclen += left;
NFS_STASHCOOKIE(dp, uiop->uio_offset); NFS_STASHCOOKIE(dp, uiop->uio_offset);
uiop->uio_iov->iov_base = (caddr_t)uiop->uio_iov->iov_base + UIO_ADVANCE(uiop, left);
left;
uiop->uio_iov->iov_len -= left;
uiop->uio_resid -= left;
} }
/* /*
@ -2799,7 +2778,7 @@ nfs_readdirplusrpc(vp, uiop, cred)
struct nfsnode *dnp = VTONFS(vp), *np; struct nfsnode *dnp = VTONFS(vp), *np;
nfsfh_t *fhp; nfsfh_t *fhp;
u_quad_t fileno; u_quad_t fileno;
int error = 0, tlen, more_dirs = 1, blksiz = 0, doit, bigenough = 1, i; int error = 0, more_dirs = 1, blksiz = 0, doit, bigenough = 1, i;
int attrflag, fhsize, nrpcs = 0, reclen; int attrflag, fhsize, nrpcs = 0, reclen;
struct nfs_fattr fattr, *fp; struct nfs_fattr fattr, *fp;
@ -2857,12 +2836,8 @@ nfs_readdirplusrpc(vp, uiop, cred)
m_freem(mrep); m_freem(mrep);
goto nfsmout; goto nfsmout;
} }
tlen = nfsm_rndup(len); /* for cookie stashing */
if (tlen == len) reclen = _DIRENT_RECLEN(dp, len) * 2 * sizeof(off_t);
tlen += 4; /* To ensure null termination*/
tlen += sizeof (off_t) + sizeof (int);
reclen = ALIGN(tlen + DIRHDSIZ);
tlen = reclen - DIRHDSIZ;
left = NFS_DIRFRAGSIZ - blksiz; left = NFS_DIRFRAGSIZ - blksiz;
if (reclen > left) { if (reclen > left) {
/* /*
@ -2871,40 +2846,30 @@ nfs_readdirplusrpc(vp, uiop, cred)
*/ */
memset(uiop->uio_iov->iov_base, 0, left); memset(uiop->uio_iov->iov_base, 0, left);
dp->d_reclen += left; dp->d_reclen += left;
uiop->uio_iov->iov_base = UIO_ADVANCE(uiop, left);
(caddr_t)uiop->uio_iov->iov_base + left;
uiop->uio_iov->iov_len -= left;
uiop->uio_resid -= left;
NFS_STASHCOOKIE(dp, uiop->uio_offset); NFS_STASHCOOKIE(dp, uiop->uio_offset);
blksiz = 0; blksiz = 0;
} }
if (reclen > uiop->uio_resid) if (reclen > uiop->uio_resid)
bigenough = 0; bigenough = 0;
if (bigenough) { if (bigenough) {
int tlen;
dp = (struct dirent *)uiop->uio_iov->iov_base; dp = (struct dirent *)uiop->uio_iov->iov_base;
dp->d_fileno = (int)fileno; dp->d_fileno = fileno;
dp->d_namlen = len; dp->d_namlen = len;
dp->d_reclen = reclen; dp->d_reclen = reclen;
dp->d_type = DT_UNKNOWN; dp->d_type = DT_UNKNOWN;
blksiz += dp->d_reclen; blksiz += reclen;
if (blksiz == NFS_DIRFRAGSIZ) if (blksiz == NFS_DIRFRAGSIZ)
blksiz = 0; blksiz = 0;
uiop->uio_resid -= DIRHDSIZ; UIO_ADVANCE(uiop, DIRHDSIZ);
uiop->uio_iov->iov_base =
(caddr_t)uiop->uio_iov->iov_base +
DIRHDSIZ;
uiop->uio_iov->iov_len -= DIRHDSIZ;
cnp->cn_nameptr = uiop->uio_iov->iov_base;
cnp->cn_namelen = len;
nfsm_mtouio(uiop, len); nfsm_mtouio(uiop, len);
tlen -= len; tlen = reclen - (DIRHDSIZ + len);
/* null terminate */ (void)memset(uiop->uio_iov->iov_base, 0, tlen);
KDASSERT(tlen > 0); UIO_ADVANCE(uiop, tlen);
memset(uiop->uio_iov->iov_base, 0, tlen); cnp->cn_nameptr = dp->d_name;
uiop->uio_iov->iov_base = cnp->cn_namelen = dp->d_namlen;
(caddr_t)uiop->uio_iov->iov_base + tlen;
uiop->uio_iov->iov_len -= tlen;
uiop->uio_resid -= tlen;
} else } else
nfsm_adv(nfsm_rndup(len)); nfsm_adv(nfsm_rndup(len));
nfsm_dissect(tl, u_int32_t *, 3 * NFSX_UNSIGNED); nfsm_dissect(tl, u_int32_t *, 3 * NFSX_UNSIGNED);
@ -3003,10 +2968,7 @@ nfs_readdirplusrpc(vp, uiop, cred)
memset(uiop->uio_iov->iov_base, 0, left); memset(uiop->uio_iov->iov_base, 0, left);
dp->d_reclen += left; dp->d_reclen += left;
NFS_STASHCOOKIE(dp, uiop->uio_offset); NFS_STASHCOOKIE(dp, uiop->uio_offset);
uiop->uio_iov->iov_base = (caddr_t)uiop->uio_iov->iov_base + UIO_ADVANCE(uiop, left);
left;
uiop->uio_iov->iov_len -= left;
uiop->uio_resid -= left;
} }
/* /*
@ -3480,8 +3442,8 @@ nfs_print(v)
struct vnode *vp = ap->a_vp; struct vnode *vp = ap->a_vp;
struct nfsnode *np = VTONFS(vp); struct nfsnode *np = VTONFS(vp);
printf("tag VT_NFS, fileid %ld fsid 0x%lx", printf("tag VT_NFS, fileid %lld fsid 0x%lx",
np->n_vattr->va_fileid, np->n_vattr->va_fsid); (unsigned long long)np->n_vattr->va_fileid, np->n_vattr->va_fsid);
if (vp->v_type == VFIFO) if (vp->v_type == VFIFO)
fifo_printinfo(vp); fifo_printinfo(vp);
printf("\n"); printf("\n");

View File

@ -1,4 +1,4 @@
/* $NetBSD: dirent.h,v 1.18 2004/12/30 19:43:25 bjh21 Exp $ */ /* $NetBSD: dirent.h,v 1.19 2005/08/19 02:04:04 christos Exp $ */
/*- /*-
* Copyright (c) 1989, 1993 * Copyright (c) 1989, 1993
@ -38,7 +38,7 @@
/* /*
* The dirent structure defines the format of directory entries returned by * The dirent structure defines the format of directory entries returned by
* the getdirentries(2) system call. * the getdents(2) system call.
* *
* A directory entry has a struct dirent at the front of it, containing its * A directory entry has a struct dirent at the front of it, containing its
* inode number, the length of the entry, and the length of the name * inode number, the length of the entry, and the length of the name
@ -46,17 +46,16 @@
* byte boundary with null bytes. All names are guaranteed null terminated. * byte boundary with null bytes. All names are guaranteed null terminated.
* The maximum length of a name in a directory is MAXNAMLEN. * The maximum length of a name in a directory is MAXNAMLEN.
*/ */
struct dirent { struct dirent {
u_int32_t d_fileno; /* file number of entry */ ino_t d_fileno; /* file number of entry */
u_int16_t d_reclen; /* length of this record */ u_int16_t d_reclen; /* length of this record */
u_int16_t d_namlen; /* length of string in d_name */
u_int8_t d_type; /* file type, see below */ u_int8_t d_type; /* file type, see below */
u_int8_t d_namlen; /* length of string in d_name */
#if defined(_NETBSD_SOURCE) #if defined(_NETBSD_SOURCE)
#define MAXNAMLEN 255 #define MAXNAMLEN 511
char d_name[MAXNAMLEN + 1]; /* name must be no longer than this */ char d_name[MAXNAMLEN + 1]; /* name must be no longer than this */
#else #else
char d_name[255 + 1]; /* name must be no longer than this */ char d_name[511 + 1]; /* name must be no longer than this */
#endif #endif
}; };
@ -74,21 +73,59 @@ struct dirent {
#define DT_SOCK 12 #define DT_SOCK 12
#define DT_WHT 14 #define DT_WHT 14
/*
* The _DIRENT_ALIGN macro returns the alignment of struct dirent.
* struct direct and struct dirent12 used 4 byte alignment but
* struct dirent uses 16. We deduce the alignment by checking the
* size of the d_namlen field which used to be u_int8_t in the former
* two and is u_int16_t now.
*/
#define _DIRENT_ALIGN(dp) \
(/*CONSTCOND*/sizeof((dp)->d_namlen) == sizeof(uint8_t) ? 0x3 : 0xf)
/*
* The _DIRENT_NAMEOFF macro returns the offset of the d_name field in
* struct dirent
*/
#define _DIRENT_NAMEOFF(dp) \
((char *)(void *)&(dp)->d_name - (char *)(void *)dp)
/*
* The _DIRENT_RECLEN macro gives the minimum record length which will hold
* a name of size "namlen". This requires the amount of space in struct dirent
* without the d_name field, plus enough space for the name with a terminating
* null byte (namlen+1), rounded up to a the appropriate byte boundary.
*/
#define _DIRENT_RECLEN(dp, namlen) \
((_DIRENT_NAMEOFF(dp) + (namlen) + 1 + _DIRENT_ALIGN(dp)) & \
~_DIRENT_ALIGN(dp))
/*
* The _DIRENT_SIZE macro returns the minimum record length required for
* name name stored in the current record.
*/
#define _DIRENT_SIZE(dp) _DIRENT_RECLEN(dp, (dp)->d_namlen)
/*
* The _DIRENT_NEXT macro advances to the next dirent record.
*/
#define _DIRENT_NEXT(dp) ((void *)((char *)(void *)(dp) + (dp)->d_reclen))
/*
* The _DIRENT_MINSIZE returns the size of an empty (invalid) record.
*/
#define _DIRENT_MINSIZE(dp) _DIRENT_RECLEN(dp, 0)
/* /*
* Convert between stat structure types and directory types. * Convert between stat structure types and directory types.
*/ */
#define IFTODT(mode) (((mode) & 0170000) >> 12) #define IFTODT(mode) (((mode) & 0170000) >> 12)
#define DTTOIF(dirtype) ((dirtype) << 12) #define DTTOIF(dirtype) ((dirtype) << 12)
#endif
/* #if defined(__LIBC12_SOURCE__) || defined(_KERNEL)
* The DIRENT_SIZE macro gives the minimum record length which will hold struct dirent12 {
* the directory entry. This requires the amount of space in struct dirent u_int32_t d_fileno; /* file number of entry */
* without the d_name field, plus enough space for the name with a terminating u_int16_t d_reclen; /* length of this record */
* null byte (dp->d_namlen+1), rounded up to a 4 byte boundary. u_int8_t d_type; /* file type, see below */
*/ u_int8_t d_namlen; /* length of string in d_name */
#define DIRENT_SIZE(dp) \ char d_name[255 + 1]; /* name must be no longer than this */
((sizeof (struct dirent) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)) };
#endif
#endif /* defined(_NETBSD_SOURCE) */
#endif /* !_SYS_DIRENT_H_ */ #endif /* !_SYS_DIRENT_H_ */

View File

@ -1,4 +1,4 @@
/* $NetBSD: stat.h,v 1.48 2005/02/03 19:20:02 perry Exp $ */ /* $NetBSD: stat.h,v 1.49 2005/08/19 02:04:04 christos Exp $ */
/*- /*-
* Copyright (c) 1982, 1986, 1989, 1993 * Copyright (c) 1982, 1986, 1989, 1993
@ -49,7 +49,7 @@
#ifdef _KERNEL #ifdef _KERNEL
struct stat43 { /* BSD-4.3 stat struct */ struct stat43 { /* BSD-4.3 stat struct */
u_int16_t st_dev; /* inode's device */ u_int16_t st_dev; /* inode's device */
ino_t st_ino; /* inode's number */ u_int32_t st_ino; /* inode's number */
u_int16_t st_mode; /* inode protection mode */ u_int16_t st_mode; /* inode protection mode */
u_int16_t st_nlink; /* number of hard links */ u_int16_t st_nlink; /* number of hard links */
u_int16_t st_uid; /* user ID of the file's owner */ u_int16_t st_uid; /* user ID of the file's owner */
@ -66,10 +66,24 @@ struct stat43 { /* BSD-4.3 stat struct */
}; };
#endif /* defined(_KERNEL) */ #endif /* defined(_KERNEL) */
/*
* On systems with 8 byte longs and 4 byte time_ts, padding the time_ts
* is required in order to have a consistent ABI. This is because the
* stat structure used to contain timespecs, which had different
* alignment constraints than a time_t and a long alone. The padding
* should be removed the next time the stat structure ABI is changed.
* (This will happen whever we change to 8 byte time_t.)
*/
#if defined(_LP64) /* XXXX && _BSD_TIME_T_ == int */
#define __STATPAD(x) int x;
#else
#define __STATPAD(x) /* nothing */
#endif
#if defined(__LIBC12_SOURCE__) || defined(_KERNEL) #if defined(__LIBC12_SOURCE__) || defined(_KERNEL)
struct stat12 { /* NetBSD-1.2 stat struct */ struct stat12 { /* NetBSD-1.2 stat struct */
dev_t st_dev; /* inode's device */ dev_t st_dev; /* inode's device */
ino_t st_ino; /* inode's number */ u_int32_t st_ino; /* inode's number */
u_int16_t st_mode; /* inode protection mode */ u_int16_t st_mode; /* inode protection mode */
u_int16_t st_nlink; /* number of hard links */ u_int16_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of the file's owner */ uid_t st_uid; /* user ID of the file's owner */
@ -86,25 +100,9 @@ struct stat12 { /* NetBSD-1.2 stat struct */
int32_t st_lspare; int32_t st_lspare;
int64_t st_qspare[2]; int64_t st_qspare[2];
}; };
#endif /* defined(__LIBC12_SOURCE__) || defined(_KERNEL) */ struct stat13 {
/*
* On systems with 8 byte longs and 4 byte time_ts, padding the time_ts
* is required in order to have a consistent ABI. This is because the
* stat structure used to contain timespecs, which had different
* alignment constraints than a time_t and a long alone. The padding
* should be removed the next time the stat structure ABI is changed.
* (This will happen whever we change to 8 byte time_t.)
*/
#if defined(_LP64) /* XXXX && _BSD_TIME_T_ == int */
#define __STATPAD(x) int x;
#else
#define __STATPAD(x) /* nothing */
#endif
struct stat {
dev_t st_dev; /* inode's device */ dev_t st_dev; /* inode's device */
ino_t st_ino; /* inode's number */ uint32_t st_ino; /* inode's number */
mode_t st_mode; /* inode protection mode */ mode_t st_mode; /* inode protection mode */
nlink_t st_nlink; /* number of hard links */ nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of the file's owner */ uid_t st_uid; /* user ID of the file's owner */
@ -144,6 +142,45 @@ struct stat {
#endif #endif
}; };
#endif /* defined(__LIBC12_SOURCE__) || defined(_KERNEL) */
struct stat {
dev_t st_dev; /* inode's device */
mode_t st_mode; /* inode protection mode */
ino_t st_ino; /* inode's number */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of the file's owner */
gid_t st_gid; /* group ID of the file's group */
dev_t st_rdev; /* device type */
#if defined(_NETBSD_SOURCE)
struct timespec st_atimespec;/* time of last access */
struct timespec st_mtimespec;/* time of last data modification */
struct timespec st_ctimespec;/* time of last file status change */
struct timespec st_birthtimespec; /* time of creation */
#else
__STATPAD(__pad0)
time_t st_atime; /* time of last access */
__STATPAD(__pad1)
long st_atimensec; /* nsec of last access */
time_t st_mtime; /* time of last data modification */
__STATPAD(__pad2)
long st_mtimensec; /* nsec of last data modification */
time_t st_ctime; /* time of last file status change */
__STATPAD(__pad3)
long st_ctimensec; /* nsec of last file status change */
time_t st_birthtime; /* time of creation */
__STATPAD(__pad4)
long st_birthtimensec; /* nsec of time of creation */
#endif
off_t st_size; /* file size, in bytes */
blkcnt_t st_blocks; /* blocks allocated for file */
blksize_t st_blksize; /* optimal blocksize for I/O */
u_int32_t st_flags; /* user defined flags for file */
u_int32_t st_gen; /* file generation number */
u_int32_t st_spare[2];
};
#undef __STATPAD #undef __STATPAD
#if defined(_NETBSD_SOURCE) #if defined(_NETBSD_SOURCE)
@ -282,20 +319,23 @@ int mkfifo(const char *, mode_t);
#ifdef __LIBC12_SOURCE__ #ifdef __LIBC12_SOURCE__
int stat(const char *, struct stat12 *); int stat(const char *, struct stat12 *);
int fstat(int, struct stat12 *); int fstat(int, struct stat12 *);
int __stat13(const char *, struct stat *); int __stat13(const char *, struct stat13 *);
int __fstat13(int, struct stat *); int __fstat13(int, struct stat13 *);
int __stat30(const char *, struct stat *);
int __fstat30(int, struct stat *);
#else #else
int stat(const char *, struct stat *) __RENAME(__stat13); int stat(const char *, struct stat *) __RENAME(__stat30);
int fstat(int, struct stat *) __RENAME(__fstat13); int fstat(int, struct stat *) __RENAME(__fstat30);
#endif #endif
mode_t umask(mode_t); mode_t umask(mode_t);
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) #if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
int fchmod(int, mode_t); int fchmod(int, mode_t);
#ifdef __LIBC12_SOURCE__ #ifdef __LIBC12_SOURCE__
int lstat(const char *, struct stat12 *); int lstat(const char *, struct stat12 *);
int __lstat13(const char *, struct stat *); int __lstat13(const char *, struct stat13 *);
int __lstat30(const char *, struct stat *);
#else #else
int lstat(const char *, struct stat *) __RENAME(__lstat13); int lstat(const char *, struct stat *) __RENAME(__lstat30);
#endif #endif
int mknod(const char *, mode_t, dev_t); int mknod(const char *, mode_t, dev_t);
#endif /* defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) */ #endif /* defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) */

View File

@ -1,4 +1,4 @@
/* $NetBSD: syscall.h,v 1.158 2005/07/10 22:05:24 thorpej Exp $ */ /* $NetBSD: syscall.h,v 1.159 2005/08/19 02:04:04 christos Exp $ */
/* /*
* System call numbers. * System call numbers.
@ -771,8 +771,8 @@
/* syscall: "swapctl" ret: "int" args: "int" "void *" "int" */ /* syscall: "swapctl" ret: "int" args: "int" "void *" "int" */
#define SYS_swapctl 271 #define SYS_swapctl 271
/* syscall: "getdents" ret: "int" args: "int" "char *" "size_t" */ /* syscall: "compat_30_getdents" ret: "int" args: "int" "char *" "size_t" */
#define SYS_getdents 272 #define SYS_compat_30_getdents 272
/* syscall: "minherit" ret: "int" args: "void *" "size_t" "int" */ /* syscall: "minherit" ret: "int" args: "void *" "size_t" "int" */
#define SYS_minherit 273 #define SYS_minherit 273
@ -789,14 +789,14 @@
/* syscall: "__msync13" ret: "int" args: "void *" "size_t" "int" */ /* syscall: "__msync13" ret: "int" args: "void *" "size_t" "int" */
#define SYS___msync13 277 #define SYS___msync13 277
/* syscall: "__stat13" ret: "int" args: "const char *" "struct stat *" */ /* syscall: "compat_30___stat13" ret: "int" args: "const char *" "struct stat30 *" */
#define SYS___stat13 278 #define SYS_compat_30___stat13 278
/* syscall: "__fstat13" ret: "int" args: "int" "struct stat *" */ /* syscall: "compat_30___fstat13" ret: "int" args: "int" "struct stat30 *" */
#define SYS___fstat13 279 #define SYS_compat_30___fstat13 279
/* syscall: "__lstat13" ret: "int" args: "const char *" "struct stat *" */ /* syscall: "compat_30___lstat13" ret: "int" args: "const char *" "struct stat30 *" */
#define SYS___lstat13 280 #define SYS_compat_30___lstat13 280
/* syscall: "__sigaltstack14" ret: "int" args: "const struct sigaltstack *" "struct sigaltstack *" */ /* syscall: "__sigaltstack14" ret: "int" args: "const struct sigaltstack *" "struct sigaltstack *" */
#define SYS___sigaltstack14 281 #define SYS___sigaltstack14 281
@ -1061,5 +1061,17 @@
/* syscall: "fremovexattr" ret: "int" args: "int" "const char *" */ /* syscall: "fremovexattr" ret: "int" args: "int" "const char *" */
#define SYS_fremovexattr 386 #define SYS_fremovexattr 386
#define SYS_MAXSYSCALL 387 /* syscall: "__stat30" ret: "int" args: "const char *" "struct stat *" */
#define SYS___stat30 387
/* syscall: "__fstat30" ret: "int" args: "int" "struct stat *" */
#define SYS___fstat30 388
/* syscall: "__lstat30" ret: "int" args: "const char *" "struct stat *" */
#define SYS___lstat30 389
/* syscall: "__getdents30" ret: "int" args: "int" "char *" "size_t" */
#define SYS___getdents30 390
#define SYS_MAXSYSCALL 391
#define SYS_NSYSENT 512 #define SYS_NSYSENT 512

View File

@ -1,4 +1,4 @@
/* $NetBSD: syscallargs.h,v 1.140 2005/07/10 22:05:24 thorpej Exp $ */ /* $NetBSD: syscallargs.h,v 1.141 2005/08/19 02:04:04 christos Exp $ */
/* /*
* System call argument lists. * System call argument lists.
@ -1157,7 +1157,7 @@ struct sys_swapctl_args {
syscallarg(int) misc; syscallarg(int) misc;
}; };
struct sys_getdents_args { struct compat_30_sys_getdents_args {
syscallarg(int) fd; syscallarg(int) fd;
syscallarg(char *) buf; syscallarg(char *) buf;
syscallarg(size_t) count; syscallarg(size_t) count;
@ -1191,19 +1191,19 @@ struct sys___msync13_args {
syscallarg(int) flags; syscallarg(int) flags;
}; };
struct sys___stat13_args { struct compat_30_sys___stat13_args {
syscallarg(const char *) path; syscallarg(const char *) path;
syscallarg(struct stat *) ub; syscallarg(struct stat30 *) ub;
}; };
struct sys___fstat13_args { struct compat_30_sys___fstat13_args {
syscallarg(int) fd; syscallarg(int) fd;
syscallarg(struct stat *) sb; syscallarg(struct stat30 *) sb;
}; };
struct sys___lstat13_args { struct compat_30_sys___lstat13_args {
syscallarg(const char *) path; syscallarg(const char *) path;
syscallarg(struct stat *) ub; syscallarg(struct stat30 *) ub;
}; };
struct sys___sigaltstack14_args { struct sys___sigaltstack14_args {
@ -1666,6 +1666,27 @@ struct sys_fremovexattr_args {
syscallarg(const char *) name; syscallarg(const char *) name;
}; };
struct sys___stat30_args {
syscallarg(const char *) path;
syscallarg(struct stat *) ub;
};
struct sys___fstat30_args {
syscallarg(int) fd;
syscallarg(struct stat *) sb;
};
struct sys___lstat30_args {
syscallarg(const char *) path;
syscallarg(struct stat *) ub;
};
struct sys___getdents30_args {
syscallarg(int) fd;
syscallarg(char *) buf;
syscallarg(size_t) count;
};
/* /*
* System call prototypes. * System call prototypes.
*/ */
@ -2159,7 +2180,7 @@ int sys___posix_rename(struct lwp *, void *, register_t *);
int sys_swapctl(struct lwp *, void *, register_t *); int sys_swapctl(struct lwp *, void *, register_t *);
int sys_getdents(struct lwp *, void *, register_t *); int compat_30_sys_getdents(struct lwp *, void *, register_t *);
int sys_minherit(struct lwp *, void *, register_t *); int sys_minherit(struct lwp *, void *, register_t *);
@ -2171,11 +2192,11 @@ int sys_lutimes(struct lwp *, void *, register_t *);
int sys___msync13(struct lwp *, void *, register_t *); int sys___msync13(struct lwp *, void *, register_t *);
int sys___stat13(struct lwp *, void *, register_t *); int compat_30_sys___stat13(struct lwp *, void *, register_t *);
int sys___fstat13(struct lwp *, void *, register_t *); int compat_30_sys___fstat13(struct lwp *, void *, register_t *);
int sys___lstat13(struct lwp *, void *, register_t *); int compat_30_sys___lstat13(struct lwp *, void *, register_t *);
int sys___sigaltstack14(struct lwp *, void *, register_t *); int sys___sigaltstack14(struct lwp *, void *, register_t *);
@ -2353,4 +2374,12 @@ int sys_lremovexattr(struct lwp *, void *, register_t *);
int sys_fremovexattr(struct lwp *, void *, register_t *); int sys_fremovexattr(struct lwp *, void *, register_t *);
int sys___stat30(struct lwp *, void *, register_t *);
int sys___fstat30(struct lwp *, void *, register_t *);
int sys___lstat30(struct lwp *, void *, register_t *);
int sys___getdents30(struct lwp *, void *, register_t *);
#endif /* _SYS__SYSCALLARGS_H_ */ #endif /* _SYS__SYSCALLARGS_H_ */

View File

@ -1,4 +1,4 @@
/* $NetBSD: types.h,v 1.67 2005/05/22 12:44:24 kleink Exp $ */ /* $NetBSD: types.h,v 1.68 2005/08/19 02:04:04 christos Exp $ */
/*- /*-
* Copyright (c) 1982, 1986, 1991, 1993, 1994 * Copyright (c) 1982, 1986, 1991, 1993, 1994
@ -162,7 +162,7 @@ typedef __gid_t gid_t; /* group id */
#endif #endif
typedef uint32_t id_t; /* group id, process id or user id */ typedef uint32_t id_t; /* group id, process id or user id */
typedef uint32_t ino_t; /* inode number */ typedef uint64_t ino_t; /* inode number */
typedef long key_t; /* IPC key (for Sys V IPC) */ typedef long key_t; /* IPC key (for Sys V IPC) */
#ifndef mode_t #ifndef mode_t

View File

@ -1,4 +1,4 @@
/* $NetBSD: vnode.h,v 1.141 2005/07/23 12:18:41 yamt Exp $ */ /* $NetBSD: vnode.h,v 1.142 2005/08/19 02:04:04 christos Exp $ */
/* /*
* Copyright (c) 1989, 1993 * Copyright (c) 1989, 1993
@ -191,7 +191,7 @@ struct vattr {
uid_t va_uid; /* owner user id */ uid_t va_uid; /* owner user id */
gid_t va_gid; /* owner group id */ gid_t va_gid; /* owner group id */
long va_fsid; /* file system id (dev for now) */ long va_fsid; /* file system id (dev for now) */
long va_fileid; /* file id */ ino_t va_fileid; /* file id */
u_quad_t va_size; /* file size in bytes */ u_quad_t va_size; /* file size in bytes */
long va_blocksize; /* blocksize preferred for i/o */ long va_blocksize; /* blocksize preferred for i/o */
struct timespec va_atime; /* time of last access */ struct timespec va_atime; /* time of last access */

View File

@ -1,4 +1,4 @@
/* $NetBSD: ext2fs_alloc.c,v 1.24 2005/05/29 21:25:24 christos Exp $ */ /* $NetBSD: ext2fs_alloc.c,v 1.25 2005/08/19 02:04:08 christos Exp $ */
/* /*
* Copyright (c) 1982, 1986, 1989, 1993 * Copyright (c) 1982, 1986, 1989, 1993
@ -65,7 +65,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: ext2fs_alloc.c,v 1.24 2005/05/29 21:25:24 christos Exp $"); __KERNEL_RCSID(0, "$NetBSD: ext2fs_alloc.c,v 1.25 2005/08/19 02:04:08 christos Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -205,8 +205,9 @@ ext2fs_valloc(v)
} }
ip = VTOI(*ap->a_vpp); ip = VTOI(*ap->a_vpp);
if (ip->i_e2fs_mode && ip->i_e2fs_nlink != 0) { if (ip->i_e2fs_mode && ip->i_e2fs_nlink != 0) {
printf("mode = 0%o, nlinks %d, inum = %d, fs = %s\n", printf("mode = 0%o, nlinks %d, inum = %llu, fs = %s\n",
ip->i_e2fs_mode, ip->i_e2fs_nlink, ip->i_number, fs->e2fs_fsmnt); ip->i_e2fs_mode, ip->i_e2fs_nlink,
(unsigned long long)ip->i_number, fs->e2fs_fsmnt);
panic("ext2fs_valloc: dup alloc"); panic("ext2fs_valloc: dup alloc");
} }
@ -537,8 +538,8 @@ ext2fs_blkfree(ip, bno)
fs = ip->i_e2fs; fs = ip->i_e2fs;
cg = dtog(fs, bno); cg = dtog(fs, bno);
if ((u_int)bno >= fs->e2fs.e2fs_bcount) { if ((u_int)bno >= fs->e2fs.e2fs_bcount) {
printf("bad block %lld, ino %d\n", (long long)bno, printf("bad block %lld, ino %llu\n", (long long)bno,
ip->i_number); (unsigned long long)ip->i_number);
ext2fs_fserr(fs, ip->i_e2fs_uid, "bad block"); ext2fs_fserr(fs, ip->i_e2fs_uid, "bad block");
return; return;
} }
@ -588,8 +589,8 @@ ext2fs_vfree(v)
pip = VTOI(ap->a_pvp); pip = VTOI(ap->a_pvp);
fs = pip->i_e2fs; fs = pip->i_e2fs;
if ((u_int)ino >= fs->e2fs.e2fs_icount || (u_int)ino < EXT2_FIRSTINO) if ((u_int)ino >= fs->e2fs.e2fs_icount || (u_int)ino < EXT2_FIRSTINO)
panic("ifree: range: dev = 0x%x, ino = %d, fs = %s", panic("ifree: range: dev = 0x%x, ino = %llu, fs = %s",
pip->i_dev, ino, fs->e2fs_fsmnt); pip->i_dev, (unsigned long long)ino, fs->e2fs_fsmnt);
cg = ino_to_cg(fs, ino); cg = ino_to_cg(fs, ino);
error = bread(pip->i_devvp, error = bread(pip->i_devvp,
fsbtodb(fs, fs->e2fs_gd[cg].ext2bgd_i_bitmap), fsbtodb(fs, fs->e2fs_gd[cg].ext2bgd_i_bitmap),
@ -601,8 +602,8 @@ ext2fs_vfree(v)
ibp = (char *)bp->b_data; ibp = (char *)bp->b_data;
ino = (ino - 1) % fs->e2fs.e2fs_ipg; ino = (ino - 1) % fs->e2fs.e2fs_ipg;
if (isclr(ibp, ino)) { if (isclr(ibp, ino)) {
printf("dev = 0x%x, ino = %d, fs = %s\n", printf("dev = 0x%x, ino = %llu, fs = %s\n",
pip->i_dev, ino, fs->e2fs_fsmnt); pip->i_dev, (unsigned long long)ino, fs->e2fs_fsmnt);
if (fs->e2fs_ronly == 0) if (fs->e2fs_ronly == 0)
panic("ifree: freeing free inode"); panic("ifree: freeing free inode");
} }

View File

@ -1,4 +1,4 @@
/* $NetBSD: ext2fs_lookup.c,v 1.34 2005/06/28 16:53:14 kml Exp $ */ /* $NetBSD: ext2fs_lookup.c,v 1.35 2005/08/19 02:04:08 christos Exp $ */
/* /*
* Modified for NetBSD 1.2E * Modified for NetBSD 1.2E
@ -48,7 +48,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: ext2fs_lookup.c,v 1.34 2005/06/28 16:53:14 kml Exp $"); __KERNEL_RCSID(0, "$NetBSD: ext2fs_lookup.c,v 1.35 2005/08/19 02:04:08 christos Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -112,7 +112,7 @@ ext2fs_dirconv2ffs( e2dir, ffsdir)
nothing anyway, we compute our own reclen according to what nothing anyway, we compute our own reclen according to what
we think is right we think is right
*/ */
ffsdir->d_reclen = DIRENT_SIZE(ffsdir); ffsdir->d_reclen = _DIRENT_SIZE(ffsdir);
} }
/* /*

View File

@ -1,4 +1,4 @@
/* $NetBSD: ffs_alloc.c,v 1.85 2005/07/15 05:01:16 thorpej Exp $ */ /* $NetBSD: ffs_alloc.c,v 1.86 2005/08/19 02:04:09 christos Exp $ */
/* /*
* Copyright (c) 2002 Networks Associates Technology, Inc. * Copyright (c) 2002 Networks Associates Technology, Inc.
@ -41,7 +41,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: ffs_alloc.c,v 1.85 2005/07/15 05:01:16 thorpej Exp $"); __KERNEL_RCSID(0, "$NetBSD: ffs_alloc.c,v 1.86 2005/08/19 02:04:09 christos Exp $");
#if defined(_KERNEL_OPT) #if defined(_KERNEL_OPT)
#include "opt_ffs.h" #include "opt_ffs.h"
@ -700,7 +700,8 @@ ffs_valloc(void *v)
DIP(ip, gen), ip->i_gen); DIP(ip, gen), ip->i_gen);
printf("size %llx blocks %llx\n", printf("size %llx blocks %llx\n",
(long long)DIP(ip, size), (long long)DIP(ip, blocks)); (long long)DIP(ip, size), (long long)DIP(ip, blocks));
printf("ino %u ipref %u\n", ino, ipref); printf("ino %llu ipref %llu\n", (unsigned long long)ino,
(unsigned long long)ipref);
#if 0 #if 0
error = bread(ump->um_devvp, fsbtodb(fs, ino_to_fsba(fs, ino)), error = bread(ump->um_devvp, fsbtodb(fs, ino_to_fsba(fs, ino)),
(int)fs->fs_bsize, NOCRED, &bp); (int)fs->fs_bsize, NOCRED, &bp);
@ -710,8 +711,8 @@ ffs_valloc(void *v)
panic("ffs_valloc: dup alloc"); panic("ffs_valloc: dup alloc");
} }
if (DIP(ip, blocks)) { /* XXX */ if (DIP(ip, blocks)) { /* XXX */
printf("free inode %s/%d had %" PRId64 " blocks\n", printf("free inode %s/%llu had %" PRId64 " blocks\n",
fs->fs_fsmnt, ino, DIP(ip, blocks)); fs->fs_fsmnt, (unsigned long long)ino, DIP(ip, blocks));
DIP_ASSIGN(ip, blocks, 0); DIP_ASSIGN(ip, blocks, 0);
} }
ip->i_flag &= ~IN_SPACECOUNTED; ip->i_flag &= ~IN_SPACECOUNTED;
@ -1528,7 +1529,8 @@ ffs_blkfree(struct fs *fs, struct vnode *devvp, daddr_t bno, long size,
} }
if (bno >= fs->fs_size) { if (bno >= fs->fs_size) {
printf("bad block %" PRId64 ", ino %d\n", bno, inum); printf("bad block %" PRId64 ", ino %llu\n", bno,
(unsigned long long)inum);
ffs_fserr(fs, inum, "bad block"); ffs_fserr(fs, inum, "bad block");
return; return;
} }
@ -1732,8 +1734,8 @@ ffs_freefile(struct fs *fs, struct vnode *devvp, ino_t ino, int mode)
cgbno = fsbtodb(fs, cgtod(fs, cg)); cgbno = fsbtodb(fs, cgtod(fs, cg));
} }
if ((u_int)ino >= fs->fs_ipg * fs->fs_ncg) if ((u_int)ino >= fs->fs_ipg * fs->fs_ncg)
panic("ifree: range: dev = 0x%x, ino = %d, fs = %s", panic("ifree: range: dev = 0x%x, ino = %llu, fs = %s",
dev, ino, fs->fs_fsmnt); dev, (unsigned long long)ino, fs->fs_fsmnt);
error = bread(devvp, cgbno, (int)fs->fs_cgsize, NOCRED, &bp); error = bread(devvp, cgbno, (int)fs->fs_cgsize, NOCRED, &bp);
if (error) { if (error) {
brelse(bp); brelse(bp);
@ -1751,8 +1753,9 @@ ffs_freefile(struct fs *fs, struct vnode *devvp, ino_t ino, int mode)
inosused = cg_inosused(cgp, needswap); inosused = cg_inosused(cgp, needswap);
ino %= fs->fs_ipg; ino %= fs->fs_ipg;
if (isclr(inosused, ino)) { if (isclr(inosused, ino)) {
printf("ifree: dev = 0x%x, ino = %d, fs = %s\n", printf("ifree: dev = 0x%x, ino = %llu, fs = %s\n",
dev, ino + cg * fs->fs_ipg, fs->fs_fsmnt); dev, (unsigned long long)ino + cg * fs->fs_ipg,
fs->fs_fsmnt);
if (fs->fs_ronly == 0) if (fs->fs_ronly == 0)
panic("ifree: freeing free inode"); panic("ifree: freeing free inode");
} }

View File

@ -1,4 +1,4 @@
/* $NetBSD: ffs_snapshot.c,v 1.18 2005/07/15 05:01:16 thorpej Exp $ */ /* $NetBSD: ffs_snapshot.c,v 1.19 2005/08/19 02:04:09 christos Exp $ */
/* /*
* Copyright 2000 Marshall Kirk McKusick. All Rights Reserved. * Copyright 2000 Marshall Kirk McKusick. All Rights Reserved.
@ -38,7 +38,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: ffs_snapshot.c,v 1.18 2005/07/15 05:01:16 thorpej Exp $"); __KERNEL_RCSID(0, "$NetBSD: ffs_snapshot.c,v 1.19 2005/08/19 02:04:09 christos Exp $");
#if defined(_KERNEL_OPT) #if defined(_KERNEL_OPT)
#include "opt_ffs.h" #include "opt_ffs.h"
@ -495,7 +495,8 @@ loop:
VI_LOCK(devvp); VI_LOCK(devvp);
fs->fs_snapinum[snaploc] = ip->i_number; fs->fs_snapinum[snaploc] = ip->i_number;
if (ip->i_nextsnap.tqe_prev != 0) if (ip->i_nextsnap.tqe_prev != 0)
panic("ffs_snapshot: %d already on list", ip->i_number); panic("ffs_snapshot: %llu already on list",
(unsigned long long)ip->i_number);
TAILQ_INSERT_TAIL(&ump->um_snapshots, ip, i_nextsnap); TAILQ_INSERT_TAIL(&ump->um_snapshots, ip, i_nextsnap);
VI_UNLOCK(devvp); VI_UNLOCK(devvp);
if (xp == NULL) if (xp == NULL)
@ -1325,8 +1326,8 @@ ffs_snapgone(struct inode *ip)
vrele(ITOV(ip)); vrele(ITOV(ip));
#ifdef DEBUG #ifdef DEBUG
else if (snapdebug) else if (snapdebug)
printf("ffs_snapgone: lost snapshot vnode %d\n", printf("ffs_snapgone: lost snapshot vnode %llu\n",
ip->i_number); (unsigned long long)ip->i_number);
#endif #endif
/* /*
* Delete snapshot inode from superblock. Keep list dense. * Delete snapshot inode from superblock. Keep list dense.
@ -1562,9 +1563,11 @@ retry:
if (size == fs->fs_bsize) { if (size == fs->fs_bsize) {
#ifdef DEBUG #ifdef DEBUG
if (snapdebug) if (snapdebug)
printf("%s %d lbn %" PRId64 " from inum %d\n", printf("%s %llu lbn %" PRId64
"Grabonremove: snapino", ip->i_number, "from inum %llu\n",
lbn, inum); "Grabonremove: snapino",
(unsigned long long)ip->i_number,
lbn, (unsigned long long)inum);
#endif #endif
if (lbn < NDADDR) { if (lbn < NDADDR) {
db_assign(ip, lbn, bno); db_assign(ip, lbn, bno);
@ -1581,9 +1584,10 @@ retry:
brelse(ibp); brelse(ibp);
#ifdef DEBUG #ifdef DEBUG
if (snapdebug) if (snapdebug)
printf("%s%d lbn %" PRId64 " %s %d size %ld\n", printf("%s%llu lbn %" PRId64 " %s %llu size %ld\n",
"Copyonremove: snapino ", ip->i_number, "Copyonremove: snapino ",
lbn, "for inum", inum, size); (unsigned long long)ip->i_number,
lbn, "for inum", (unsigned long long)inum, size);
#endif #endif
/* /*
* If we have already read the old block contents, then * If we have already read the old block contents, then
@ -1747,8 +1751,8 @@ ffs_snapshot_mount(struct mount *mp)
*/ */
VI_LOCK(devvp); VI_LOCK(devvp);
if (ip->i_nextsnap.tqe_prev != 0) if (ip->i_nextsnap.tqe_prev != 0)
panic("ffs_snapshot_mount: %d already on list", panic("ffs_snapshot_mount: %llu already on list",
ip->i_number); (unsigned long long)ip->i_number);
else else
TAILQ_INSERT_TAIL(&ump->um_snapshots, ip, i_nextsnap); TAILQ_INSERT_TAIL(&ump->um_snapshots, ip, i_nextsnap);
vp->v_flag |= VSYSTEM; vp->v_flag |= VSYSTEM;
@ -1924,12 +1928,13 @@ retry:
snapshot_locked = 1; snapshot_locked = 1;
#ifdef DEBUG #ifdef DEBUG
if (snapdebug) { if (snapdebug) {
printf("Copyonwrite: snapino %d lbn %" PRId64 " for ", printf("Copyonwrite: snapino %llu lbn %" PRId64 " for ",
ip->i_number, lbn); (unsigned long long)ip->i_number, lbn);
if (bp->b_vp == devvp) if (bp->b_vp == devvp)
printf("fs metadata"); printf("fs metadata");
else else
printf("inum %d", VTOI(bp->b_vp)->i_number); printf("inum %llu", (unsigned long long)
VTOI(bp->b_vp)->i_number);
printf(" lblkno %" PRId64 "\n", bp->b_lblkno); printf(" lblkno %" PRId64 "\n", bp->b_lblkno);
} }
#endif #endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: ffs_softdep.c,v 1.66 2005/05/30 22:13:22 christos Exp $ */ /* $NetBSD: ffs_softdep.c,v 1.67 2005/08/19 02:04:09 christos Exp $ */
/* /*
* Copyright 1998 Marshall Kirk McKusick. All Rights Reserved. * Copyright 1998 Marshall Kirk McKusick. All Rights Reserved.
@ -33,7 +33,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: ffs_softdep.c,v 1.66 2005/05/30 22:13:22 christos Exp $"); __KERNEL_RCSID(0, "$NetBSD: ffs_softdep.c,v 1.67 2005/08/19 02:04:09 christos Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/buf.h> #include <sys/buf.h>
@ -3051,8 +3051,9 @@ newdirrem(bp, dp, ip, isrmdir, prevdirremp)
if ((dap->da_state & ATTACHED) == 0) if ((dap->da_state & ATTACHED) == 0)
panic("newdirrem: not ATTACHED"); panic("newdirrem: not ATTACHED");
if (dap->da_newinum != ip->i_number) if (dap->da_newinum != ip->i_number)
panic("newdirrem: inum %d should be %d", panic("newdirrem: inum %llu should be %llu",
ip->i_number, dap->da_newinum); (unsigned long long)ip->i_number,
(unsigned long long)dap->da_newinum);
/* /*
* If we are deleting a changed name that never made it to disk, * If we are deleting a changed name that never made it to disk,
* then return the dirrem describing the previous inode (which * then return the dirrem describing the previous inode (which
@ -3517,10 +3518,10 @@ initiate_write_filepage(pagedep, bp)
ep = (struct direct *) ep = (struct direct *)
((char *)bp->b_data + dap->da_offset); ((char *)bp->b_data + dap->da_offset);
if (ufs_rw32(ep->d_ino, needswap) != dap->da_newinum) if (ufs_rw32(ep->d_ino, needswap) != dap->da_newinum)
panic("%s: dir inum %d != new %d", panic("%s: dir inum %d != new %llu",
"initiate_write_filepage", "initiate_write_filepage",
ufs_rw32(ep->d_ino, needswap), ufs_rw32(ep->d_ino, needswap),
dap->da_newinum); (unsigned long long)dap->da_newinum);
if (dap->da_state & DIRCHG) if (dap->da_state & DIRCHG)
ep->d_ino = ep->d_ino =
ufs_rw32(dap->da_previous->dm_oldinum, ufs_rw32(dap->da_previous->dm_oldinum,

View File

@ -1,4 +1,4 @@
/* $NetBSD: lfs_alloc.c,v 1.83 2005/05/29 21:25:24 christos Exp $ */ /* $NetBSD: lfs_alloc.c,v 1.84 2005/08/19 02:04:09 christos Exp $ */
/*- /*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc. * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@ -67,7 +67,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: lfs_alloc.c,v 1.83 2005/05/29 21:25:24 christos Exp $"); __KERNEL_RCSID(0, "$NetBSD: lfs_alloc.c,v 1.84 2005/08/19 02:04:09 christos Exp $");
#if defined(_KERNEL_OPT) #if defined(_KERNEL_OPT)
#include "opt_quota.h" #include "opt_quota.h"
@ -328,7 +328,8 @@ lfs_valloc(void *v)
*/ */
LFS_IENTRY(ifp, fs, new_ino, bp); LFS_IENTRY(ifp, fs, new_ino, bp);
if (ifp->if_daddr != LFS_UNUSED_DADDR) if (ifp->if_daddr != LFS_UNUSED_DADDR)
panic("lfs_valloc: inuse inode %d on the free list", new_ino); panic("lfs_valloc: inuse inode %llu on the free list",
(unsigned long long)new_ino);
LFS_PUT_HEADFREE(fs, cip, cbp, ifp->if_nextfree); LFS_PUT_HEADFREE(fs, cip, cbp, ifp->if_nextfree);
DLOG((DLOG_ALLOC, "lfs_valloc: headfree %d -> %d\n", new_ino, DLOG((DLOG_ALLOC, "lfs_valloc: headfree %d -> %d\n", new_ino,
ifp->if_nextfree)); ifp->if_nextfree));

View File

@ -1,4 +1,4 @@
/* $NetBSD: lfs_debug.c,v 1.31 2005/05/29 21:25:24 christos Exp $ */ /* $NetBSD: lfs_debug.c,v 1.32 2005/08/19 02:04:09 christos Exp $ */
/*- /*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc. * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@ -71,7 +71,7 @@
#include <machine/stdarg.h> #include <machine/stdarg.h>
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: lfs_debug.c,v 1.31 2005/05/29 21:25:24 christos Exp $"); __KERNEL_RCSID(0, "$NetBSD: lfs_debug.c,v 1.32 2005/08/19 02:04:09 christos Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
#include <sys/namei.h> #include <sys/namei.h>
@ -292,11 +292,13 @@ lfs_check_bpp(struct lfs *fs, struct segment *sp, char *file, int line)
(*bpp)->b_blkno, (*bpp)->b_blkno,
blkno); blkno);
} else { } else {
printf("%s:%d: misplace ino %d lbn %" PRId64 printf("%s:%d: misplace ino %llu lbn %" PRId64
" at 0x%" PRIx64 " instead of " " at 0x%" PRIx64 " instead of "
"0x%" PRIx64 "\n", "0x%" PRIx64 "\n",
file, line, file, line,
VTOI((*bpp)->b_vp)->i_number, (*bpp)->b_lblkno, (unsigned long long)
VTOI((*bpp)->b_vp)->i_number,
(*bpp)->b_lblkno,
blkno, blkno,
(*bpp)->b_blkno); (*bpp)->b_blkno);
} }

View File

@ -1,4 +1,4 @@
/* $NetBSD: lfs_segment.c,v 1.164 2005/05/29 21:25:24 christos Exp $ */ /* $NetBSD: lfs_segment.c,v 1.165 2005/08/19 02:04:09 christos Exp $ */
/*- /*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc. * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@ -67,7 +67,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.164 2005/05/29 21:25:24 christos Exp $"); __KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.165 2005/08/19 02:04:09 christos Exp $");
#ifdef DEBUG #ifdef DEBUG
# define vndebug(vp, str) do { \ # define vndebug(vp, str) do { \
@ -1333,9 +1333,9 @@ lfs_update_single(struct lfs *fs, struct segment *sp, struct vnode *vp,
(int64_t)osize - (int64_t)osize -
(sizeof (struct ufs1_dinode) * ndupino + (sizeof (struct ufs1_dinode) * ndupino +
sup->su_nbytes)); sup->su_nbytes));
printf("lfs_updatemeta: ino %d, lbn %" PRId64 printf("lfs_updatemeta: ino %llu, lbn %" PRId64
", addr = 0x%" PRIx64 "\n", ", addr = 0x%" PRIx64 "\n",
ip->i_number, lbn, daddr); (unsigned long long)ip->i_number, lbn, daddr);
printf("lfs_updatemeta: ndupino=%d\n", ndupino); printf("lfs_updatemeta: ndupino=%d\n", ndupino);
panic("lfs_updatemeta: negative bytes"); panic("lfs_updatemeta: negative bytes");
sup->su_nbytes = osize - sup->su_nbytes = osize -
@ -2501,7 +2501,8 @@ lfs_vunref(struct vnode *vp)
simple_lock(&vp->v_interlock); simple_lock(&vp->v_interlock);
#ifdef DIAGNOSTIC #ifdef DIAGNOSTIC
if (vp->v_usecount <= 0) { if (vp->v_usecount <= 0) {
printf("lfs_vunref: inum is %d\n", VTOI(vp)->i_number); printf("lfs_vunref: inum is %llu\n", (unsigned long long)
VTOI(vp)->i_number);
printf("lfs_vunref: flags are 0x%lx\n", (u_long)vp->v_flag); printf("lfs_vunref: flags are 0x%lx\n", (u_long)vp->v_flag);
printf("lfs_vunref: usecount = %ld\n", (long)vp->v_usecount); printf("lfs_vunref: usecount = %ld\n", (long)vp->v_usecount);
panic("lfs_vunref: v_usecount < 0"); panic("lfs_vunref: v_usecount < 0");

View File

@ -1,4 +1,4 @@
/* $NetBSD: lfs_vfsops.c,v 1.184 2005/07/23 12:18:41 yamt Exp $ */ /* $NetBSD: lfs_vfsops.c,v 1.185 2005/08/19 02:04:09 christos Exp $ */
/*- /*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc. * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@ -67,7 +67,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.184 2005/07/23 12:18:41 yamt Exp $"); __KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.185 2005/08/19 02:04:09 christos Exp $");
#if defined(_KERNEL_OPT) #if defined(_KERNEL_OPT)
#include "opt_quota.h" #include "opt_quota.h"
@ -2289,8 +2289,9 @@ inconsistent:
# ifdef DEBUG # ifdef DEBUG
lfs_dump_dinode(ip->i_din.ffs1_din); lfs_dump_dinode(ip->i_din.ffs1_din);
# endif # endif
panic("lfs_vinit: ino %d is type VNON! (ifmt=%o)\n", panic("lfs_vinit: ino %llu is type VNON! (ifmt=%o)\n",
ip->i_number, (ip->i_mode & IFMT) >> 12); (unsigned long long)ip->i_number,
(ip->i_mode & IFMT) >> 12);
} }
#endif /* DIAGNOSTIC */ #endif /* DIAGNOSTIC */

View File

@ -1,4 +1,4 @@
/* $NetBSD: lfs_vnops.c,v 1.152 2005/05/29 21:25:24 christos Exp $ */ /* $NetBSD: lfs_vnops.c,v 1.153 2005/08/19 02:04:09 christos Exp $ */
/*- /*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc. * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@ -67,7 +67,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.152 2005/05/29 21:25:24 christos Exp $"); __KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.153 2005/08/19 02:04:09 christos Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -635,7 +635,8 @@ lfs_mknod(void *v)
*/ */
if ((error = VOP_FSYNC(*vpp, NOCRED, FSYNC_WAIT, 0, 0, if ((error = VOP_FSYNC(*vpp, NOCRED, FSYNC_WAIT, 0, 0,
curproc)) != 0) { curproc)) != 0) {
panic("lfs_mknod: couldn't fsync (ino %d)", ino); panic("lfs_mknod: couldn't fsync (ino %llu)",
(unsigned long long)ino);
/* return (error); */ /* return (error); */
} }
/* /*

View File

@ -1,4 +1,4 @@
/* $NetBSD: inode.h,v 1.41 2005/02/26 22:32:20 perry Exp $ */ /* $NetBSD: inode.h,v 1.42 2005/08/19 02:04:09 christos Exp $ */
/* /*
* Copyright (c) 1982, 1989, 1993 * Copyright (c) 1982, 1989, 1993
@ -325,7 +325,7 @@ struct indir {
struct ufid { struct ufid {
u_int16_t ufid_len; /* Length of structure. */ u_int16_t ufid_len; /* Length of structure. */
u_int16_t ufid_pad; /* Force 32-bit alignment. */ u_int16_t ufid_pad; /* Force 32-bit alignment. */
ino_t ufid_ino; /* File number (ino). */ u_int32_t ufid_ino; /* File number (ino). */
int32_t ufid_gen; /* Generation number. */ int32_t ufid_gen; /* Generation number. */
}; };
#endif /* _KERNEL */ #endif /* _KERNEL */

View File

@ -1,4 +1,4 @@
/* $NetBSD: ufs_lookup.c,v 1.65 2005/07/10 01:08:52 thorpej Exp $ */ /* $NetBSD: ufs_lookup.c,v 1.66 2005/08/19 02:04:09 christos Exp $ */
/* /*
* Copyright (c) 1989, 1993 * Copyright (c) 1989, 1993
@ -37,7 +37,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: ufs_lookup.c,v 1.65 2005/07/10 01:08:52 thorpej Exp $"); __KERNEL_RCSID(0, "$NetBSD: ufs_lookup.c,v 1.66 2005/08/19 02:04:09 christos Exp $");
#ifdef _KERNEL_OPT #ifdef _KERNEL_OPT
#include "opt_ffs.h" #include "opt_ffs.h"
@ -656,8 +656,9 @@ ufs_dirbad(struct inode *ip, doff_t offset, const char *how)
struct mount *mp; struct mount *mp;
mp = ITOV(ip)->v_mount; mp = ITOV(ip)->v_mount;
printf("%s: bad dir ino %d at offset %d: %s\n", printf("%s: bad dir ino %llu at offset %d: %s\n",
mp->mnt_stat.f_mntonname, ip->i_number, offset, how); mp->mnt_stat.f_mntonname, (unsigned long long)ip->i_number,
offset, how);
if ((mp->mnt_stat.f_flag & MNT_RDONLY) == 0) if ((mp->mnt_stat.f_flag & MNT_RDONLY) == 0)
panic("bad dir"); panic("bad dir");
} }

View File

@ -1,4 +1,4 @@
/* $NetBSD: ufs_vnops.c,v 1.129 2005/07/23 12:18:41 yamt Exp $ */ /* $NetBSD: ufs_vnops.c,v 1.130 2005/08/19 02:04:09 christos Exp $ */
/* /*
* Copyright (c) 1982, 1986, 1989, 1993, 1995 * Copyright (c) 1982, 1986, 1989, 1993, 1995
@ -37,7 +37,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.129 2005/07/23 12:18:41 yamt Exp $"); __KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.130 2005/08/19 02:04:09 christos Exp $");
#if defined(_KERNEL_OPT) #if defined(_KERNEL_OPT)
#include "opt_ffs.h" #include "opt_ffs.h"
@ -79,7 +79,7 @@ __KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.129 2005/07/23 12:18:41 yamt Exp $")
static int ufs_chmod(struct vnode *, int, struct ucred *, struct proc *); static int ufs_chmod(struct vnode *, int, struct ucred *, struct proc *);
static int ufs_chown(struct vnode *, uid_t, gid_t, struct ucred *, static int ufs_chown(struct vnode *, uid_t, gid_t, struct ucred *,
struct proc *); struct proc *);
/* /*
* A virgin directory (no blushing please). * A virgin directory (no blushing please).
@ -1556,11 +1556,9 @@ ufs_symlink(void *v)
/* /*
* Vnode op for reading directories. * Vnode op for reading directories.
* *
* The routine below assumes that the on-disk format of a directory * This routine handles converting from the on-disk directory format
* is the same as that defined by <sys/dirent.h>. If the on-disk * "struct direct" to the in-memory format "struct dirent" as well as
* format changes, then it will be necessary to do a conversion * byte swapping the entries if necessary.
* from the on-disk format that read returns to the format defined
* by <sys/dirent.h>.
*/ */
int int
ufs_readdir(void *v) ufs_readdir(void *v)
@ -1574,115 +1572,113 @@ ufs_readdir(void *v)
int *ncookies; int *ncookies;
} */ *ap = v; } */ *ap = v;
struct vnode *vp = ap->a_vp; struct vnode *vp = ap->a_vp;
struct uio *uio; struct direct *cdp, *ecdp;
struct dirent *ndp;
char *cdbuf, *ndbuf, *endp;
struct uio auio, *uio;
struct iovec aiov;
int error; int error;
size_t count, lost; size_t count, ccount, rcount;
off_t off; off_t off, *ccp;
struct ufsmount *ump = VFSTOUFS(vp->v_mount); struct ufsmount *ump = VFSTOUFS(vp->v_mount);
int dirblksiz = ump->um_dirblksiz; int nswap = UFS_MPNEEDSWAP(ump);
#if BYTE_ORDER == LITTLE_ENDIAN
int needswap = ump->um_maxsymlinklen <= 0 && nswap == 0;
#else
int needswap = ump->um_maxsymlinklen <= 0 && nswap != 0;
#endif
uio = ap->a_uio; uio = ap->a_uio;
off = uio->uio_offset;
count = uio->uio_resid; count = uio->uio_resid;
/* Make sure we don't return partial entries. */ rcount = count - ((uio->uio_offset + count) & (ump->um_dirblksiz - 1));
count -= (uio->uio_offset + count) & (dirblksiz -1);
if (count <= 0) if (rcount < _DIRENT_MINSIZE(cdp) || count < _DIRENT_MINSIZE(ndp))
return (EINVAL); return EINVAL;
lost = uio->uio_resid - count;
uio->uio_resid = count; auio.uio_iov = &aiov;
uio->uio_iov->iov_len = count; auio.uio_iovcnt = 1;
#if BYTE_ORDER == LITTLE_ENDIAN auio.uio_offset = uio->uio_offset;
if (ump->um_maxsymlinklen > 0 && UFS_MPNEEDSWAP(ump) == 0) auio.uio_resid = rcount;
#else auio.uio_segflg = UIO_SYSSPACE;
if (UFS_MPNEEDSWAP(ump) == 0) auio.uio_rw = UIO_READ;
#endif cdbuf = malloc(rcount, M_TEMP, M_WAITOK);
{ aiov.iov_base = cdbuf;
error = VOP_READ(vp, uio, 0, ap->a_cred); aiov.iov_len = rcount;
error = VOP_READ(vp, &auio, 0, ap->a_cred);
if (error != 0) {
free(cdbuf, M_TEMP);
return error;
}
rcount = rcount - auio.uio_resid;
cdp = (struct direct *)(void *)cdbuf;
ecdp = (struct direct *)(void *)&cdbuf[rcount];
ndbuf = malloc(count, M_TEMP, M_WAITOK);
ndp = (struct dirent *)(void *)ndbuf;
endp = &ndbuf[count];
off = uio->uio_offset;
if (ap->a_cookies) {
ccount = rcount / 4;
ccp = *(ap->a_cookies) = malloc(ccount * sizeof(*ccp),
M_TEMP, M_WAITOK);
} else { } else {
struct dirent *dp, *edp; /* XXX: GCC */
struct uio auio; ccount = 0;
struct iovec aiov; ccp = NULL;
caddr_t dirbuf;
int readcnt;
u_char tmp;
auio = *uio;
auio.uio_iov = &aiov;
auio.uio_iovcnt = 1;
auio.uio_segflg = UIO_SYSSPACE;
aiov.iov_len = count;
MALLOC(dirbuf, caddr_t, count, M_TEMP, M_WAITOK);
aiov.iov_base = dirbuf;
error = VOP_READ(vp, &auio, 0, ap->a_cred);
if (error == 0) {
readcnt = count - auio.uio_resid;
edp = (struct dirent *)&dirbuf[readcnt];
for (dp = (struct dirent *)dirbuf; dp < edp; ) {
#if BYTE_ORDER == LITTLE_ENDIAN
if (ump->um_maxsymlinklen <= 0 &&
UFS_MPNEEDSWAP(ump) == 0)
#else
if (ump->um_maxsymlinklen <= 0 &&
UFS_MPNEEDSWAP(ump) != 0)
#endif
{
tmp = dp->d_namlen;
dp->d_namlen = dp->d_type;
dp->d_type = tmp;
}
dp->d_fileno = ufs_rw32(dp->d_fileno,
UFS_MPNEEDSWAP(ump));
dp->d_reclen = ufs_rw16(dp->d_reclen,
UFS_MPNEEDSWAP(ump));
if (dp->d_reclen > 0) {
dp = (struct dirent *)
((char *)dp + dp->d_reclen);
} else {
error = EIO;
break;
}
}
if (dp >= edp)
error = uiomove(dirbuf, readcnt, uio);
}
FREE(dirbuf, M_TEMP);
} }
if (!error && ap->a_ncookies) {
struct dirent *dp, *dpstart;
off_t *cookies, offstart;
int ncookies;
/* while (cdp < ecdp) {
* Only the NFS server and emulations use cookies, and they cdp->d_reclen = ufs_rw16(cdp->d_reclen, nswap);
* load the directory block into system space, so we can if (cdp->d_reclen == 0) {
* just look at it directly. struct dirent *ondp = ndp;
*/ ndp->d_reclen = _DIRENT_MINSIZE(ndp);
if (uio->uio_segflg != UIO_SYSSPACE || uio->uio_iovcnt != 1) ndp = _DIRENT_NEXT(ndp);
panic("ufs_readdir: lost in space"); ondp->d_reclen = 0;
dpstart = (struct dirent *) cdp = ecdp;
((caddr_t)uio->uio_iov->iov_base - (uio->uio_offset - off)); break;
offstart = off;
for (dp = dpstart, ncookies = 0; off < uio->uio_offset; ) {
if (dp->d_reclen == 0)
break;
off += dp->d_reclen;
ncookies++;
dp = (struct dirent *)((caddr_t)dp + dp->d_reclen);
} }
lost += uio->uio_offset - off; if (needswap) {
cookies = malloc(ncookies * sizeof(off_t), M_TEMP, M_WAITOK); ndp->d_type = cdp->d_namlen;
uio->uio_offset = off; ndp->d_namlen = cdp->d_type;
*ap->a_ncookies = ncookies; } else {
*ap->a_cookies = cookies; ndp->d_type = cdp->d_type;
for (off = offstart, dp = dpstart; off < uio->uio_offset; ) { ndp->d_namlen = cdp->d_namlen;
off += dp->d_reclen;
*(cookies++) = off;
dp = (struct dirent *)((caddr_t)dp + dp->d_reclen);
} }
ndp->d_reclen = _DIRENT_RECLEN(ndp, ndp->d_namlen);
if ((char *)(void *)ndp + ndp->d_reclen +
_DIRENT_MINSIZE(ndp) > endp)
break;
ndp->d_fileno = ufs_rw32(cdp->d_ino, nswap);
(void)memcpy(ndp->d_name, cdp->d_name, ndp->d_namlen);
ndp->d_name[ndp->d_namlen] = '\0';
off += cdp->d_reclen;
if (ap->a_cookies) {
KASSERT(ccp - *(ap->a_cookies) < ccount);
*(ccp++) = off;
}
ndp = _DIRENT_NEXT(ndp);
cdp = _DIRENT_NEXT(cdp);
} }
uio->uio_resid += lost;
if (cdp >= ecdp)
off = uio->uio_offset + rcount;
count = ((char *)(void *)ndp - ndbuf);
error = uiomove(ndbuf, count, uio);
if (ap->a_cookies) {
if (error)
free(*(ap->a_cookies), M_TEMP);
else
*ap->a_ncookies = ccp - *(ap->a_cookies);
}
uio->uio_offset = off;
free(ndbuf, M_TEMP);
free(cdbuf, M_TEMP);
*ap->a_eofflag = VTOI(vp)->i_size <= uio->uio_offset; *ap->a_eofflag = VTOI(vp)->i_size <= uio->uio_offset;
return (error); return error;
} }
/* /*
@ -1766,7 +1762,8 @@ ufs_print(void *v)
vp = ap->a_vp; vp = ap->a_vp;
ip = VTOI(vp); ip = VTOI(vp);
printf("tag VT_UFS, ino %d, on dev %d, %d", ip->i_number, printf("tag VT_UFS, ino %llu, on dev %d, %d",
(unsigned long long)ip->i_number,
major(ip->i_dev), minor(ip->i_dev)); major(ip->i_dev), minor(ip->i_dev));
printf(" flags 0x%x, effnlink %d, nlink %d\n", printf(" flags 0x%x, effnlink %d, nlink %d\n",
ip->i_flag, ip->i_ffs_effnlink, ip->i_nlink); ip->i_flag, ip->i_ffs_effnlink, ip->i_nlink);