diff options
author | Alan Somers <asomers@FreeBSD.org> | 2019-06-06 16:20:50 +0000 |
---|---|---|
committer | Alan Somers <asomers@FreeBSD.org> | 2019-06-06 16:20:50 +0000 |
commit | 0269ae4c19ad779b43b0d6e2416ac7386945d692 (patch) | |
tree | ab5e303c6cb3ded1f908fed5b0cd47780ddda696 /sys/fs | |
parent | d10b757886cc63e5f5f5b6e798a20e339d5937bb (diff) | |
parent | fbc27301ba4280886011dfb924c78402829b57cc (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.c | 1 | ||||
-rw-r--r-- | sys/fs/ext2fs/ext2_inode.c | 4 | ||||
-rw-r--r-- | sys/fs/fuse/fuse_internal.c | 15 | ||||
-rw-r--r-- | sys/fs/fuse/fuse_internal.h | 5 | ||||
-rw-r--r-- | sys/fs/fuse/fuse_io.c | 4 | ||||
-rw-r--r-- | sys/fs/fuse/fuse_node.c | 4 | ||||
-rw-r--r-- | sys/fs/fuse/fuse_node.h | 2 | ||||
-rw-r--r-- | sys/fs/fuse/fuse_vfsops.c | 4 | ||||
-rw-r--r-- | sys/fs/fuse/fuse_vnops.c | 7 | ||||
-rw-r--r-- | sys/fs/msdosfs/msdosfs_denode.c | 2 | ||||
-rw-r--r-- | sys/fs/nfsclient/nfs.h | 3 | ||||
-rw-r--r-- | sys/fs/nfsclient/nfs_clbio.c | 4 | ||||
-rw-r--r-- | sys/fs/nfsclient/nfs_clvnops.c | 9 | ||||
-rw-r--r-- | sys/fs/nullfs/null_vnops.c | 2 | ||||
-rw-r--r-- | sys/fs/pseudofs/pseudofs_vnops.c | 3 | ||||
-rw-r--r-- | sys/fs/tmpfs/tmpfs_subr.c | 2 | ||||
-rw-r--r-- | sys/fs/unionfs/union_subr.c | 1 |
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> |