if (nex < 1)
nex = 1;
+ nex = min(nex, XFS_MAX_EXTCNT_DATA_FORK_LARGE);
if (sizeof(long) == 4 && nex > BLKMAP_NEXTS32_MAX) {
do_warn(
xfs_fileoff_t o)
{
bmap_ext_t *ext = blkmap->exts;
- int i;
+ xfs_extnum_t i;
for (i = 0; i < blkmap->nexts; i++, ext++) {
if (o >= ext->startoff && o < ext->startoff + ext->blockcount)
{
bmap_ext_t *bmp = NULL;
bmap_ext_t *ext;
- int i;
+ xfs_extnum_t i;
int nex;
if (nb == 1) {
blkmap_next_off(
blkmap_t *blkmap,
xfs_fileoff_t o,
- int *t)
+ xfs_extnum_t *t)
{
bmap_ext_t *ext;
{
pthread_key_t key = dblkmap_key;
blkmap_t *new_blkmap;
- int new_naexts;
+ xfs_extnum_t new_naexts;
/* reduce the number of reallocations for large files */
if (blkmap->naexts < 1000)
if (sizeof(long) == 4 && new_naexts > BLKMAP_NEXTS32_MAX) {
do_error(
- _("Number of extents requested in blkmap_grow (%d) overflows 32 bits.\n"
+ _("Number of extents requested in blkmap_grow (%llu) overflows 32 bits.\n"
"You need a 64 bit system to repair this filesystem.\n"),
- new_naexts);
+ (unsigned long long)new_naexts);
return NULL;
}
- if (new_naexts <= 0) {
+ if (new_naexts > XFS_MAX_EXTCNT_DATA_FORK_LARGE) {
do_error(
- _("Number of extents requested in blkmap_grow (%d) overflowed the\n"
- "maximum number of supported extents (%ld).\n"),
- new_naexts,
- sizeof(long) == 4 ? BLKMAP_NEXTS32_MAX : INT_MAX);
+ _("Number of extents requested in blkmap_grow (%llu) overflowed the\n"
+ "maximum number of supported extents (%llu).\n"),
+ (unsigned long long)new_naexts,
+ (unsigned long long)XFS_MAX_EXTCNT_DATA_FORK_LARGE);
return NULL;
}
* Block map.
*/
typedef struct blkmap {
- int naexts;
- int nexts;
+ xfs_extnum_t naexts;
+ xfs_extnum_t nexts;
bmap_ext_t exts[1];
} blkmap_t;
xfs_filblks_t nb, bmap_ext_t **bmpp,
bmap_ext_t *bmpp_single);
xfs_fileoff_t blkmap_last_off(blkmap_t *blkmap);
-xfs_fileoff_t blkmap_next_off(blkmap_t *blkmap, xfs_fileoff_t o, int *t);
+xfs_fileoff_t blkmap_next_off(blkmap_t *blkmap, xfs_fileoff_t o,
+ xfs_extnum_t *t);
#endif /* _XFS_REPAIR_BMAP_H */