FileStore:: fix fiemap issue in xfs when #extents > 1364

Signed-off-by: Ning Yao <yaoning@unitedstack.com>
This commit is contained in:
Ning Yao 2016-10-13 16:53:18 +08:00 committed by yaoning
parent c701628da2
commit 1a1c126d80

View File

@ -3155,11 +3155,13 @@ int FileStore::read(
int FileStore::_do_fiemap(int fd, uint64_t offset, size_t len,
map<uint64_t, uint64_t> *m)
{
struct fiemap *fiemap = NULL;
uint64_t i;
struct fiemap_extent *extent = NULL;
struct fiemap_extent *last = NULL;
struct fiemap *fiemap = NULL;
int r = 0;
more:
r = backend->do_fiemap(fd, offset, len, &fiemap);
if (r < 0)
return r;
@ -3199,9 +3201,15 @@ int FileStore::_do_fiemap(int fd, uint64_t offset, size_t len,
extent->fe_length = offset + len - extent->fe_logical;
(*m)[extent->fe_logical] = extent->fe_length;
i++;
extent++;
last = extent++;
}
free(fiemap);
if (!(last->fe_flags & FIEMAP_EXTENT_LAST)) {
uint64_t xoffset = last->fe_logical + last->fe_length - offset;
offset = last->fe_logical + last->fe_length;
len -= xoffset;
goto more;
}
return r;
}