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 --- |