Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F98570814
D28318.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D28318.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D28318: fix ncl_pager_setsize() so that the correct nsize can be set via a new argument
Attached
Detach File
Event Timeline
Log In to Comment