nfs_vnops.c (39794) | nfs_vnops.c (40790) |
---|---|
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_vnops.c 8.16 (Berkeley) 5/27/95 | 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_vnops.c 8.16 (Berkeley) 5/27/95 |
37 * $Id: nfs_vnops.c,v 1.108 1998/09/29 23:29:48 mckusick Exp $ | 37 * $Id: nfs_vnops.c,v 1.109 1998/09/29 23:39:37 mckusick Exp $ |
38 */ 39 40 41/* 42 * vnode op calls for Sun NFS version 2 and 3 43 */ 44 45#include "opt_inet.h" --- 2704 unchanged lines hidden (view full) --- 2750 endoff = 0; 2751 bvecpos = 0; 2752 if (NFS_ISV3(vp) && commit) { 2753 s = splbio(); 2754 /* 2755 * Count up how many buffers waiting for a commit. 2756 */ 2757 bveccount = 0; | 38 */ 39 40 41/* 42 * vnode op calls for Sun NFS version 2 and 3 43 */ 44 45#include "opt_inet.h" --- 2704 unchanged lines hidden (view full) --- 2750 endoff = 0; 2751 bvecpos = 0; 2752 if (NFS_ISV3(vp) && commit) { 2753 s = splbio(); 2754 /* 2755 * Count up how many buffers waiting for a commit. 2756 */ 2757 bveccount = 0; |
2758 for (bp = vp->v_dirtyblkhd.lh_first; bp; bp = nbp) { 2759 nbp = bp->b_vnbufs.le_next; | 2758 for (bp = TAILQ_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) { 2759 nbp = TAILQ_NEXT(bp, b_vnbufs); |
2760 if ((bp->b_flags & (B_BUSY | B_DELWRI | B_NEEDCOMMIT)) 2761 == (B_DELWRI | B_NEEDCOMMIT)) 2762 bveccount++; 2763 } 2764 /* 2765 * Allocate space to remember the list of bufs to commit. It is 2766 * important to use M_NOWAIT here to avoid a race with nfs_write. 2767 * If we can't get memory (for whatever reason), we will end up --- 9 unchanged lines hidden (view full) --- 2777 bvec = bvec_on_stack; 2778 bvecsize = NFS_COMMITBVECSIZ; 2779 } else 2780 bvecsize = bveccount; 2781 } else { 2782 bvec = bvec_on_stack; 2783 bvecsize = NFS_COMMITBVECSIZ; 2784 } | 2760 if ((bp->b_flags & (B_BUSY | B_DELWRI | B_NEEDCOMMIT)) 2761 == (B_DELWRI | B_NEEDCOMMIT)) 2762 bveccount++; 2763 } 2764 /* 2765 * Allocate space to remember the list of bufs to commit. It is 2766 * important to use M_NOWAIT here to avoid a race with nfs_write. 2767 * If we can't get memory (for whatever reason), we will end up --- 9 unchanged lines hidden (view full) --- 2777 bvec = bvec_on_stack; 2778 bvecsize = NFS_COMMITBVECSIZ; 2779 } else 2780 bvecsize = bveccount; 2781 } else { 2782 bvec = bvec_on_stack; 2783 bvecsize = NFS_COMMITBVECSIZ; 2784 } |
2785 for (bp = vp->v_dirtyblkhd.lh_first; bp; bp = nbp) { 2786 nbp = bp->b_vnbufs.le_next; | 2785 for (bp = TAILQ_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) { 2786 nbp = TAILQ_NEXT(bp, b_vnbufs); |
2787 if (bvecpos >= bvecsize) 2788 break; 2789 if ((bp->b_flags & (B_BUSY | B_DELWRI | B_NEEDCOMMIT)) 2790 != (B_DELWRI | B_NEEDCOMMIT)) 2791 continue; 2792 bremfree(bp); 2793 /* 2794 * Work out if all buffers are using the same cred --- 80 unchanged lines hidden (view full) --- 2875 } 2876 } 2877 2878 /* 2879 * Start/do any write(s) that are required. 2880 */ 2881loop: 2882 s = splbio(); | 2787 if (bvecpos >= bvecsize) 2788 break; 2789 if ((bp->b_flags & (B_BUSY | B_DELWRI | B_NEEDCOMMIT)) 2790 != (B_DELWRI | B_NEEDCOMMIT)) 2791 continue; 2792 bremfree(bp); 2793 /* 2794 * Work out if all buffers are using the same cred --- 80 unchanged lines hidden (view full) --- 2875 } 2876 } 2877 2878 /* 2879 * Start/do any write(s) that are required. 2880 */ 2881loop: 2882 s = splbio(); |
2883 for (bp = vp->v_dirtyblkhd.lh_first; bp; bp = nbp) { 2884 nbp = bp->b_vnbufs.le_next; | 2883 for (bp = TAILQ_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) { 2884 nbp = TAILQ_NEXT(bp, b_vnbufs); |
2885 if (bp->b_flags & B_BUSY) { 2886 if (waitfor != MNT_WAIT || passone) 2887 continue; 2888 bp->b_flags |= B_WANTED; 2889 error = tsleep((caddr_t)bp, slpflag | (PRIBIO + 1), 2890 "nfsfsync", slptimeo); 2891 splx(s); 2892 if (error) { --- 37 unchanged lines hidden (view full) --- 2930 goto done; 2931 } 2932 if (slpflag == PCATCH) { 2933 slpflag = 0; 2934 slptimeo = 2 * hz; 2935 } 2936 } 2937 } | 2885 if (bp->b_flags & B_BUSY) { 2886 if (waitfor != MNT_WAIT || passone) 2887 continue; 2888 bp->b_flags |= B_WANTED; 2889 error = tsleep((caddr_t)bp, slpflag | (PRIBIO + 1), 2890 "nfsfsync", slptimeo); 2891 splx(s); 2892 if (error) { --- 37 unchanged lines hidden (view full) --- 2930 goto done; 2931 } 2932 if (slpflag == PCATCH) { 2933 slpflag = 0; 2934 slptimeo = 2 * hz; 2935 } 2936 } 2937 } |
2938 if (vp->v_dirtyblkhd.lh_first && commit) { | 2938 if (!TAILQ_EMPTY(&vp->v_dirtyblkhd) && commit) { |
2939 goto loop; 2940 } 2941 } 2942 if (np->n_flag & NWRITEERR) { 2943 error = np->n_error; 2944 np->n_flag &= ~NWRITEERR; 2945 } 2946done: --- 364 unchanged lines hidden --- | 2939 goto loop; 2940 } 2941 } 2942 if (np->n_flag & NWRITEERR) { 2943 error = np->n_error; 2944 np->n_flag &= ~NWRITEERR; 2945 } 2946done: --- 364 unchanged lines hidden --- |