Deleted Added
sdiff udiff text old ( 51906 ) new ( 54480 )
full compact
1/*
2 * Copyright (c) 1989, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Rick Macklem at The University of Guelph.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 20 unchanged lines hidden (view full) ---

29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * @(#)nfs_subs.c 8.8 (Berkeley) 5/22/95
37 * $FreeBSD: head/sys/nfs/nfs_common.c 51906 1999-10-03 12:18:29Z phk $
38 */
39
40/*
41 * These functions support the macros and help fiddle mbuf chains for
42 * the nfs op functions. They do things like create the rpc header and
43 * copy data between mbuf chains and uio lists.
44 */
45#include <sys/param.h>

--- 1306 unchanged lines hidden (view full) ---

1352 }
1353 if (vap->va_size != np->n_size) {
1354 if (vap->va_type == VREG) {
1355 if (np->n_flag & NMODIFIED) {
1356 if (vap->va_size < np->n_size)
1357 vap->va_size = np->n_size;
1358 else
1359 np->n_size = vap->va_size;
1360 } else
1361 np->n_size = vap->va_size;
1362 vnode_pager_setsize(vp, np->n_size);
1363 } else
1364 np->n_size = vap->va_size;
1365 }
1366 np->n_attrstamp = time_second;
1367 if (vaper != NULL) {
1368 bcopy((caddr_t)vap, (caddr_t)vaper, sizeof(*vap));
1369 if (np->n_flag & NCHG) {
1370 if (np->n_flag & NACC)
1371 vaper->va_atime = np->n_atim;
1372 if (np->n_flag & NUPD)

--- 66 unchanged lines hidden (view full) ---

1439 nfsstats.attrcache_hits++;
1440 if (vap->va_size != np->n_size) {
1441 if (vap->va_type == VREG) {
1442 if (np->n_flag & NMODIFIED) {
1443 if (vap->va_size < np->n_size)
1444 vap->va_size = np->n_size;
1445 else
1446 np->n_size = vap->va_size;
1447 } else
1448 np->n_size = vap->va_size;
1449 vnode_pager_setsize(vp, np->n_size);
1450 } else
1451 np->n_size = vap->va_size;
1452 }
1453 bcopy((caddr_t)vap, (caddr_t)vaper, sizeof(struct vattr));
1454 if (np->n_flag & NCHG) {
1455 if (np->n_flag & NACC)
1456 vaper->va_atime = np->n_atim;
1457 if (np->n_flag & NUPD)
1458 vaper->va_mtime = np->n_mtim;
1459 }

--- 685 unchanged lines hidden (view full) ---

2145 if (np->n_cookies.lh_first)
2146 np->n_cookies.lh_first->ndm_eocookie = 0;
2147}
2148
2149/*
2150 * The write verifier has changed (probably due to a server reboot), so all
2151 * B_NEEDCOMMIT blocks will have to be written again. Since they are on the
2152 * dirty block list as B_DELWRI, all this takes is clearing the B_NEEDCOMMIT
2153 * flag. Once done the new write verifier can be set for the mount point.
2154 */
2155void
2156nfs_clearcommit(mp)
2157 struct mount *mp;
2158{
2159 register struct vnode *vp, *nvp;
2160 register struct buf *bp, *nbp;
2161 int s;

--- 4 unchanged lines hidden (view full) ---

2166 if (vp->v_mount != mp) /* Paranoia */
2167 goto loop;
2168 nvp = vp->v_mntvnodes.le_next;
2169 for (bp = TAILQ_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) {
2170 nbp = TAILQ_NEXT(bp, b_vnbufs);
2171 if (BUF_REFCNT(bp) == 0 &&
2172 (bp->b_flags & (B_DELWRI | B_NEEDCOMMIT))
2173 == (B_DELWRI | B_NEEDCOMMIT))
2174 bp->b_flags &= ~B_NEEDCOMMIT;
2175 }
2176 }
2177 splx(s);
2178}
2179
2180#ifndef NFS_NOSERVER
2181/*
2182 * Map errnos to NFS error numbers. For Version 3 also filter out error

--- 79 unchanged lines hidden ---