aboutsummaryrefslogtreecommitdiff
path: root/sys/kern
diff options
context:
space:
mode:
authorKa Ho Ng <khng@FreeBSD.org>2021-08-12 14:58:52 +0000
committerKa Ho Ng <khng@FreeBSD.org>2021-08-12 15:03:49 +0000
commita638dc4ebc8eaa90a87ee053b7104ee4511f4491 (patch)
treec39304ac9f90bfb487fb83c996e501d9b79da2e4 /sys/kern
parentce92f5a91b161c85e0a7e37cc754e3c28074281a (diff)
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/vfs_default.c6
-rw-r--r--sys/kern/vfs_vnops.c7
-rw-r--r--sys/kern/vnode_if.src1
3 files changed, 9 insertions, 5 deletions
diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c
index c42d5a795935..d9328cd39b00 100644
--- a/sys/kern/vfs_default.c
+++ b/sys/kern/vfs_default.c
@@ -1074,7 +1074,7 @@ vop_stdallocate(struct vop_allocate_args *ap)
static int
vp_zerofill(struct vnode *vp, struct vattr *vap, off_t *offsetp, off_t *lenp,
- struct ucred *cred)
+ int ioflag, struct ucred *cred)
{
int iosize;
int error = 0;
@@ -1110,7 +1110,7 @@ vp_zerofill(struct vnode *vp, struct vattr *vap, off_t *offsetp, off_t *lenp,
auio.uio_rw = UIO_WRITE;
auio.uio_td = td;
- error = VOP_WRITE(vp, &auio, 0, cred);
+ error = VOP_WRITE(vp, &auio, ioflag, cred);
if (error != 0) {
len -= xfersize - auio.uio_resid;
offset += xfersize - auio.uio_resid;
@@ -1175,7 +1175,7 @@ vop_stddeallocate(struct vop_deallocate_args *ap)
/* Fill zeroes */
xfersize = rem = omin(noff - offset, len);
- error = vp_zerofill(vp, &va, &offset, &rem, cred);
+ error = vp_zerofill(vp, &va, &offset, &rem, ap->a_ioflag, cred);
if (error) {
len -= xfersize - rem;
goto out;
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index 5572c324469b..3fce590519a8 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -3509,7 +3509,7 @@ vn_deallocate_impl(struct vnode *vp, off_t *offset, off_t *length, int flags,
vp);
#endif
if (error == 0)
- error = VOP_DEALLOCATE(vp, &off, &len, flags,
+ error = VOP_DEALLOCATE(vp, &off, &len, flags, ioflag,
active_cred);
if ((ioflag & IO_NODELOCKED) == 0) {
@@ -3548,6 +3548,7 @@ vn_fspacectl(struct file *fp, int cmd, off_t *offset, off_t *length, int flags,
{
int error;
struct vnode *vp;
+ int ioflag;
vp = fp->f_vnode;
@@ -3557,9 +3558,11 @@ vn_fspacectl(struct file *fp, int cmd, off_t *offset, off_t *length, int flags,
if (vp->v_type != VREG)
return (ENODEV);
+ ioflag = get_write_ioflag(fp);
+
switch (cmd) {
case SPACECTL_DEALLOC:
- error = vn_deallocate_impl(vp, offset, length, flags, 0,
+ error = vn_deallocate_impl(vp, offset, length, flags, ioflag,
active_cred, fp->f_cred);
break;
default:
diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src
index 97ac1cff6705..ff57d1c9a28e 100644
--- a/sys/kern/vnode_if.src
+++ b/sys/kern/vnode_if.src
@@ -808,6 +808,7 @@ vop_deallocate {
INOUT off_t *offset;
INOUT off_t *len;
IN int flags;
+ IN int ioflag;
IN struct ucred *cred;
};