mirror of
https://github.com/ceph/ceph
synced 2025-02-21 01:47:25 +00:00
FileStore:: fix fiemap issue in xfs when #extents > 1364
Signed-off-by: Ning Yao <yaoning@unitedstack.com>
This commit is contained in:
parent
c701628da2
commit
1a1c126d80
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user