ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.xs
(Generate patch)

Comparing IO-AIO/AIO.xs (file contents):
Revision 1.218 by root, Fri Jul 27 17:54:40 2012 UTC vs.
Revision 1.219 by root, Fri Jul 27 18:43:25 2012 UTC

194 return; 194 return;
195 195
196 if (req->int3 >= 0) 196 if (req->int3 >= 0)
197 break; /* when not autosizing we are done */ 197 break; /* when not autosizing we are done */
198 198
199 if (!fiemap->fm_mapped_extents) 199 if (fiemap->fm_mapped_extents < count)
200 break; /* if file has no segments, we are done */ 200 /* either autosizing succeeded,
201 * or the file had no extents
202 * or we luckily had enough space */
203 break;
201 204
202 if (fiemap->fm_extents [fiemap->fm_mapped_extents - 1].fe_flags & FIEMAP_EXTENT_LAST) 205 /* some kernels overwrite fm_length, so just reset everything */
203 break; /* autosizing successful, we are done */ 206 fiemap->fm_start = req->offs;
204 207 fiemap->fm_length = req->size;
205 fiemap->fm_flags = req->int2; 208 fiemap->fm_flags = req->int2;
206 fiemap->fm_extent_count = 0; 209 fiemap->fm_extent_count = 0;
207 210
208 if (ioctl (req->int1, FS_IOC_FIEMAP, fiemap)) 211 if (ioctl (req->int1, FS_IOC_FIEMAP, fiemap))
209 return; 212 return;
210 213
214 /* to work around a kernel bug, we allocate one more */
211 count = fiemap->fm_mapped_extents; 215 count = fiemap->fm_mapped_extents + 1;
212 216
213 free (fiemap); 217 free (fiemap);
214 } 218 }
215 219
216 req->result = 0; 220 req->result = 0;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines