svn commit: r248567 - head/sys/fs/nfsclient

fidaj fidaj at ukr.net
Thu Mar 21 11:32:44 UTC 2013




that commit breaks kernel built

...
/usr/local/libexec/ccache/world/cc -O2 -pipe -fno-strict-aliasing -Werror
-D_KERNEL -DKLD_MODULE -nostdinc -DHAVE_KERNEL_OPTION_HEADERS -include
/usr/obj/usr/src/sys/GENERIC/opt_global.h -I. -I@ -I@/contrib/altq
-finline-limit=8000 --param inline-unit-growth=100 --param
large-function-growth=1000 -fno-common -g -fno-omit-frame-pointer
-I/usr/obj/usr/src/sys/GENERIC -mcmodel=kernel -mno-red-zone -mno-mmx
-mno-sse -msoft-float -fno-asynchronous-unwind-tables -ffreestanding
-fstack-protector -std=iso9899:1999 -fstack-protector -Wall
-Wredundant-decls -Wnested-externs -Wstrict-prototypes
-Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef
-Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs
-fdiagnostics-show-option -c
/usr/src/sys/modules/nfscl/../../fs/nfsclient/nfs_clvfsops.c
/usr/local/libexec/ccache/world/cc -O2 -pipe -fno-strict-aliasing -Werror
-D_KERNEL -DKLD_MODULE -nostdinc -DHAVE_KERNEL_OPTION_HEADERS -include
/usr/obj/usr/src/sys/GENERIC/opt_global.h -I. -I@ -I@/contrib/altq
-finline-limit=8000 --param inline-unit-growth=100 --param
large-function-growth=1000 -fno-common -g -fno-omit-frame-pointer
-I/usr/obj/usr/src/sys/GENERIC -mcmodel=kernel -mno-red-zone -mno-mmx
-mno-sse -msoft-float -fno-asynchronous-unwind-tables -ffreestanding
-fstack-protector -std=iso9899:1999 -fstack-protector -Wall
-Wredundant-decls -Wnested-externs -Wstrict-prototypes
-Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef
-Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs
-fdiagnostics-show-option -c
/usr/src/sys/modules/nfscl/../../fs/nfsclient/nfs_clvnops.c
ctfconvert -L VERSION -g nfs_diskless.o
ctfconvert -L VERSION -g nfs_clkrpc.o
ctfconvert -L VERSION -g nfs_clvfsops.o
ctfconvert -L VERSION -g nfs_clsubs.o
ctfconvert -L VERSION -g nfs_clrpcops.o
ctfconvert -L VERSION -g nfs_clnfsiod.o
ctfconvert -L VERSION -g nfs_clstate.o
ctfconvert -L VERSION -g nfs_clbio.o
ctfconvert -L VERSION -g nfs_clvnops.o
ctfconvert -L VERSION -g nfs_clcomsubs.o
ctfconvert -L VERSION -g nfs_clnode.o
cc1: warnings being treated as errors
/usr/src/sys/modules/nfscl/../../fs/nfsclient/nfs_clport.c: In function
'nfscl_loadattrcache':
/usr/src/sys/modules/nfscl/../../fs/nfsclient/nfs_clport.c:364: warning:
'nsize' may be used uninitialized in this function
*** [nfs_clport.o] Error code 1
1 error
*** [all] Error code 2
1 error
*** [modules-all] Error code 2
2 errors
*** [buildkernel] Error code 2
1 error
*** [buildkernel] Error code 2

Stop in /usr/src.

Author: kib
Date: Thu Mar 21 07:25:08 2013
New Revision: 248567
URL:   http://svnweb.freebsd.org/changeset/base/248567  
Log:
Do not call vnode_pager_setsize() while a NFS node mutex is
locked. vnode_pager_setsize() might sleep waiting for the page after
EOF be unbusied.

Call vnode_pager_setsize() both for the regular and directory vnodes.

Reported by:  mich
Reviewed by:  rmacklem
Discussed with:       avg, jhb
MFC after:    2 weeks

Modified:
head/sys/fs/nfsclient/nfs_clport.c

Modified: head/sys/fs/nfsclient/nfs_clport.c
==============================================================================
--- head/sys/fs/nfsclient/nfs_clport.c  Thu Mar 21 07:04:17 2013        (r248566)
+++ head/sys/fs/nfsclient/nfs_clport.c  Thu Mar 21 07:25:08 2013        (r248567)
@@ -361,6 +361,8 @@ nfscl_loadattrcache(struct vnode **vpp, 
struct nfsnode *np;
struct nfsmount *nmp;
struct timespec mtime_save;
+       u_quad_t nsize;
+       int setnsize;

/*
* If v_type == VNON it is a new node, so fill in the v_type,
@@ -418,6 +420,7 @@ nfscl_loadattrcache(struct vnode **vpp, 
} else
vap->va_fsid = vp->v_mount->mnt_stat.f_fsid.val[0];
np->n_attrstamp = time_second;
+       setnsize = 0;
if (vap->va_size != np->n_size) {
if (vap->va_type == VREG) {
if (dontshrink && vap->va_size < np->n_size) {
@@ -444,10 +447,13 @@ nfscl_loadattrcache(struct vnode **vpp, 
np->n_size = vap->va_size;
np->n_flag |= NSIZECHANGED;
}
-                       vnode_pager_setsize(vp, np->n_size);
} else {
np->n_size = vap->va_size;
}
+               if (vap->va_type == VREG || vap->va_type == VDIR) {
+                       setnsize = 1;
+                       nsize = vap->va_size;
+               }
}
/*
* The following checks are added to prevent a race between (say)
@@ -480,6 +486,8 @@ nfscl_loadattrcache(struct vnode **vpp, 
KDTRACE_NFS_ATTRCACHE_LOAD_DONE(vp, vap, 0);
#endif
NFSUNLOCKNODE(np);
+       if (setnsize)
+               vnode_pager_setsize(vp, nsize);
return (0);
}



More information about the svn-src-all mailing list