(bs1->bs_version == XFS_BULKSTAT_VERSION_V5 &&
bs2->bs_version == XFS_BULKSTAT_VERSION_V5));
- return (bs2->bs_extents - bs1->bs_extents);
+ return (bs2->bs_extents64 - bs1->bs_extents64);
}
/*
for (p = buf, endp = (buf + buflenout); p < endp ; p++) {
/* Do some obvious checks now */
if (((p->bs_mode & S_IFMT) != S_IFREG) ||
- (p->bs_extents < 2))
+ (p->bs_extents64 < 2))
continue;
ret = -xfrog_bulkstat_v5_to_v1(&fsxfd, &bs1, p);
if (flags & ~(XFS_BULK_IREQ_SPECIAL))
return -EINVAL;
+ if (xfd->fsgeom.flags & XFS_FSOP_GEOM_FLAGS_NREXT64)
+ flags |= XFS_BULK_IREQ_NREXT64;
+
ret = xfrog_bulkstat_alloc_req(1, ino, &req);
if (ret)
return ret;
}
memcpy(bulkstat, req->bulkstat, sizeof(struct xfs_bulkstat));
+
+ if (!(xfd->fsgeom.flags & XFS_FSOP_GEOM_FLAGS_NREXT64)) {
+ bulkstat->bs_extents64 = bulkstat->bs_extents;
+ bulkstat->bs_extents = 0;
+ }
+
free:
free(req);
return ret;
switch (error) {
case -EOPNOTSUPP:
case -ENOTTY:
+ assert(!(xfd->fsgeom.flags & XFS_FSOP_GEOM_FLAGS_NREXT64));
xfd->flags |= XFROG_FLAG_BULKSTAT_FORCE_V1;
break;
}
struct xfs_bulkstat_req *req)
{
int ret;
+ int i;
+
+ if (xfd->fsgeom.flags & XFS_FSOP_GEOM_FLAGS_NREXT64)
+ req->hdr.flags |= XFS_BULK_IREQ_NREXT64;
ret = ioctl(xfd->fd, XFS_IOC_BULKSTAT, req);
if (ret)
return -errno;
+
+ if (!(xfd->fsgeom.flags & XFS_FSOP_GEOM_FLAGS_NREXT64)) {
+ for (i = 0; i < req->hdr.ocount; i++) {
+ req->bulkstat[i].bs_extents64 =
+ req->bulkstat[i].bs_extents;
+ req->bulkstat[i].bs_extents = 0;
+ }
+ }
+
return 0;
}
switch (error) {
case -EOPNOTSUPP:
case -ENOTTY:
+ assert(!(xfd->fsgeom.flags & XFS_FSOP_GEOM_FLAGS_NREXT64));
xfd->flags |= XFROG_FLAG_BULKSTAT_FORCE_V1;
break;
}
const struct xfs_bulkstat *bs5)
{
if (bs5->bs_aextents > UINT16_MAX ||
+ bs5->bs_extents64 > INT32_MAX ||
cvt_off_fsb_to_b(xfd, bs5->bs_extsize_blks) > UINT32_MAX ||
cvt_off_fsb_to_b(xfd, bs5->bs_cowextsize_blks) > UINT32_MAX ||
time_too_big(bs5->bs_atime) ||
bs1->bs_blocks = bs5->bs_blocks;
bs1->bs_xflags = bs5->bs_xflags;
bs1->bs_extsize = cvt_off_fsb_to_b(xfd, bs5->bs_extsize_blks);
- bs1->bs_extents = bs5->bs_extents;
+ bs1->bs_extents = bs5->bs_extents64;
bs1->bs_gen = bs5->bs_gen;
bs1->bs_projid_lo = bs5->bs_projectid & 0xFFFF;
bs1->bs_forkoff = bs5->bs_forkoff;
bs5->bs_blocks = bs1->bs_blocks;
bs5->bs_xflags = bs1->bs_xflags;
bs5->bs_extsize_blks = cvt_b_to_off_fsbt(xfd, bs1->bs_extsize);
- bs5->bs_extents = bs1->bs_extents;
bs5->bs_gen = bs1->bs_gen;
bs5->bs_projectid = bstat_get_projid(bs1);
bs5->bs_forkoff = bs1->bs_forkoff;
bs5->bs_checked = bs1->bs_checked;
bs5->bs_cowextsize_blks = cvt_b_to_off_fsbt(xfd, bs1->bs_cowextsize);
bs5->bs_aextents = bs1->bs_aextents;
+ bs5->bs_extents64 = bs1->bs_extents;
}
/* Allocate a bulkstat request. Returns zero or a negative error code. */