aboutsummaryrefslogtreecommitdiff
path: root/sys/fs
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2019-06-06 16:20:50 +0000
committerAlan Somers <asomers@FreeBSD.org>2019-06-06 16:20:50 +0000
commit0269ae4c19ad779b43b0d6e2416ac7386945d692 (patch)
treeab5e303c6cb3ded1f908fed5b0cd47780ddda696 /sys/fs
parentd10b757886cc63e5f5f5b6e798a20e339d5937bb (diff)
parentfbc27301ba4280886011dfb924c78402829b57cc (diff)
MFHead @348740
Sponsored by: The FreeBSD Foundation
Notes
Notes: svn path=/projects/fuse2/; revision=348744
Diffstat (limited to 'sys/fs')
-rw-r--r--sys/fs/devfs/devfs_vnops.c1
-rw-r--r--sys/fs/ext2fs/ext2_inode.c4
-rw-r--r--sys/fs/fuse/fuse_internal.c15
-rw-r--r--sys/fs/fuse/fuse_internal.h5
-rw-r--r--sys/fs/fuse/fuse_io.c4
-rw-r--r--sys/fs/fuse/fuse_node.c4
-rw-r--r--sys/fs/fuse/fuse_node.h2
-rw-r--r--sys/fs/fuse/fuse_vfsops.c4
-rw-r--r--sys/fs/fuse/fuse_vnops.c7
-rw-r--r--sys/fs/msdosfs/msdosfs_denode.c2
-rw-r--r--sys/fs/nfsclient/nfs.h3
-rw-r--r--sys/fs/nfsclient/nfs_clbio.c4
-rw-r--r--sys/fs/nfsclient/nfs_clvnops.c9
-rw-r--r--sys/fs/nullfs/null_vnops.c2
-rw-r--r--sys/fs/pseudofs/pseudofs_vnops.c3
-rw-r--r--sys/fs/tmpfs/tmpfs_subr.c2
-rw-r--r--sys/fs/unionfs/union_subr.c1
17 files changed, 34 insertions, 38 deletions
diff --git a/sys/fs/devfs/devfs_vnops.c b/sys/fs/devfs/devfs_vnops.c
index c046c4e88ad3..a3bfdb11efaa 100644
--- a/sys/fs/devfs/devfs_vnops.c
+++ b/sys/fs/devfs/devfs_vnops.c
@@ -45,6 +45,7 @@
#include <sys/systm.h>
#include <sys/conf.h>
#include <sys/dirent.h>
+#include <sys/eventhandler.h>
#include <sys/fcntl.h>
#include <sys/file.h>
#include <sys/filedesc.h>
diff --git a/sys/fs/ext2fs/ext2_inode.c b/sys/fs/ext2fs/ext2_inode.c
index c2487dad401f..4f0de4b6f5c9 100644
--- a/sys/fs/ext2fs/ext2_inode.c
+++ b/sys/fs/ext2fs/ext2_inode.c
@@ -356,7 +356,7 @@ ext2_ind_truncate(struct vnode *vp, off_t length, int flags, struct ucred *cred,
oip->i_ib[i] = oldblks[EXT2_NDADDR + i];
}
oip->i_size = osize;
- error = vtruncbuf(ovp, cred, length, (int)fs->e2fs_bsize);
+ error = vtruncbuf(ovp, length, (int)fs->e2fs_bsize);
if (error && (allerror == 0))
allerror = error;
vnode_pager_setsize(ovp, length);
@@ -530,7 +530,7 @@ ext2_ext_truncate(struct vnode *vp, off_t length, int flags,
}
oip->i_size = osize;
- error = vtruncbuf(ovp, cred, length, (int)fs->e2fs_bsize);
+ error = vtruncbuf(ovp, length, (int)fs->e2fs_bsize);
if (error)
return (error);
diff --git a/sys/fs/fuse/fuse_internal.c b/sys/fs/fuse/fuse_internal.c
index 788543fc39b4..d17a315c3cbd 100644
--- a/sys/fs/fuse/fuse_internal.c
+++ b/sys/fs/fuse/fuse_internal.c
@@ -230,9 +230,8 @@ fuse_internal_access(struct vnode *vp,
* return the result to the caller).
*/
void
-fuse_internal_cache_attrs(struct vnode *vp, struct ucred *cred,
- struct fuse_attr *attr, uint64_t attr_valid, uint32_t attr_valid_nsec,
- struct vattr *vap)
+fuse_internal_cache_attrs(struct vnode *vp, struct fuse_attr *attr,
+ uint64_t attr_valid, uint32_t attr_valid_nsec, struct vattr *vap)
{
struct mount *mp;
struct fuse_vnode_data *fvdat;
@@ -242,8 +241,6 @@ fuse_internal_cache_attrs(struct vnode *vp, struct ucred *cred,
mp = vnode_mount(vp);
fvdat = VTOFUD(vp);
data = fuse_get_mpdata(mp);
- if (!cred)
- cred = curthread->td_ucred;
ASSERT_VOP_ELOCKED(vp, "fuse_internal_cache_attrs");
@@ -252,7 +249,7 @@ fuse_internal_cache_attrs(struct vnode *vp, struct ucred *cred,
/* Fix our buffers if the filesize changed without us knowing */
if (vnode_isreg(vp) && attr->size != fvdat->cached_attrs.va_size) {
- (void)fuse_vnode_setsize(vp, cred, attr->size);
+ (void)fuse_vnode_setsize(vp, attr->size);
fvdat->cached_attrs.va_size = attr->size;
}
@@ -746,7 +743,7 @@ fuse_internal_newentry_core(struct vnode *dvp,
*/
fuse_vnode_clear_attr_cache(dvp);
- fuse_internal_cache_attrs(*vpp, NULL, &feo->attr, feo->attr_valid,
+ fuse_internal_cache_attrs(*vpp, &feo->attr, feo->attr_valid,
feo->attr_valid_nsec, NULL);
return err;
@@ -843,7 +840,7 @@ fuse_internal_do_getattr(struct vnode *vp, struct vattr *vap,
vtyp = IFTOVT(fao->attr.mode);
if (fvdat->flag & FN_SIZECHANGE)
fao->attr.size = old_filesize;
- fuse_internal_cache_attrs(vp, NULL, &fao->attr, fao->attr_valid,
+ fuse_internal_cache_attrs(vp, &fao->attr, fao->attr_valid,
fao->attr_valid_nsec, vap);
if (vtyp != vnode_vtype(vp)) {
fuse_internal_vnode_disappear(vp);
@@ -1074,7 +1071,7 @@ int fuse_internal_setattr(struct vnode *vp, struct vattr *vap,
}
if (err == 0) {
struct fuse_attr_out *fao = (struct fuse_attr_out*)fdi.answ;
- fuse_internal_cache_attrs(vp, cred, &fao->attr, fao->attr_valid,
+ fuse_internal_cache_attrs(vp, &fao->attr, fao->attr_valid,
fao->attr_valid_nsec, NULL);
}
diff --git a/sys/fs/fuse/fuse_internal.h b/sys/fs/fuse/fuse_internal.h
index dec9bd2b9492..fb178197fd29 100644
--- a/sys/fs/fuse/fuse_internal.h
+++ b/sys/fs/fuse/fuse_internal.h
@@ -216,9 +216,8 @@ int fuse_internal_access(struct vnode *vp, accmode_t mode,
struct thread *td, struct ucred *cred);
/* attributes */
-void fuse_internal_cache_attrs(struct vnode *vp, struct ucred *cred,
- struct fuse_attr *attr, uint64_t attr_valid, uint32_t attr_valid_nsec,
- struct vattr *vap);
+void fuse_internal_cache_attrs(struct vnode *vp, struct fuse_attr *attr,
+ uint64_t attr_valid, uint32_t attr_valid_nsec, struct vattr *vap);
/* fsync */
diff --git a/sys/fs/fuse/fuse_io.c b/sys/fs/fuse/fuse_io.c
index faa0a2d455de..83b8ca51d3f2 100644
--- a/sys/fs/fuse/fuse_io.c
+++ b/sys/fs/fuse/fuse_io.c
@@ -503,7 +503,7 @@ retry:
if (as_written_offset - diff > filesize &&
fuse_data_cache_mode != FUSE_CACHE_UC)
- fuse_vnode_setsize(vp, cred, as_written_offset);
+ fuse_vnode_setsize(vp, as_written_offset);
if (as_written_offset - diff >= filesize)
fvdat->flag &= ~FN_SIZECHANGE;
@@ -643,7 +643,7 @@ again:
* Extend file _after_ locking buffer so we won't race
* with other readers
*/
- err = fuse_vnode_setsize(vp, cred, uio->uio_offset + n);
+ err = fuse_vnode_setsize(vp, uio->uio_offset + n);
fvdat->flag |= FN_SIZECHANGE;
if (err) {
brelse(bp);
diff --git a/sys/fs/fuse/fuse_node.c b/sys/fs/fuse/fuse_node.c
index 1c0cf3bd22de..7fcc17c45b3a 100644
--- a/sys/fs/fuse/fuse_node.c
+++ b/sys/fs/fuse/fuse_node.c
@@ -375,7 +375,7 @@ fuse_vnode_savesize(struct vnode *vp, struct ucred *cred, pid_t pid)
* FUSE_GETATTR.
*/
int
-fuse_vnode_setsize(struct vnode *vp, struct ucred *cred, off_t newsize)
+fuse_vnode_setsize(struct vnode *vp, off_t newsize)
{
struct fuse_vnode_data *fvdat = VTOFUD(vp);
struct vattr *attrs;
@@ -395,7 +395,7 @@ fuse_vnode_setsize(struct vnode *vp, struct ucred *cred, off_t newsize)
if (newsize < oldsize) {
daddr_t lbn;
- err = vtruncbuf(vp, cred, newsize, fuse_iosize(vp));
+ err = vtruncbuf(vp, newsize, fuse_iosize(vp));
if (err)
goto out;
if (newsize % iosize == 0)
diff --git a/sys/fs/fuse/fuse_node.h b/sys/fs/fuse/fuse_node.h
index 81bf6e3b70d4..07cddc2fb84e 100644
--- a/sys/fs/fuse/fuse_node.h
+++ b/sys/fs/fuse/fuse_node.h
@@ -178,6 +178,6 @@ void fuse_vnode_open(struct vnode *vp, int32_t fuse_open_flags,
int fuse_vnode_savesize(struct vnode *vp, struct ucred *cred, pid_t pid);
-int fuse_vnode_setsize(struct vnode *vp, struct ucred *cred, off_t newsize);
+int fuse_vnode_setsize(struct vnode *vp, off_t newsize);
#endif /* _FUSE_NODE_H_ */
diff --git a/sys/fs/fuse/fuse_vfsops.c b/sys/fs/fuse/fuse_vfsops.c
index b059e65c7f57..8b25234ded4b 100644
--- a/sys/fs/fuse/fuse_vfsops.c
+++ b/sys/fs/fuse/fuse_vfsops.c
@@ -590,8 +590,8 @@ fuse_vfsop_vget(struct mount *mp, ino_t ino, int flags, struct vnode **vpp)
fvdat->flag &= ~FN_SIZECHANGE;
}
- fuse_internal_cache_attrs(*vpp, td->td_ucred, &feo->attr,
- feo->attr_valid, feo->attr_valid_nsec, NULL);
+ fuse_internal_cache_attrs(*vpp, &feo->attr, feo->attr_valid,
+ feo->attr_valid_nsec, NULL);
fuse_validity_2_bintime(feo->entry_valid, feo->entry_valid_nsec,
&fvdat->entry_cache_timeout);
out:
diff --git a/sys/fs/fuse/fuse_vnops.c b/sys/fs/fuse/fuse_vnops.c
index 3caccdf54ad8..b1d8b5837930 100644
--- a/sys/fs/fuse/fuse_vnops.c
+++ b/sys/fs/fuse/fuse_vnops.c
@@ -654,7 +654,7 @@ fuse_vnop_create(struct vop_create_args *ap)
goto out;
}
ASSERT_VOP_ELOCKED(*vpp, "fuse_vnop_create");
- fuse_internal_cache_attrs(*vpp, cred, &feo->attr, feo->attr_valid,
+ fuse_internal_cache_attrs(*vpp, &feo->attr, feo->attr_valid,
feo->attr_valid_nsec, NULL);
fuse_filehandle_init(*vpp, FUFH_RDWR, NULL, td, cred, foo);
@@ -820,7 +820,6 @@ fuse_vnop_link(struct vop_link_args *ap)
struct vnode *vp = ap->a_vp;
struct vnode *tdvp = ap->a_tdvp;
struct componentname *cnp = ap->a_cnp;
- struct ucred *cred = cnp->cn_cred;
struct vattr *vap = VTOVA(vp);
@@ -862,7 +861,7 @@ fuse_vnop_link(struct vop_link_args *ap)
* should've updated its mtime and ctime
*/
fuse_vnode_clear_attr_cache(tdvp);
- fuse_internal_cache_attrs(vp, cred, &feo->attr, feo->attr_valid,
+ fuse_internal_cache_attrs(vp, &feo->attr, feo->attr_valid,
feo->attr_valid_nsec, NULL);
}
out:
@@ -1103,7 +1102,7 @@ fuse_vnop_lookup(struct vop_lookup_args *ap)
}
MPASS(feo != NULL);
- fuse_internal_cache_attrs(*vpp, cred, &feo->attr,
+ fuse_internal_cache_attrs(*vpp, &feo->attr,
feo->attr_valid, feo->attr_valid_nsec, NULL);
fuse_validity_2_bintime(feo->entry_valid,
feo->entry_valid_nsec,
diff --git a/sys/fs/msdosfs/msdosfs_denode.c b/sys/fs/msdosfs/msdosfs_denode.c
index 990cd1ff7ee3..19ba40fed97f 100644
--- a/sys/fs/msdosfs/msdosfs_denode.c
+++ b/sys/fs/msdosfs/msdosfs_denode.c
@@ -429,7 +429,7 @@ detrunc(struct denode *dep, u_long length, int flags, struct ucred *cred)
dep->de_FileSize = length;
if (!isadir)
dep->de_flag |= DE_UPDATE | DE_MODIFIED;
- allerror = vtruncbuf(DETOV(dep), cred, length, pmp->pm_bpcluster);
+ allerror = vtruncbuf(DETOV(dep), length, pmp->pm_bpcluster);
#ifdef MSDOSFS_DEBUG
if (allerror)
printf("detrunc(): vtruncbuf error %d\n", allerror);
diff --git a/sys/fs/nfsclient/nfs.h b/sys/fs/nfsclient/nfs.h
index 60b7f3e5ee3a..ce1747a2ab6b 100644
--- a/sys/fs/nfsclient/nfs.h
+++ b/sys/fs/nfsclient/nfs.h
@@ -91,8 +91,7 @@ enum nfsiod_state {
/*
* Function prototypes.
*/
-int ncl_meta_setsize(struct vnode *, struct ucred *, struct thread *,
- u_quad_t);
+int ncl_meta_setsize(struct vnode *, struct thread *, u_quad_t);
void ncl_doio_directwrite(struct buf *);
int ncl_bioread(struct vnode *, struct uio *, int, struct ucred *);
int ncl_biowrite(struct vnode *, struct uio *, int, struct ucred *);
diff --git a/sys/fs/nfsclient/nfs_clbio.c b/sys/fs/nfsclient/nfs_clbio.c
index a3e764d9e5c8..cbd4725d844d 100644
--- a/sys/fs/nfsclient/nfs_clbio.c
+++ b/sys/fs/nfsclient/nfs_clbio.c
@@ -1832,7 +1832,7 @@ ncl_doio(struct vnode *vp, struct buf *bp, struct ucred *cr, struct thread *td,
*/
int
-ncl_meta_setsize(struct vnode *vp, struct ucred *cred, struct thread *td, u_quad_t nsize)
+ncl_meta_setsize(struct vnode *vp, struct thread *td, u_quad_t nsize)
{
struct nfsnode *np = VTONFS(vp);
u_quad_t tsize;
@@ -1854,7 +1854,7 @@ ncl_meta_setsize(struct vnode *vp, struct ucred *cred, struct thread *td, u_quad
* truncation point. We may have a B_DELWRI and/or B_CACHE
* buffer that now needs to be truncated.
*/
- error = vtruncbuf(vp, cred, nsize, biosize);
+ error = vtruncbuf(vp, nsize, biosize);
lbn = nsize / biosize;
bufsize = nsize - (lbn * biosize);
bp = nfs_getcacheblk(vp, lbn, bufsize, td);
diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c
index cc6294494401..38b1c3b5928b 100644
--- a/sys/fs/nfsclient/nfs_clvnops.c
+++ b/sys/fs/nfsclient/nfs_clvnops.c
@@ -979,8 +979,7 @@ nfs_setattr(struct vop_setattr_args *ap)
mtx_lock(&np->n_mtx);
tsize = np->n_size;
mtx_unlock(&np->n_mtx);
- error = ncl_meta_setsize(vp, ap->a_cred, td,
- vap->va_size);
+ error = ncl_meta_setsize(vp, td, vap->va_size);
mtx_lock(&np->n_mtx);
if (np->n_flag & NMODIFIED) {
tsize = np->n_size;
@@ -1182,7 +1181,6 @@ nfs_lookup(struct vop_lookup_args *ap)
cache_purge_negative(dvp);
}
- error = 0;
newvp = NULLVP;
NFSINCRGLOBAL(nfsstatsv1.lookupcache_misses);
error = nfsrpc_lookup(dvp, cnp->cn_nameptr, cnp->cn_namelen,
@@ -2941,10 +2939,7 @@ loop:
}
BO_UNLOCK(bo);
bremfree(bp);
- if (passone || !commit)
- bp->b_flags |= B_ASYNC;
- else
- bp->b_flags |= B_ASYNC;
+ bp->b_flags |= B_ASYNC;
bwrite(bp);
if (newnfs_sigintr(nmp, td)) {
error = EINTR;
diff --git a/sys/fs/nullfs/null_vnops.c b/sys/fs/nullfs/null_vnops.c
index f92383179a9e..b663d8d718d3 100644
--- a/sys/fs/nullfs/null_vnops.c
+++ b/sys/fs/nullfs/null_vnops.c
@@ -810,6 +810,8 @@ null_reclaim(struct vop_reclaim_args *ap)
*/
if (vp->v_writecount > 0)
VOP_ADD_WRITECOUNT(lowervp, -vp->v_writecount);
+ else if (vp->v_writecount < 0)
+ vp->v_writecount = 0;
VI_UNLOCK(vp);
diff --git a/sys/fs/pseudofs/pseudofs_vnops.c b/sys/fs/pseudofs/pseudofs_vnops.c
index b58791fd75eb..25c50df07ea7 100644
--- a/sys/fs/pseudofs/pseudofs_vnops.c
+++ b/sys/fs/pseudofs/pseudofs_vnops.c
@@ -967,7 +967,8 @@ pfs_setattr(struct vop_setattr_args *va)
PFS_TRACE(("%s", pn->pn_name));
pfs_assert_not_owned(pn);
- PFS_RETURN (EOPNOTSUPP);
+ /* Silently ignore unchangeable attributes. */
+ PFS_RETURN (0);
}
/*
diff --git a/sys/fs/tmpfs/tmpfs_subr.c b/sys/fs/tmpfs/tmpfs_subr.c
index f9db5f99e506..9fe58cd4c137 100644
--- a/sys/fs/tmpfs/tmpfs_subr.c
+++ b/sys/fs/tmpfs/tmpfs_subr.c
@@ -488,6 +488,8 @@ tmpfs_destroy_vobject(struct vnode *vp, vm_object_t obj)
VI_LOCK(vp);
vm_object_clear_flag(obj, OBJ_TMPFS);
obj->un_pager.swp.swp_tmpfs = NULL;
+ if (vp->v_writecount < 0)
+ vp->v_writecount = 0;
VI_UNLOCK(vp);
VM_OBJECT_WUNLOCK(obj);
}
diff --git a/sys/fs/unionfs/union_subr.c b/sys/fs/unionfs/union_subr.c
index 0abb08762f8a..f3b5e4840050 100644
--- a/sys/fs/unionfs/union_subr.c
+++ b/sys/fs/unionfs/union_subr.c
@@ -41,6 +41,7 @@
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
+#include <sys/ktr.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/malloc.h>