vfs_default.c (0dc332bff200c940edc36c4715b629a2e1e9f9ae) vfs_default.c (a638dc4ebc8eaa90a87ee053b7104ee4511f4491)
1/*-
2 * SPDX-License-Identifier: BSD-3-Clause
3 *
4 * Copyright (c) 1989, 1993
5 * The Regents of the University of California. All rights reserved.
6 *
7 * This code is derived from software contributed
8 * to Berkeley by John Heidemann of the UCLA Ficus project.

--- 1060 unchanged lines hidden (view full) ---

1069 *ap->a_len = len;
1070 *ap->a_offset = offset;
1071 free(buf, M_TEMP);
1072 return (error);
1073}
1074
1075static int
1076vp_zerofill(struct vnode *vp, struct vattr *vap, off_t *offsetp, off_t *lenp,
1/*-
2 * SPDX-License-Identifier: BSD-3-Clause
3 *
4 * Copyright (c) 1989, 1993
5 * The Regents of the University of California. All rights reserved.
6 *
7 * This code is derived from software contributed
8 * to Berkeley by John Heidemann of the UCLA Ficus project.

--- 1060 unchanged lines hidden (view full) ---

1069 *ap->a_len = len;
1070 *ap->a_offset = offset;
1071 free(buf, M_TEMP);
1072 return (error);
1073}
1074
1075static int
1076vp_zerofill(struct vnode *vp, struct vattr *vap, off_t *offsetp, off_t *lenp,
1077 struct ucred *cred)
1077 int ioflag, struct ucred *cred)
1078{
1079 int iosize;
1080 int error = 0;
1081 struct iovec aiov;
1082 struct uio auio;
1083 struct thread *td;
1084 off_t offset, len;
1085

--- 19 unchanged lines hidden (view full) ---

1105 auio.uio_iov = &aiov;
1106 auio.uio_iovcnt = 1;
1107 auio.uio_offset = offset;
1108 auio.uio_resid = xfersize;
1109 auio.uio_segflg = UIO_SYSSPACE;
1110 auio.uio_rw = UIO_WRITE;
1111 auio.uio_td = td;
1112
1078{
1079 int iosize;
1080 int error = 0;
1081 struct iovec aiov;
1082 struct uio auio;
1083 struct thread *td;
1084 off_t offset, len;
1085

--- 19 unchanged lines hidden (view full) ---

1105 auio.uio_iov = &aiov;
1106 auio.uio_iovcnt = 1;
1107 auio.uio_offset = offset;
1108 auio.uio_resid = xfersize;
1109 auio.uio_segflg = UIO_SYSSPACE;
1110 auio.uio_rw = UIO_WRITE;
1111 auio.uio_td = td;
1112
1113 error = VOP_WRITE(vp, &auio, 0, cred);
1113 error = VOP_WRITE(vp, &auio, ioflag, cred);
1114 if (error != 0) {
1115 len -= xfersize - auio.uio_resid;
1116 offset += xfersize - auio.uio_resid;
1117 break;
1118 }
1119
1120 len -= xfersize;
1121 offset += xfersize;

--- 48 unchanged lines hidden (view full) ---

1170 break;
1171 }
1172 error = vn_bmap_seekhole_locked(vp, FIOSEEKHOLE, &noff, cred);
1173 if (error)
1174 goto out;
1175
1176 /* Fill zeroes */
1177 xfersize = rem = omin(noff - offset, len);
1114 if (error != 0) {
1115 len -= xfersize - auio.uio_resid;
1116 offset += xfersize - auio.uio_resid;
1117 break;
1118 }
1119
1120 len -= xfersize;
1121 offset += xfersize;

--- 48 unchanged lines hidden (view full) ---

1170 break;
1171 }
1172 error = vn_bmap_seekhole_locked(vp, FIOSEEKHOLE, &noff, cred);
1173 if (error)
1174 goto out;
1175
1176 /* Fill zeroes */
1177 xfersize = rem = omin(noff - offset, len);
1178 error = vp_zerofill(vp, &va, &offset, &rem, cred);
1178 error = vp_zerofill(vp, &va, &offset, &rem, ap->a_ioflag, cred);
1179 if (error) {
1180 len -= xfersize - rem;
1181 goto out;
1182 }
1183
1184 len -= xfersize;
1185 if (should_yield())
1186 break;

--- 566 unchanged lines hidden ---
1179 if (error) {
1180 len -= xfersize - rem;
1181 goto out;
1182 }
1183
1184 len -= xfersize;
1185 if (should_yield())
1186 break;

--- 566 unchanged lines hidden ---