Page MenuHomeFreeBSD

D28318.diff
No OneTemporary

D28318.diff

diff --git a/sys/fs/nfs/nfsport.h.orig b/sys/fs/nfs/nfsport.h
--- a/sys/fs/nfs/nfsport.h.orig
+++ b/sys/fs/nfs/nfsport.h
@@ -995,7 +995,7 @@
int nfscl_loadattrcache(struct vnode **, struct nfsvattr *, void *, void *,
int, int);
int newnfs_realign(struct mbuf **, int);
-bool ncl_pager_setsize(struct vnode *vp, u_quad_t *nsizep);
+bool ncl_pager_setsize(struct vnode *vp, u_quad_t nsize, u_quad_t *nsizep);
/*
* If the port runs on an SMP box that can enforce Atomic ops with low
diff --git a/sys/fs/nfsclient/nfs_clbio.c.orig b/sys/fs/nfsclient/nfs_clbio.c
--- a/sys/fs/nfsclient/nfs_clbio.c.orig
+++ b/sys/fs/nfsclient/nfs_clbio.c
@@ -723,7 +723,7 @@
curthread_pflags2_restore(save2);
if ((curthread->td_pflags2 & TDP2_SBPAGES) == 0) {
NFSLOCKNODE(np);
- ncl_pager_setsize(vp, NULL);
+ ncl_pager_setsize(vp, np->n_vattr.na_size, NULL);
}
return (error);
}
@@ -893,7 +893,7 @@
struct nfsmount *nmp = VFSTONFS(vp->v_mount);
daddr_t lbn;
int bcount, noncontig_write, obcount;
- int bp_cached, n, on, error = 0, error1, wouldcommit;
+ int bp_cached, n, on, error = 0, error1, save2, wouldcommit;
size_t orig_resid, local_resid;
off_t orig_size, tmp_off;
@@ -985,6 +985,7 @@
if (vn_rlimit_fsize(vp, uio, td))
return (EFBIG);
+ save2 = curthread_pflags2_set(TDP2_SBPAGES);
biosize = vp->v_bufobj.bo_bsize;
/*
* Find all of this file's B_NEEDCOMMIT buffers. If our writes
@@ -1023,7 +1024,7 @@
error = ncl_vinvalbuf(vp, V_SAVE | ((ioflag &
IO_VMIO) != 0 ? V_VMIO : 0), td, 1);
if (error != 0)
- return (error);
+ goto out;
wouldcommit = biosize;
}
}
@@ -1063,6 +1064,7 @@
NFSLOCKNODE(np);
np->n_size = uio->uio_offset + n;
np->n_flag |= NMODIFIED;
+ np->n_flag &= ~NVNSETSZSKIP;
vnode_pager_setsize(vp, np->n_size);
NFSUNLOCKNODE(np);
@@ -1092,6 +1094,7 @@
if (uio->uio_offset + n > np->n_size) {
np->n_size = uio->uio_offset + n;
np->n_flag |= NMODIFIED;
+ np->n_flag &= ~NVNSETSZSKIP;
vnode_pager_setsize(vp, np->n_size);
}
NFSUNLOCKNODE(np);
@@ -1279,6 +1282,13 @@
uio->uio_offset -= orig_resid - uio->uio_resid;
uio->uio_resid = orig_resid;
}
+ }
+
+out:
+ curthread_pflags2_restore(save2);
+ if ((curthread->td_pflags2 & TDP2_SBPAGES) == 0) {
+ NFSLOCKNODE(np);
+ ncl_pager_setsize(vp, np->n_size, NULL);
}
return (error);
diff --git a/sys/fs/nfsclient/nfs_clport.c.orig b/sys/fs/nfsclient/nfs_clport.c
--- a/sys/fs/nfsclient/nfs_clport.c.orig
+++ b/sys/fs/nfsclient/nfs_clport.c
@@ -565,7 +565,7 @@
if (np->n_attrstamp != 0)
KDTRACE_NFS_ATTRCACHE_LOAD_DONE(vp, vap, error);
#endif
- (void)ncl_pager_setsize(vp, NULL);
+ (void)ncl_pager_setsize(vp, vap->va_size, NULL);
return (error);
}
diff --git a/sys/fs/nfsclient/nfs_clsubs.c.orig b/sys/fs/nfsclient/nfs_clsubs.c
--- a/sys/fs/nfsclient/nfs_clsubs.c.orig
+++ b/sys/fs/nfsclient/nfs_clsubs.c
@@ -243,7 +243,7 @@
} else {
np->n_size = vap->va_size;
}
- setnsize = ncl_pager_setsize(vp, &nsize);
+ setnsize = ncl_pager_setsize(vp, 0, &nsize);
} else {
np->n_size = vap->va_size;
}

File Metadata

Mime Type
text/plain
Expires
Fri, Oct 4, 9:32 PM (22 h, 9 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13583758
Default Alt Text
D28318.diff (3 KB)

Event Timeline