PERFORCE change 67013 for review
Peter Wemm
peter at FreeBSD.org
Mon Dec 13 17:59:43 PST 2004
http://perforce.freebsd.org/chv.cgi?CH=67013
Change 67013 by peter at peter_daintree on 2004/12/14 01:59:29
Apply smpffs.diff that I snarfed this morning.
Affected files ...
.. //depot/projects/smpffs/geom/geom_vfs.c#2 edit
.. //depot/projects/smpffs/kern/init_sysent.c#2 edit
.. //depot/projects/smpffs/kern/kern_descrip.c#2 edit
.. //depot/projects/smpffs/kern/kern_lock.c#2 edit
.. //depot/projects/smpffs/kern/syscalls.c#2 edit
.. //depot/projects/smpffs/kern/syscalls.master#2 edit
.. //depot/projects/smpffs/kern/vfs_bio.c#2 edit
.. //depot/projects/smpffs/kern/vfs_cache.c#2 edit
.. //depot/projects/smpffs/kern/vfs_cluster.c#2 edit
.. //depot/projects/smpffs/kern/vfs_default.c#2 edit
.. //depot/projects/smpffs/kern/vfs_lookup.c#2 edit
.. //depot/projects/smpffs/kern/vfs_mount.c#2 edit
.. //depot/projects/smpffs/kern/vfs_subr.c#2 edit
.. //depot/projects/smpffs/kern/vfs_syscalls.c#2 edit
.. //depot/projects/smpffs/kern/vfs_vnops.c#2 edit
.. //depot/projects/smpffs/sys/ktr.h#2 edit
.. //depot/projects/smpffs/sys/mount.h#2 edit
.. //depot/projects/smpffs/sys/namei.h#2 edit
.. //depot/projects/smpffs/sys/syscall.h#2 edit
.. //depot/projects/smpffs/sys/syscall.mk#2 edit
.. //depot/projects/smpffs/sys/sysproto.h#2 edit
.. //depot/projects/smpffs/sys/vnode.h#2 edit
.. //depot/projects/smpffs/ufs/ffs/ffs_alloc.c#2 edit
.. //depot/projects/smpffs/ufs/ffs/ffs_balloc.c#2 edit
.. //depot/projects/smpffs/ufs/ffs/ffs_extern.h#2 edit
.. //depot/projects/smpffs/ufs/ffs/ffs_inode.c#2 edit
.. //depot/projects/smpffs/ufs/ffs/ffs_snapshot.c#2 edit
.. //depot/projects/smpffs/ufs/ffs/ffs_softdep.c#2 edit
.. //depot/projects/smpffs/ufs/ffs/ffs_vfsops.c#2 edit
.. //depot/projects/smpffs/ufs/ffs/ffs_vnops.c#2 edit
.. //depot/projects/smpffs/ufs/ffs/fs.h#2 edit
.. //depot/projects/smpffs/ufs/ufs/ufsmount.h#2 edit
.. //depot/projects/smpffs/vm/vm_fault.c#2 edit
.. //depot/projects/smpffs/vm/vm_mmap.c#2 edit
.. //depot/projects/smpffs/vm/vm_object.c#2 edit
.. //depot/projects/smpffs/vm/vnode_pager.c#2 edit
Differences ...
==== //depot/projects/smpffs/geom/geom_vfs.c#2 (text+ko) ====
@@ -77,9 +77,7 @@
bp->b_ioflags |= BIO_ERROR;
bp->b_resid = bp->b_bcount - bip->bio_completed;
g_destroy_bio(bip);
- mtx_lock(&Giant);
bufdone(bp);
- mtx_unlock(&Giant);
}
void
==== //depot/projects/smpffs/kern/init_sysent.c#2 (text+ko) ====
@@ -2,7 +2,7 @@
* System call switch table.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/kern/init_sysent.c,v 1.180 2004/11/25 12:08:16 phk Exp $
+ * $FreeBSD$
* created from FreeBSD: src/sys/kern/syscalls.master,v 1.180 2004/11/25 12:07:28 phk Exp
*/
@@ -40,11 +40,11 @@
{ SYF_MPSAFE | AS(link_args), (sy_call_t *)link }, /* 9 = link */
{ SYF_MPSAFE | AS(unlink_args), (sy_call_t *)unlink }, /* 10 = unlink */
{ 0, (sy_call_t *)nosys }, /* 11 = obsolete execv */
- { AS(chdir_args), (sy_call_t *)chdir }, /* 12 = chdir */
- { AS(fchdir_args), (sy_call_t *)fchdir }, /* 13 = fchdir */
- { AS(mknod_args), (sy_call_t *)mknod }, /* 14 = mknod */
- { AS(chmod_args), (sy_call_t *)chmod }, /* 15 = chmod */
- { AS(chown_args), (sy_call_t *)chown }, /* 16 = chown */
+ { SYF_MPSAFE | AS(chdir_args), (sy_call_t *)chdir }, /* 12 = chdir */
+ { SYF_MPSAFE | AS(fchdir_args), (sy_call_t *)fchdir }, /* 13 = fchdir */
+ { SYF_MPSAFE | AS(mknod_args), (sy_call_t *)mknod }, /* 14 = mknod */
+ { SYF_MPSAFE | AS(chmod_args), (sy_call_t *)chmod }, /* 15 = chmod */
+ { SYF_MPSAFE | AS(chown_args), (sy_call_t *)chown }, /* 16 = chown */
{ SYF_MPSAFE | AS(obreak_args), (sy_call_t *)obreak }, /* 17 = break */
{ compat4(AS(freebsd4_getfsstat_args),getfsstat) }, /* 18 = old getfsstat */
{ compat(AS(olseek_args),lseek) }, /* 19 = old lseek */
@@ -61,10 +61,10 @@
{ SYF_MPSAFE | AS(accept_args), (sy_call_t *)accept }, /* 30 = accept */
{ SYF_MPSAFE | AS(getpeername_args), (sy_call_t *)getpeername }, /* 31 = getpeername */
{ SYF_MPSAFE | AS(getsockname_args), (sy_call_t *)getsockname }, /* 32 = getsockname */
- { AS(access_args), (sy_call_t *)access }, /* 33 = access */
- { AS(chflags_args), (sy_call_t *)chflags }, /* 34 = chflags */
- { AS(fchflags_args), (sy_call_t *)fchflags }, /* 35 = fchflags */
- { 0, (sy_call_t *)sync }, /* 36 = sync */
+ { SYF_MPSAFE | AS(access_args), (sy_call_t *)access }, /* 33 = access */
+ { SYF_MPSAFE | AS(chflags_args), (sy_call_t *)chflags }, /* 34 = chflags */
+ { SYF_MPSAFE | AS(fchflags_args), (sy_call_t *)fchflags }, /* 35 = fchflags */
+ { SYF_MPSAFE | 0, (sy_call_t *)sync }, /* 36 = sync */
{ SYF_MPSAFE | AS(kill_args), (sy_call_t *)kill }, /* 37 = kill */
{ compat(AS(ostat_args),stat) }, /* 38 = old stat */
{ SYF_MPSAFE | 0, (sy_call_t *)getppid }, /* 39 = getppid */
@@ -84,12 +84,12 @@
{ SYF_MPSAFE | AS(sigaltstack_args), (sy_call_t *)sigaltstack }, /* 53 = sigaltstack */
{ SYF_MPSAFE | AS(ioctl_args), (sy_call_t *)ioctl }, /* 54 = ioctl */
{ SYF_MPSAFE | AS(reboot_args), (sy_call_t *)reboot }, /* 55 = reboot */
- { AS(revoke_args), (sy_call_t *)revoke }, /* 56 = revoke */
- { AS(symlink_args), (sy_call_t *)symlink }, /* 57 = symlink */
- { AS(readlink_args), (sy_call_t *)readlink }, /* 58 = readlink */
+ { SYF_MPSAFE | AS(revoke_args), (sy_call_t *)revoke }, /* 56 = revoke */
+ { SYF_MPSAFE | AS(symlink_args), (sy_call_t *)symlink }, /* 57 = symlink */
+ { SYF_MPSAFE | AS(readlink_args), (sy_call_t *)readlink }, /* 58 = readlink */
{ SYF_MPSAFE | AS(execve_args), (sy_call_t *)execve }, /* 59 = execve */
{ SYF_MPSAFE | AS(umask_args), (sy_call_t *)umask }, /* 60 = umask */
- { AS(chroot_args), (sy_call_t *)chroot }, /* 61 = chroot */
+ { SYF_MPSAFE | AS(chroot_args), (sy_call_t *)chroot }, /* 61 = chroot */
{ compat(SYF_MPSAFE | AS(ofstat_args),fstat) }, /* 62 = old fstat */
{ compat(SYF_MPSAFE | AS(getkerninfo_args),getkerninfo) }, /* 63 = old getkerninfo */
{ compat(SYF_MPSAFE | 0,getpagesize) }, /* 64 = old getpagesize */
@@ -123,7 +123,7 @@
{ SYF_MPSAFE | AS(fcntl_args), (sy_call_t *)fcntl }, /* 92 = fcntl */
{ SYF_MPSAFE | AS(select_args), (sy_call_t *)select }, /* 93 = select */
{ 0, (sy_call_t *)nosys }, /* 94 = setdopt */
- { AS(fsync_args), (sy_call_t *)fsync }, /* 95 = fsync */
+ { SYF_MPSAFE | AS(fsync_args), (sy_call_t *)fsync }, /* 95 = fsync */
{ SYF_MPSAFE | AS(setpriority_args), (sy_call_t *)setpriority }, /* 96 = setpriority */
{ SYF_MPSAFE | AS(socket_args), (sy_call_t *)socket }, /* 97 = socket */
{ SYF_MPSAFE | AS(connect_args), (sy_call_t *)connect }, /* 98 = connect */
@@ -151,22 +151,22 @@
{ SYF_MPSAFE | AS(readv_args), (sy_call_t *)readv }, /* 120 = readv */
{ SYF_MPSAFE | AS(writev_args), (sy_call_t *)writev }, /* 121 = writev */
{ SYF_MPSAFE | AS(settimeofday_args), (sy_call_t *)settimeofday }, /* 122 = settimeofday */
- { AS(fchown_args), (sy_call_t *)fchown }, /* 123 = fchown */
- { AS(fchmod_args), (sy_call_t *)fchmod }, /* 124 = fchmod */
+ { SYF_MPSAFE | AS(fchown_args), (sy_call_t *)fchown }, /* 123 = fchown */
+ { SYF_MPSAFE | AS(fchmod_args), (sy_call_t *)fchmod }, /* 124 = fchmod */
{ compat(SYF_MPSAFE | AS(recvfrom_args),recvfrom) }, /* 125 = old recvfrom */
{ SYF_MPSAFE | AS(setreuid_args), (sy_call_t *)setreuid }, /* 126 = setreuid */
{ SYF_MPSAFE | AS(setregid_args), (sy_call_t *)setregid }, /* 127 = setregid */
- { AS(rename_args), (sy_call_t *)rename }, /* 128 = rename */
+ { SYF_MPSAFE | AS(rename_args), (sy_call_t *)rename }, /* 128 = rename */
{ compat(AS(otruncate_args),truncate) }, /* 129 = old truncate */
{ compat(AS(oftruncate_args),ftruncate) }, /* 130 = old ftruncate */
{ SYF_MPSAFE | AS(flock_args), (sy_call_t *)flock }, /* 131 = flock */
- { AS(mkfifo_args), (sy_call_t *)mkfifo }, /* 132 = mkfifo */
+ { SYF_MPSAFE | AS(mkfifo_args), (sy_call_t *)mkfifo }, /* 132 = mkfifo */
{ SYF_MPSAFE | AS(sendto_args), (sy_call_t *)sendto }, /* 133 = sendto */
{ SYF_MPSAFE | AS(shutdown_args), (sy_call_t *)shutdown }, /* 134 = shutdown */
{ SYF_MPSAFE | AS(socketpair_args), (sy_call_t *)socketpair }, /* 135 = socketpair */
- { AS(mkdir_args), (sy_call_t *)mkdir }, /* 136 = mkdir */
- { AS(rmdir_args), (sy_call_t *)rmdir }, /* 137 = rmdir */
- { AS(utimes_args), (sy_call_t *)utimes }, /* 138 = utimes */
+ { SYF_MPSAFE | AS(mkdir_args), (sy_call_t *)mkdir }, /* 136 = mkdir */
+ { SYF_MPSAFE | AS(rmdir_args), (sy_call_t *)rmdir }, /* 137 = rmdir */
+ { SYF_MPSAFE | AS(utimes_args), (sy_call_t *)utimes }, /* 138 = utimes */
{ 0, (sy_call_t *)nosys }, /* 139 = obsolete 4.2 sigreturn */
{ SYF_MPSAFE | AS(adjtime_args), (sy_call_t *)adjtime }, /* 140 = adjtime */
{ compat(SYF_MPSAFE | AS(ogetpeername_args),getpeername) }, /* 141 = old getpeername */
@@ -188,8 +188,8 @@
{ compat4(AS(freebsd4_statfs_args),statfs) }, /* 157 = old statfs */
{ compat4(AS(freebsd4_fstatfs_args),fstatfs) }, /* 158 = old fstatfs */
{ 0, (sy_call_t *)nosys }, /* 159 = nosys */
- { AS(lgetfh_args), (sy_call_t *)lgetfh }, /* 160 = lgetfh */
- { AS(getfh_args), (sy_call_t *)getfh }, /* 161 = getfh */
+ { SYF_MPSAFE | AS(lgetfh_args), (sy_call_t *)lgetfh }, /* 160 = lgetfh */
+ { SYF_MPSAFE | AS(getfh_args), (sy_call_t *)getfh }, /* 161 = getfh */
{ SYF_MPSAFE | AS(getdomainname_args), (sy_call_t *)getdomainname }, /* 162 = getdomainname */
{ SYF_MPSAFE | AS(setdomainname_args), (sy_call_t *)setdomainname }, /* 163 = setdomainname */
{ SYF_MPSAFE | AS(uname_args), (sy_call_t *)uname }, /* 164 = uname */
@@ -216,25 +216,25 @@
{ 0, (sy_call_t *)nosys }, /* 185 = lfs_markv */
{ 0, (sy_call_t *)nosys }, /* 186 = lfs_segclean */
{ 0, (sy_call_t *)nosys }, /* 187 = lfs_segwait */
- { AS(stat_args), (sy_call_t *)stat }, /* 188 = stat */
+ { SYF_MPSAFE | AS(stat_args), (sy_call_t *)stat }, /* 188 = stat */
{ SYF_MPSAFE | AS(fstat_args), (sy_call_t *)fstat }, /* 189 = fstat */
- { AS(lstat_args), (sy_call_t *)lstat }, /* 190 = lstat */
- { AS(pathconf_args), (sy_call_t *)pathconf }, /* 191 = pathconf */
+ { SYF_MPSAFE | AS(lstat_args), (sy_call_t *)lstat }, /* 190 = lstat */
+ { SYF_MPSAFE | AS(pathconf_args), (sy_call_t *)pathconf }, /* 191 = pathconf */
{ SYF_MPSAFE | AS(fpathconf_args), (sy_call_t *)fpathconf }, /* 192 = fpathconf */
{ 0, (sy_call_t *)nosys }, /* 193 = nosys */
{ SYF_MPSAFE | AS(__getrlimit_args), (sy_call_t *)getrlimit }, /* 194 = getrlimit */
{ SYF_MPSAFE | AS(__setrlimit_args), (sy_call_t *)setrlimit }, /* 195 = setrlimit */
- { AS(getdirentries_args), (sy_call_t *)getdirentries }, /* 196 = getdirentries */
+ { SYF_MPSAFE | AS(getdirentries_args), (sy_call_t *)getdirentries }, /* 196 = getdirentries */
{ SYF_MPSAFE | AS(mmap_args), (sy_call_t *)mmap }, /* 197 = mmap */
- { 0, (sy_call_t *)nosys }, /* 198 = __syscall */
- { AS(lseek_args), (sy_call_t *)lseek }, /* 199 = lseek */
- { AS(truncate_args), (sy_call_t *)truncate }, /* 200 = truncate */
- { AS(ftruncate_args), (sy_call_t *)ftruncate }, /* 201 = ftruncate */
+ { SYF_MPSAFE | 0, (sy_call_t *)nosys }, /* 198 = __syscall */
+ { SYF_MPSAFE | AS(lseek_args), (sy_call_t *)lseek }, /* 199 = lseek */
+ { SYF_MPSAFE | AS(truncate_args), (sy_call_t *)truncate }, /* 200 = truncate */
+ { SYF_MPSAFE | AS(ftruncate_args), (sy_call_t *)ftruncate }, /* 201 = ftruncate */
{ SYF_MPSAFE | AS(sysctl_args), (sy_call_t *)__sysctl }, /* 202 = __sysctl */
{ SYF_MPSAFE | AS(mlock_args), (sy_call_t *)mlock }, /* 203 = mlock */
{ SYF_MPSAFE | AS(munlock_args), (sy_call_t *)munlock }, /* 204 = munlock */
- { AS(undelete_args), (sy_call_t *)undelete }, /* 205 = undelete */
- { AS(futimes_args), (sy_call_t *)futimes }, /* 206 = futimes */
+ { SYF_MPSAFE | AS(undelete_args), (sy_call_t *)undelete }, /* 205 = undelete */
+ { SYF_MPSAFE | AS(futimes_args), (sy_call_t *)futimes }, /* 206 = futimes */
{ SYF_MPSAFE | AS(getpgid_args), (sy_call_t *)getpgid }, /* 207 = getpgid */
{ 0, (sy_call_t *)nosys }, /* 208 = newreboot */
{ SYF_MPSAFE | AS(poll_args), (sy_call_t *)poll }, /* 209 = poll */
@@ -282,7 +282,7 @@
{ SYF_MPSAFE | AS(rfork_args), (sy_call_t *)rfork }, /* 251 = rfork */
{ SYF_MPSAFE | AS(openbsd_poll_args), (sy_call_t *)openbsd_poll }, /* 252 = openbsd_poll */
{ SYF_MPSAFE | 0, (sy_call_t *)issetugid }, /* 253 = issetugid */
- { AS(lchown_args), (sy_call_t *)lchown }, /* 254 = lchown */
+ { SYF_MPSAFE | AS(lchown_args), (sy_call_t *)lchown }, /* 254 = lchown */
{ 0, (sy_call_t *)nosys }, /* 255 = nosys */
{ 0, (sy_call_t *)nosys }, /* 256 = nosys */
{ 0, (sy_call_t *)nosys }, /* 257 = nosys */
@@ -300,15 +300,15 @@
{ 0, (sy_call_t *)nosys }, /* 269 = nosys */
{ 0, (sy_call_t *)nosys }, /* 270 = nosys */
{ 0, (sy_call_t *)nosys }, /* 271 = nosys */
- { AS(getdents_args), (sy_call_t *)getdents }, /* 272 = getdents */
+ { SYF_MPSAFE | AS(getdents_args), (sy_call_t *)getdents }, /* 272 = getdents */
{ 0, (sy_call_t *)nosys }, /* 273 = nosys */
- { AS(lchmod_args), (sy_call_t *)lchmod }, /* 274 = lchmod */
+ { SYF_MPSAFE | AS(lchmod_args), (sy_call_t *)lchmod }, /* 274 = lchmod */
{ AS(lchown_args), (sy_call_t *)lchown }, /* 275 = netbsd_lchown */
- { AS(lutimes_args), (sy_call_t *)lutimes }, /* 276 = lutimes */
+ { SYF_MPSAFE | AS(lutimes_args), (sy_call_t *)lutimes }, /* 276 = lutimes */
{ SYF_MPSAFE | AS(msync_args), (sy_call_t *)msync }, /* 277 = netbsd_msync */
- { AS(nstat_args), (sy_call_t *)nstat }, /* 278 = nstat */
+ { SYF_MPSAFE | AS(nstat_args), (sy_call_t *)nstat }, /* 278 = nstat */
{ SYF_MPSAFE | AS(nfstat_args), (sy_call_t *)nfstat }, /* 279 = nfstat */
- { AS(nlstat_args), (sy_call_t *)nlstat }, /* 280 = nlstat */
+ { SYF_MPSAFE | AS(nlstat_args), (sy_call_t *)nlstat }, /* 280 = nlstat */
{ 0, (sy_call_t *)nosys }, /* 281 = nosys */
{ 0, (sy_call_t *)nosys }, /* 282 = nosys */
{ 0, (sy_call_t *)nosys }, /* 283 = nosys */
@@ -354,7 +354,7 @@
{ 0, (sy_call_t *)nosys }, /* 323 = obsolete thr_wakeup */
{ SYF_MPSAFE | AS(mlockall_args), (sy_call_t *)mlockall }, /* 324 = mlockall */
{ SYF_MPSAFE | 0, (sy_call_t *)munlockall }, /* 325 = munlockall */
- { AS(__getcwd_args), (sy_call_t *)__getcwd }, /* 326 = __getcwd */
+ { SYF_MPSAFE | AS(__getcwd_args), (sy_call_t *)__getcwd }, /* 326 = __getcwd */
{ SYF_MPSAFE | AS(sched_setparam_args), (sy_call_t *)sched_setparam }, /* 327 = sched_setparam */
{ SYF_MPSAFE | AS(sched_getparam_args), (sy_call_t *)sched_getparam }, /* 328 = sched_getparam */
{ SYF_MPSAFE | AS(sched_setscheduler_args), (sy_call_t *)sched_setscheduler }, /* 329 = sched_setscheduler */
@@ -404,7 +404,7 @@
{ AS(extattr_delete_fd_args), (sy_call_t *)extattr_delete_fd }, /* 373 = extattr_delete_fd */
{ SYF_MPSAFE | AS(__setugid_args), (sy_call_t *)__setugid }, /* 374 = __setugid */
{ AS(nfsclnt_args), (sy_call_t *)nosys }, /* 375 = nfsclnt */
- { AS(eaccess_args), (sy_call_t *)eaccess }, /* 376 = eaccess */
+ { SYF_MPSAFE | AS(eaccess_args), (sy_call_t *)eaccess }, /* 376 = eaccess */
{ 0, (sy_call_t *)nosys }, /* 377 = afs_syscall */
{ SYF_MPSAFE | AS(nmount_args), (sy_call_t *)nmount }, /* 378 = nmount */
{ SYF_MPSAFE | 0, (sy_call_t *)kse_exit }, /* 379 = kse_exit */
@@ -419,13 +419,13 @@
{ SYF_MPSAFE | AS(__mac_set_fd_args), (sy_call_t *)__mac_set_fd }, /* 388 = __mac_set_fd */
{ SYF_MPSAFE | AS(__mac_set_file_args), (sy_call_t *)__mac_set_file }, /* 389 = __mac_set_file */
{ AS(kenv_args), (sy_call_t *)kenv }, /* 390 = kenv */
- { AS(lchflags_args), (sy_call_t *)lchflags }, /* 391 = lchflags */
+ { SYF_MPSAFE | AS(lchflags_args), (sy_call_t *)lchflags }, /* 391 = lchflags */
{ AS(uuidgen_args), (sy_call_t *)uuidgen }, /* 392 = uuidgen */
{ SYF_MPSAFE | AS(sendfile_args), (sy_call_t *)sendfile }, /* 393 = sendfile */
{ SYF_MPSAFE | AS(mac_syscall_args), (sy_call_t *)mac_syscall }, /* 394 = mac_syscall */
- { AS(getfsstat_args), (sy_call_t *)getfsstat }, /* 395 = getfsstat */
- { AS(statfs_args), (sy_call_t *)statfs }, /* 396 = statfs */
- { AS(fstatfs_args), (sy_call_t *)fstatfs }, /* 397 = fstatfs */
+ { SYF_MPSAFE | AS(getfsstat_args), (sy_call_t *)getfsstat }, /* 395 = getfsstat */
+ { SYF_MPSAFE | AS(statfs_args), (sy_call_t *)statfs }, /* 396 = statfs */
+ { SYF_MPSAFE | AS(fstatfs_args), (sy_call_t *)fstatfs }, /* 397 = fstatfs */
{ AS(fhstatfs_args), (sy_call_t *)fhstatfs }, /* 398 = fhstatfs */
{ 0, (sy_call_t *)nosys }, /* 399 = nosys */
{ SYF_MPSAFE | AS(ksem_close_args), (sy_call_t *)lkmressys }, /* 400 = ksem_close */
==== //depot/projects/smpffs/kern/kern_descrip.c#2 (text+ko) ====
@@ -1141,11 +1141,12 @@
}
vp = fp->f_vnode;
if (vp != NULL) {
- mtx_lock(&Giant);
+ int vfslocked;
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
error = VOP_PATHCONF(vp, uap->name, td->td_retval);
VOP_UNLOCK(vp, 0, td);
- mtx_unlock(&Giant);
+ VFS_UNLOCK_GIANT(vfslocked);
} else if (fp->f_type == DTYPE_PIPE || fp->f_type == DTYPE_SOCKET) {
if (uap->name != _PC_PIPE_BUF) {
error = EINVAL;
@@ -1480,8 +1481,6 @@
struct vnode *vp;
struct flock lf;
- GIANT_REQUIRED; /* VFS */
-
/* Certain daemons might not have file descriptors. */
fdp = td->td_proc->p_fd;
if (fdp == NULL)
@@ -1512,6 +1511,7 @@
lf.l_len = 0;
lf.l_type = F_UNLCK;
vp = fp->f_vnode;
+ VFS_ASSERT_GIANT(vp->v_mount);
(void) VOP_ADVLOCK(vp,
(caddr_t)td->td_proc->
p_leader,
@@ -1814,13 +1814,15 @@
* aren't passed with the descriptor.
*/
if (fp->f_type == DTYPE_VNODE) {
- mtx_lock(&Giant);
+ int vfslocked;
+
+ vp = fp->f_vnode;
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
if ((td->td_proc->p_leader->p_flag & P_ADVLOCK) != 0) {
lf.l_whence = SEEK_SET;
lf.l_start = 0;
lf.l_len = 0;
lf.l_type = F_UNLCK;
- vp = fp->f_vnode;
(void) VOP_ADVLOCK(vp, (caddr_t)td->td_proc->p_leader,
F_UNLCK, &lf, F_POSIX);
}
@@ -1858,7 +1860,7 @@
}
FILEDESC_UNLOCK(fdp);
}
- mtx_unlock(&Giant);
+ VFS_UNLOCK_GIANT(vfslocked);
}
return (fdrop(fp, td));
}
@@ -1952,8 +1954,6 @@
struct file *fp;
int error;
- GIANT_REQUIRED; /* VFS */
-
*vpp = NULL;
if ((error = _fget(td, fd, &fp, 0, 0)) != 0)
return (error);
==== //depot/projects/smpffs/kern/kern_lock.c#2 (text+ko) ====
@@ -136,10 +136,10 @@
}
static int
-acquire(struct lock **lkpp, int extflags, int wanted) {
+acquire(struct lock **lkpp, int extflags, int wanted)
+{
struct lock *lkp = *lkpp;
int s, error;
-
CTR3(KTR_LOCK,
"acquire(): lkp == %p, extflags == 0x%x, wanted == 0x%x",
lkp, extflags, wanted);
@@ -148,7 +148,7 @@
return EBUSY;
}
- if (((lkp->lk_flags | extflags) & LK_NOPAUSE) == 0) {
+ if (((lkp->lk_flags | extflags) & (LK_NOPAUSE|LK_INTERLOCK)) == 0) {
error = apause(lkp, wanted);
if (error == 0)
return 0;
@@ -214,10 +214,6 @@
struct thread *thr;
int extflags, lockflags;
- CTR5(KTR_LOCK,
- "lockmgr(): lkp == %p (lk_wmesg == \"%s\"), flags == 0x%x, "
- "interlkp == %p, td == %p", lkp, lkp->lk_wmesg, flags, interlkp, td);
-
error = 0;
if (td == NULL)
thr = LK_KERNPROC;
@@ -226,6 +222,17 @@
if ((flags & LK_INTERNAL) == 0)
mtx_lock(lkp->lk_interlock);
+#ifdef DEBUG_LOCKS
+ CTR6(KTR_LOCK,
+ "lockmgr(): lkp == %p (lk_wmesg == \"%s\"), flags == 0x%x, "
+ "td == %p %s:%d", lkp, lkp->lk_wmesg, flags, td, file, line);
+#else
+ CTR6(KTR_LOCK,
+ "lockmgr(): lkp == %p (lk_wmesg == \"%s\"), owner == %p, exclusivecount == %d, flags == 0x%x, "
+ "td == %p", lkp, lkp->lk_wmesg, lkp->lk_lockholder,
+ lkp->lk_exclusivecount, flags, td);
+#endif
+
if (flags & LK_INTERLOCK) {
mtx_assert(interlkp, MA_OWNED | MA_NOTRECURSED);
mtx_unlock(interlkp);
@@ -479,9 +486,11 @@
return EBUSY;
}
- error = apause(lkp, LK_ALL);
- if (error == 0)
- return 0;
+ if ((extflags & LK_INTERLOCK) == 0) {
+ error = apause(lkp, LK_ALL);
+ if (error == 0)
+ return 0;
+ }
while (lkp->lk_flags & LK_ALL) {
lkp->lk_flags |= LK_WAITDRAIN;
==== //depot/projects/smpffs/kern/syscalls.c#2 (text+ko) ====
@@ -2,7 +2,7 @@
* System call names.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/kern/syscalls.c,v 1.166 2004/11/25 12:08:16 phk Exp $
+ * $FreeBSD$
* created from FreeBSD: src/sys/kern/syscalls.master,v 1.180 2004/11/25 12:07:28 phk Exp
*/
==== //depot/projects/smpffs/kern/syscalls.master#2 (text+ko) ====
@@ -61,11 +61,11 @@
9 MSTD { int link(char *path, char *link); }
10 MSTD { int unlink(char *path); }
11 OBSOL execv
-12 STD { int chdir(char *path); }
-13 STD { int fchdir(int fd); }
-14 STD { int mknod(char *path, int mode, int dev); }
-15 STD { int chmod(char *path, int mode); }
-16 STD { int chown(char *path, int uid, int gid); }
+12 MSTD { int chdir(char *path); }
+13 MSTD { int fchdir(int fd); }
+14 MSTD { int mknod(char *path, int mode, int dev); }
+15 MSTD { int chmod(char *path, int mode); }
+16 MSTD { int chown(char *path, int uid, int gid); }
17 MSTD { int obreak(char *nsize); } break obreak_args int
18 COMPAT4 { int getfsstat(struct ostatfs *buf, long bufsize, int flags); }
19 COMPAT { long lseek(int fd, long offset, int whence); }
@@ -88,10 +88,10 @@
__socklen_t * __restrict alen); }
32 MSTD { int getsockname(int fdes, struct sockaddr * __restrict asa, \
__socklen_t * __restrict alen); }
-33 STD { int access(char *path, int flags); }
-34 STD { int chflags(char *path, int flags); }
-35 STD { int fchflags(int fd, int flags); }
-36 STD { int sync(void); }
+33 MSTD { int access(char *path, int flags); }
+34 MSTD { int chflags(char *path, int flags); }
+35 MSTD { int fchflags(int fd, int flags); }
+36 MSTD { int sync(void); }
37 MSTD { int kill(int pid, int signum); }
38 COMPAT { int stat(char *path, struct ostat *ub); }
39 MSTD { pid_t getppid(void); }
@@ -116,12 +116,12 @@
53 MSTD { int sigaltstack(stack_t *ss, stack_t *oss); }
54 MSTD { int ioctl(int fd, u_long com, caddr_t data); }
55 MSTD { int reboot(int opt); }
-56 STD { int revoke(char *path); }
-57 STD { int symlink(char *path, char *link); }
-58 STD { int readlink(char *path, char *buf, int count); }
+56 MSTD { int revoke(char *path); }
+57 MSTD { int symlink(char *path, char *link); }
+58 MSTD { int readlink(char *path, char *buf, int count); }
59 MSTD { int execve(char *fname, char **argv, char **envv); }
60 MSTD { int umask(int newmask); } umask umask_args int
-61 STD { int chroot(char *path); }
+61 MSTD { int chroot(char *path); }
62 MCOMPAT { int fstat(int fd, struct ostat *sb); }
63 MCOMPAT { int getkerninfo(int op, char *where, size_t *size, \
int arg); } getkerninfo getkerninfo_args int
@@ -163,7 +163,7 @@
93 MSTD { int select(int nd, fd_set *in, fd_set *ou, \
fd_set *ex, struct timeval *tv); }
94 UNIMPL setdopt
-95 STD { int fsync(int fd); }
+95 MSTD { int fsync(int fd); }
96 MSTD { int setpriority(int which, int who, int prio); }
97 MSTD { int socket(int domain, int type, int protocol); }
98 MSTD { int connect(int s, caddr_t name, int namelen); }
@@ -197,26 +197,26 @@
120 MSTD { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
121 MSTD { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
122 MSTD { int settimeofday(struct timeval *tv, struct timezone *tzp); }
-123 STD { int fchown(int fd, int uid, int gid); }
-124 STD { int fchmod(int fd, int mode); }
+123 MSTD { int fchown(int fd, int uid, int gid); }
+124 MSTD { int fchmod(int fd, int mode); }
125 MCPT_NOA { int recvfrom(int s, caddr_t buf, size_t len, int flags, \
caddr_t from, int *fromlenaddr); } \
recvfrom recvfrom_args int
126 MSTD { int setreuid(int ruid, int euid); }
127 MSTD { int setregid(int rgid, int egid); }
-128 STD { int rename(char *from, char *to); }
+128 MSTD { int rename(char *from, char *to); }
129 COMPAT { int truncate(char *path, long length); }
130 COMPAT { int ftruncate(int fd, long length); }
131 MSTD { int flock(int fd, int how); }
-132 STD { int mkfifo(char *path, int mode); }
+132 MSTD { int mkfifo(char *path, int mode); }
133 MSTD { int sendto(int s, caddr_t buf, size_t len, int flags, \
caddr_t to, int tolen); }
134 MSTD { int shutdown(int s, int how); }
135 MSTD { int socketpair(int domain, int type, int protocol, \
int *rsv); }
-136 STD { int mkdir(char *path, int mode); }
-137 STD { int rmdir(char *path); }
-138 STD { int utimes(char *path, struct timeval *tptr); }
+136 MSTD { int mkdir(char *path, int mode); }
+137 MSTD { int rmdir(char *path); }
+138 MSTD { int utimes(char *path, struct timeval *tptr); }
139 OBSOL 4.2 sigreturn
140 MSTD { int adjtime(struct timeval *delta, \
struct timeval *olddelta); }
@@ -247,8 +247,8 @@
157 COMPAT4 { int statfs(char *path, struct ostatfs *buf); }
158 COMPAT4 { int fstatfs(int fd, struct ostatfs *buf); }
159 UNIMPL nosys
-160 STD { int lgetfh(char *fname, struct fhandle *fhp); }
-161 STD { int getfh(char *fname, struct fhandle *fhp); }
+160 MSTD { int lgetfh(char *fname, struct fhandle *fhp); }
+161 MSTD { int getfh(char *fname, struct fhandle *fhp); }
162 MSTD { int getdomainname(char *domainname, int len); }
163 MSTD { int setdomainname(char *domainname, int len); }
164 MSTD { int uname(struct utsname *name); }
@@ -286,31 +286,31 @@
185 UNIMPL lfs_markv
186 UNIMPL lfs_segclean
187 UNIMPL lfs_segwait
-188 STD { int stat(char *path, struct stat *ub); }
+188 MSTD { int stat(char *path, struct stat *ub); }
189 MSTD { int fstat(int fd, struct stat *sb); }
-190 STD { int lstat(char *path, struct stat *ub); }
-191 STD { int pathconf(char *path, int name); }
+190 MSTD { int lstat(char *path, struct stat *ub); }
+191 MSTD { int pathconf(char *path, int name); }
192 MSTD { int fpathconf(int fd, int name); }
193 UNIMPL nosys
194 MSTD { int getrlimit(u_int which, struct rlimit *rlp); } \
getrlimit __getrlimit_args int
195 MSTD { int setrlimit(u_int which, struct rlimit *rlp); } \
setrlimit __setrlimit_args int
-196 STD { int getdirentries(int fd, char *buf, u_int count, \
+196 MSTD { int getdirentries(int fd, char *buf, u_int count, \
long *basep); }
197 MSTD { caddr_t mmap(caddr_t addr, size_t len, int prot, \
int flags, int fd, int pad, off_t pos); }
-198 STD { int nosys(void); } __syscall __syscall_args int
-199 STD { off_t lseek(int fd, int pad, off_t offset, int whence); }
-200 STD { int truncate(char *path, int pad, off_t length); }
-201 STD { int ftruncate(int fd, int pad, off_t length); }
+198 MSTD { int nosys(void); } __syscall __syscall_args int
+199 MSTD { off_t lseek(int fd, int pad, off_t offset, int whence); }
+200 MSTD { int truncate(char *path, int pad, off_t length); }
+201 MSTD { int ftruncate(int fd, int pad, off_t length); }
202 MSTD { int __sysctl(int *name, u_int namelen, void *old, \
size_t *oldlenp, void *new, size_t newlen); } \
__sysctl sysctl_args int
203 MSTD { int mlock(const void *addr, size_t len); }
204 MSTD { int munlock(const void *addr, size_t len); }
-205 STD { int undelete(char *path); }
-206 STD { int futimes(int fd, struct timeval *tptr); }
+205 MSTD { int undelete(char *path); }
+206 MSTD { int futimes(int fd, struct timeval *tptr); }
207 MSTD { int getpgid(pid_t pid); }
208 UNIMPL newreboot (NetBSD)
209 MSTD { int poll(struct pollfd *fds, u_int nfds, int timeout); }
@@ -374,7 +374,7 @@
252 MSTD { int openbsd_poll(struct pollfd *fds, u_int nfds, \
int timeout); }
253 MSTD { int issetugid(void); }
-254 STD { int lchown(char *path, int uid, int gid); }
+254 MSTD { int lchown(char *path, int uid, int gid); }
255 UNIMPL nosys
256 UNIMPL nosys
257 UNIMPL nosys
@@ -392,17 +392,17 @@
269 UNIMPL nosys
270 UNIMPL nosys
271 UNIMPL nosys
-272 STD { int getdents(int fd, char *buf, size_t count); }
+272 MSTD { int getdents(int fd, char *buf, size_t count); }
273 UNIMPL nosys
-274 STD { int lchmod(char *path, mode_t mode); }
+274 MSTD { int lchmod(char *path, mode_t mode); }
275 NOPROTO { int lchown(char *path, uid_t uid, gid_t gid); } \
netbsd_lchown lchown_args int
-276 STD { int lutimes(char *path, struct timeval *tptr); }
+276 MSTD { int lutimes(char *path, struct timeval *tptr); }
277 MNOPROTO { int msync(void *addr, size_t len, int flags); } \
netbsd_msync msync_args int
-278 STD { int nstat(char *path, struct nstat *ub); }
+278 MSTD { int nstat(char *path, struct nstat *ub); }
279 MSTD { int nfstat(int fd, struct nstat *sb); }
-280 STD { int nlstat(char *path, struct nstat *ub); }
+280 MSTD { int nlstat(char *path, struct nstat *ub); }
281 UNIMPL nosys
282 UNIMPL nosys
283 UNIMPL nosys
@@ -453,7 +453,7 @@
323 OBSOL thr_wakeup
324 MSTD { int mlockall(int how); }
325 MSTD { int munlockall(void); }
-326 STD { int __getcwd(u_char *buf, u_int buflen); }
+326 MSTD { int __getcwd(u_char *buf, u_int buflen); }
327 MSTD { int sched_setparam (pid_t pid, \
const struct sched_param *param); }
@@ -471,7 +471,7 @@
335 MSTD { int utrace(const void *addr, size_t len); }
336 MCOMPAT4 { int sendfile(int fd, int s, off_t offset, size_t nbytes, \
struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
-337 STD { int kldsym(int fileid, int cmd, void *data); }
+337 MSTD { int kldsym(int fileid, int cmd, void *data); }
338 MSTD { int jail(struct jail *jail); }
339 UNIMPL pioctl
340 MSTD { int sigprocmask(int how, const sigset_t *set, \
@@ -534,7 +534,7 @@
const char *attrname); }
374 MSTD { int __setugid(int flag); }
375 NOIMPL { int nfsclnt(int flag, caddr_t argp); }
-376 STD { int eaccess(char *path, int flags); }
+376 MSTD { int eaccess(char *path, int flags); }
377 UNIMPL afs_syscall
378 MSTD { int nmount(struct iovec *iovp, unsigned int iovcnt, \
int flags); }
@@ -555,16 +555,16 @@
struct mac *mac_p); }
390 STD { int kenv(int what, const char *name, char *value, \
int len); }
-391 STD { int lchflags(const char *path, int flags); }
+391 MSTD { int lchflags(const char *path, int flags); }
392 STD { int uuidgen(struct uuid *store, int count); }
393 MSTD { int sendfile(int fd, int s, off_t offset, size_t nbytes, \
struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
394 MSTD { int mac_syscall(const char *policy, int call, \
void *arg); }
-395 STD { int getfsstat(struct statfs *buf, long bufsize, \
+395 MSTD { int getfsstat(struct statfs *buf, long bufsize, \
int flags); }
-396 STD { int statfs(char *path, struct statfs *buf); }
-397 STD { int fstatfs(int fd, struct statfs *buf); }
+396 MSTD { int statfs(char *path, struct statfs *buf); }
+397 MSTD { int fstatfs(int fd, struct statfs *buf); }
398 STD { int fhstatfs(const struct fhandle *u_fhp, \
struct statfs *buf); }
399 UNIMPL nosys
==== //depot/projects/smpffs/kern/vfs_bio.c#2 (text+ko) ====
@@ -403,8 +403,6 @@
vm_page_t m)
{
- GIANT_REQUIRED;
-
VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED);
if (bp->b_flags & B_CACHE) {
int base = (foff + off) & PAGE_MASK;
@@ -523,8 +521,6 @@
struct buf *bp;
int i;
- GIANT_REQUIRED;
-
mtx_init(&bqlock, "buf queue lock", NULL, MTX_DEF);
mtx_init(&rbreqlock, "runningbufspace lock", NULL, MTX_DEF);
mtx_init(&nblock, "needsbuffer lock", NULL, MTX_DEF);
@@ -628,8 +624,6 @@
bfreekva(struct buf *bp)
{
- GIANT_REQUIRED;
-
if (bp->b_kvasize) {
atomic_add_int(&buffreekvacnt, 1);
atomic_subtract_int(&bufspace, bp->b_kvasize);
@@ -652,9 +646,10 @@
bremfree(struct buf *bp)
{
+ CTR3(KTR_BUF, "bremfree(%p) vp %p flags %X", bp, bp->b_vp, bp->b_flags);
KASSERT(BUF_REFCNT(bp), ("bremfree: buf must be locked."));
KASSERT((bp->b_flags & B_REMFREE) == 0 && bp->b_qindex != QUEUE_NONE,
- ("bremfree: buffer not on a queue."));
+ ("bremfree: buffer %p not on a queue.", bp));
bp->b_flags |= B_REMFREE;
/* Fixup numfreebuffers count. */
@@ -687,16 +682,15 @@
{
int s = splbio();
+ CTR3(KTR_BUF, "bremfreel(%p) vp %p flags %X",
+ bp, bp->b_vp, bp->b_flags);
+ KASSERT(BUF_REFCNT(bp), ("bremfreel: buffer %p not locked.", bp));
+ KASSERT(bp->b_qindex != QUEUE_NONE,
+ ("bremfreel: buffer %p not on a queue.", bp));
mtx_assert(&bqlock, MA_OWNED);
- if (bp->b_qindex != QUEUE_NONE) {
- KASSERT(BUF_REFCNT(bp) == 1, ("bremfree: bp %p not locked",bp));
- TAILQ_REMOVE(&bufqueues[bp->b_qindex], bp, b_freelist);
- bp->b_qindex = QUEUE_NONE;
- } else {
- if (BUF_REFCNT(bp) <= 1)
- panic("bremfree: removing a buffer not on a queue");
- }
+ TAILQ_REMOVE(&bufqueues[bp->b_qindex], bp, b_freelist);
+ bp->b_qindex = QUEUE_NONE;
/*
* If this was a delayed bremfree() we only need to remove the buffer
* from the queue and return the stats are already done.
@@ -746,6 +740,7 @@
int i;
int rv = 0, readwait = 0;
+ CTR3(KTR_BUF, "breadn(%p, %jd, %d)", vp, blkno, size);
*bpp = bp = getblk(vp, blkno, size, 0, 0, 0);
/* if not found in cache, do some I/O */
@@ -809,6 +804,7 @@
int oldflags, s;
struct buf *newbp;
+ CTR3(KTR_BUF, "bufwrite(%p) vp %p flags %X", bp, bp->b_vp, bp->b_flags);
if (bp->b_flags & B_INVAL) {
brelse(bp);
return (0);
@@ -1004,8 +1000,7 @@
struct buf *nbp;
struct bufobj *bo;
- GIANT_REQUIRED;
-
+ CTR3(KTR_BUF, "bdwrite(%p) vp %p flags %X", bp, bp->b_vp, bp->b_flags);
KASSERT(bp->b_bufobj != NULL, ("No b_bufobj %p", bp));
KASSERT(BUF_REFCNT(bp) != 0, ("bdwrite: buffer is not busy"));
@@ -1023,38 +1018,45 @@
*/
vp = bp->b_vp;
bo = bp->b_bufobj;
- BO_LOCK(bo);
- if (td->td_pflags & TDP_COWINPROGRESS) {
- recursiveflushes++;
- } else if (bo->bo_dirty.bv_cnt > dirtybufthresh + 10) {
- BO_UNLOCK(bo);
- (void) VOP_FSYNC(vp, td->td_ucred, MNT_NOWAIT, td);
+ if ((td->td_pflags & TDP_COWINPROGRESS) == 0) {
BO_LOCK(bo);
- altbufferflushes++;
- } else if (bo->bo_dirty.bv_cnt > dirtybufthresh) {
- /*
- * Try to find a buffer to flush.
- */
- TAILQ_FOREACH(nbp, &bo->bo_dirty.bv_hd, b_bobufs) {
- if ((nbp->b_vflags & BV_BKGRDINPROG) ||
- buf_countdeps(nbp, 0) ||
- BUF_LOCK(nbp, LK_EXCLUSIVE | LK_NOWAIT, NULL))
- continue;
- if (bp == nbp)
- panic("bdwrite: found ourselves");
+ if (bo->bo_dirty.bv_cnt > dirtybufthresh + 10) {
BO_UNLOCK(bo);
- if (nbp->b_flags & B_CLUSTEROK) {
- vfs_bio_awrite(nbp);
- } else {
- bremfree(nbp);
- bawrite(nbp);
+ (void) VOP_FSYNC(vp, td->td_ucred, MNT_NOWAIT, td);
+ altbufferflushes++;
+ } else if (bo->bo_dirty.bv_cnt > dirtybufthresh) {
+ /*
+ * Try to find a buffer to flush.
+ */
+ TAILQ_FOREACH(nbp, &bo->bo_dirty.bv_hd, b_bobufs) {
+ if ((nbp->b_vflags & BV_BKGRDINPROG) ||
+ BUF_LOCK(nbp,
+ LK_EXCLUSIVE | LK_NOWAIT, NULL))
+ continue;
+ if (bp == nbp)
+ panic("bdwrite: found ourselves");
+ BO_UNLOCK(bo);
+ /* Don't countdeps with the bo lock held. */
+ if (buf_countdeps(nbp, 0)) {
+ BO_LOCK(bo);
+ BUF_UNLOCK(nbp);
+ continue;
+ }
+ if (nbp->b_flags & B_CLUSTEROK) {
+ vfs_bio_awrite(nbp);
+ } else {
+ bremfree(nbp);
+ bawrite(nbp);
+ }
+ dirtybufferflushes++;
+ break;
}
- BO_LOCK(bo);
- dirtybufferflushes++;
- break;
- }
- }
- BO_UNLOCK(bo);
+ if (nbp == NULL)
+ BO_UNLOCK(bo);
+ } else
+ BO_UNLOCK(bo);
+ } else
+ recursiveflushes++;
bdirty(bp);
/*
@@ -1127,6 +1129,9 @@
bdirty(struct buf *bp)
{
+ CTR3(KTR_BUF, "bdirty(%p) vp %p flags %X",
+ bp, bp->b_vp, bp->b_flags);
+ KASSERT(BUF_REFCNT(bp) == 1, ("bdirty: bp %p not locked",bp));
KASSERT(bp->b_bufobj != NULL, ("No b_bufobj %p", bp));
KASSERT(bp->b_flags & B_REMFREE || bp->b_qindex == QUEUE_NONE,
("bdirty: buffer %p still on queue %d", bp, bp->b_qindex));
@@ -1134,7 +1139,7 @@
bp->b_iocmd = BIO_WRITE;
if ((bp->b_flags & B_DELWRI) == 0) {
- bp->b_flags |= B_DONE | B_DELWRI;
+ bp->b_flags |= /* XXX B_DONE | */ B_DELWRI;
reassignbuf(bp);
atomic_add_int(&numdirtybuffers, 1);
bd_wakeup((lodirtybuffers + hidirtybuffers) / 2);
@@ -1157,9 +1162,11 @@
bundirty(struct buf *bp)
{
+ CTR3(KTR_BUF, "bundirty(%p) vp %p flags %X", bp, bp->b_vp, bp->b_flags);
KASSERT(bp->b_bufobj != NULL, ("No b_bufobj %p", bp));
KASSERT(bp->b_flags & B_REMFREE || bp->b_qindex == QUEUE_NONE,
("bundirty: buffer %p still on queue %d", bp, bp->b_qindex));
+ KASSERT(BUF_REFCNT(bp) == 1, ("bundirty: bp %p not locked",bp));
if (bp->b_flags & B_DELWRI) {
bp->b_flags &= ~B_DELWRI;
@@ -1207,7 +1214,6 @@
if (numdirtybuffers >= hidirtybuffers) {
int s;
- mtx_lock(&Giant);
s = splbio();
mtx_lock(&nblock);
while (numdirtybuffers >= hidirtybuffers) {
@@ -1218,7 +1224,6 @@
}
splx(s);
mtx_unlock(&nblock);
- mtx_unlock(&Giant);
}
}
@@ -1244,8 +1249,8 @@
{
int s;
- GIANT_REQUIRED;
-
+ CTR3(KTR_BUF, "brelse(%p) vp %p flags %X",
+ bp, bp->b_vp, bp->b_flags);
KASSERT(!(bp->b_flags & (B_CLUSTER|B_PAGING)),
("brelse: inappropriate B_PAGING or B_CLUSTER bp %p", bp));
@@ -1525,6 +1530,7 @@
s = splbio();
+ CTR3(KTR_BUF, "bqrelse(%p) vp %p flags %X", bp, bp->b_vp, bp->b_flags);
KASSERT(!(bp->b_flags & (B_CLUSTER|B_PAGING)),
("bqrelse: inappropriate B_PAGING or B_CLUSTER bp %p", bp));
@@ -1595,7 +1601,6 @@
int i;
vm_page_t m;
- GIANT_REQUIRED;
VM_OBJECT_LOCK(bp->b_bufobj->bo_object);
vm_page_lock_queues();
for (i = 0; i < bp->b_npages; i++) {
@@ -1787,8 +1792,6 @@
int nqindex;
static int flushingbufs;
- GIANT_REQUIRED;
-
/*
* We can't afford to block since we might be holding a vnode lock,
* which may prevent system daemons from running. We deal with
@@ -1873,15 +1876,6 @@
break;
}
}
- if (bp->b_vp) {
- BO_LOCK(bp->b_bufobj);
- if (bp->b_vflags & BV_BKGRDINPROG) {
- BO_UNLOCK(bp->b_bufobj);
- continue;
- }
- BO_UNLOCK(bp->b_bufobj);
- }
-
/*
* If we are defragging then we need a buffer with
* b_kvasize != 0. XXX this situation should no longer
@@ -1899,6 +1893,18 @@
*/
if (BUF_LOCK(bp, LK_EXCLUSIVE | LK_NOWAIT, NULL) != 0)
continue;
+ if (bp->b_vp) {
+ BO_LOCK(bp->b_bufobj);
+ if (bp->b_vflags & BV_BKGRDINPROG) {
+ BO_UNLOCK(bp->b_bufobj);
+ BUF_UNLOCK(bp);
+ continue;
+ }
+ BO_UNLOCK(bp->b_bufobj);
+ }
+ CTR3(KTR_BUF, "getnewbuf(%p) vp %p flags %X (recycling)",
+ bp, bp->b_vp, bp->b_flags);
+
/*
* Sanity Checks
*/
@@ -2185,10 +2191,9 @@
TAILQ_FOREACH(bp, &bufqueues[QUEUE_DIRTY], b_freelist) {
if (BUF_LOCK(bp, LK_EXCLUSIVE | LK_NOWAIT, NULL) != 0)
continue;
- KASSERT((bp->b_flags & B_DELWRI),
- ("unexpected clean buffer %p", bp));
BO_LOCK(bp->b_bufobj);
- if ((bp->b_vflags & BV_BKGRDINPROG) != 0) {
+ if ((bp->b_vflags & BV_BKGRDINPROG) != 0 ||
+ (bp->b_flags & B_DELWRI) == 0) {
BO_UNLOCK(bp->b_bufobj);
BUF_UNLOCK(bp);
continue;
@@ -2226,6 +2231,8 @@
}
if (vn_lock(vp, LK_EXCLUSIVE | LK_NOWAIT, td) == 0) {
mtx_unlock(&bqlock);
+ CTR3(KTR_BUF, "flushbufqueue(%p) vp %p flags %X",
+ bp, bp->b_vp, bp->b_flags);
vfs_bio_awrite(bp);
vn_finished_write(mp);
VOP_UNLOCK(vp, 0, td);
@@ -2269,7 +2276,6 @@
vm_page_t m;
vm_ooffset_t off;
- GIANT_REQUIRED;
ASSERT_VOP_LOCKED(vp, "inmem");
if (incore(&vp->v_bufobj, blkno))
@@ -2321,7 +2327,6 @@
int i;
vm_object_t object;
- GIANT_REQUIRED;
/*
* Degenerate case - empty buffer
*/
@@ -2442,9 +2447,10 @@
struct bufobj *bo;
int s;
int error;
- ASSERT_VOP_LOCKED(vp, "getblk");
struct vm_object *vmo;
+ CTR3(KTR_BUF, "getblk(%p, %ld, %d)", vp, (long)blkno, size);
+ ASSERT_VOP_LOCKED(vp, "getblk");
if (size > MAXBSIZE)
panic("getblk: size(%d) > MAXBSIZE(%d)\n", size, MAXBSIZE);
@@ -2677,6 +2683,7 @@
splx(s);
bp->b_flags &= ~B_DONE;
}
+ CTR4(KTR_BUF, "getblk(%p, %ld, %d) = %p", vp, (long)blkno, size, bp);
KASSERT(BUF_REFCNT(bp) == 1, ("getblk: bp %p not locked",bp));
KASSERT(bp->b_bufobj == bo,
("wrong b_bufobj %p should be %p", bp->b_bufobj, bo));
@@ -2728,8 +2735,6 @@
int newbsize, mbsize;
int i;
- GIANT_REQUIRED;
-
if (BUF_REFCNT(bp) == 0)
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list