vfs_default.c (a638dc4ebc8eaa90a87ee053b7104ee4511f4491) vfs_default.c (1eaa36523cb921e90d61b20531ed525aba0cfe7e)
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.

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

1133 off_t offset, len;
1134 struct ucred *cred;
1135 int error;
1136 struct vattr va;
1137 off_t noff, xfersize, rem;
1138
1139 vp = ap->a_vp;
1140 offset = *ap->a_offset;
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.

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

1133 off_t offset, len;
1134 struct ucred *cred;
1135 int error;
1136 struct vattr va;
1137 off_t noff, xfersize, rem;
1138
1139 vp = ap->a_vp;
1140 offset = *ap->a_offset;
1141 len = *ap->a_len;
1142 cred = ap->a_cred;
1143
1144 error = VOP_GETATTR(vp, &va, cred);
1145 if (error)
1146 return (error);
1147
1141 cred = ap->a_cred;
1142
1143 error = VOP_GETATTR(vp, &va, cred);
1144 if (error)
1145 return (error);
1146
1148 len = omin(OFF_MAX - offset, *ap->a_len);
1147 len = omin((off_t)va.va_size - offset, *ap->a_len);
1149 while (len > 0) {
1150 noff = offset;
1151 error = vn_bmap_seekhole_locked(vp, FIOSEEKDATA, &noff, cred);
1152 if (error) {
1153 if (error != ENXIO)
1154 /* XXX: Is it okay to fallback further? */
1155 goto out;
1156

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

1180 len -= xfersize - rem;
1181 goto out;
1182 }
1183
1184 len -= xfersize;
1185 if (should_yield())
1186 break;
1187 }
1148 while (len > 0) {
1149 noff = offset;
1150 error = vn_bmap_seekhole_locked(vp, FIOSEEKDATA, &noff, cred);
1151 if (error) {
1152 if (error != ENXIO)
1153 /* XXX: Is it okay to fallback further? */
1154 goto out;
1155

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

1179 len -= xfersize - rem;
1180 goto out;
1181 }
1182
1183 len -= xfersize;
1184 if (should_yield())
1185 break;
1186 }
1187 /* Handle the case when offset is beyond EOF */
1188 if (len < 0) {
1189 offset += len;
1190 len = 0;
1191 }
1188out:
1189 *ap->a_offset = offset;
1190 *ap->a_len = len;
1191 return (error);
1192}
1193
1194int
1195vop_stdadvise(struct vop_advise_args *ap)

--- 557 unchanged lines hidden ---
1192out:
1193 *ap->a_offset = offset;
1194 *ap->a_len = len;
1195 return (error);
1196}
1197
1198int
1199vop_stdadvise(struct vop_advise_args *ap)

--- 557 unchanged lines hidden ---