/* filesystem geometry */
struct xfs_fsop_geom fsgeom;
+
+ /* log2 of sb_agblocks (rounded up) */
+ unsigned int agblklog;
+
+ /* log2 of sb_blocksize */
+ unsigned int blocklog;
+
+ /* log2 of sb_inodesize */
+ unsigned int inodelog;
+
+ /* log2 of sb_inopblock */
+ unsigned int inopblog;
};
/* Static initializers */
*/
#include "libxfs.h"
#include "fsgeom.h"
+#include "libfrog.h"
void
xfs_report_geom(
xfd_prepare_geometry(
struct xfs_fd *xfd)
{
- return xfrog_geometry(xfd->fd, &xfd->fsgeom);
+ int ret;
+
+ ret = xfrog_geometry(xfd->fd, &xfd->fsgeom);
+ if (ret)
+ return ret;
+
+ xfd->agblklog = log2_roundup(xfd->fsgeom.agblocks);
+ xfd->blocklog = highbit32(xfd->fsgeom.blocksize);
+ xfd->inodelog = highbit32(xfd->fsgeom.inodesize);
+ xfd->inopblog = xfd->blocklog - xfd->inodelog;
+ return 0;
}
/*
minor(ctx->fsinfo.fs_datadev),
agno);
- ag_ino = (__u64)agno << (ctx->inopblog + ctx->agblklog);
- next_ag_ino = (__u64)(agno + 1) << (ctx->inopblog + ctx->agblklog);
+ ag_ino = (__u64)agno << (ctx->mnt.inopblog + ctx->mnt.agblklog);
+ next_ag_ino = (__u64)(agno + 1) << (ctx->mnt.inopblog + ctx->mnt.agblklog);
moveon = xfs_count_inodes_range(ctx, descr, ag_ino, next_ag_ino - 1,
&ci->counters[agno]);
minor(ctx->fsinfo.fs_datadev),
agno);
- ag_ino = (__u64)agno << (ctx->inopblog + ctx->agblklog);
- next_ag_ino = (__u64)(agno + 1) << (ctx->inopblog + ctx->agblklog);
+ ag_ino = (__u64)agno << (ctx->mnt.inopblog + ctx->mnt.agblklog);
+ next_ag_ino = (__u64)(agno + 1) << (ctx->mnt.inopblog + ctx->mnt.agblklog);
moveon = xfs_iterate_inodes_range(ctx, descr, ctx->fshandle, ag_ino,
next_ag_ino - 1, si->fn, si->arg);
return false;
}
- ctx->agblklog = log2_roundup(ctx->mnt.fsgeom.agblocks);
- ctx->blocklog = highbit32(ctx->mnt.fsgeom.blocksize);
- ctx->inodelog = highbit32(ctx->mnt.fsgeom.inodesize);
- ctx->inopblog = ctx->blocklog - ctx->inodelog;
-
error = path_to_fshandle(ctx->mntpoint, &ctx->fshandle,
&ctx->fshandle_len);
if (error) {
xfs_agino_t agino;
int old_errno = errno;
- agno = bstat->bs_ino / (1ULL << (ctx->inopblog + ctx->agblklog));
- agino = bstat->bs_ino % (1ULL << (ctx->inopblog + ctx->agblklog));
+ agno = bstat->bs_ino / (1ULL << (ctx->mnt.inopblog + ctx->mnt.agblklog));
+ agino = bstat->bs_ino % (1ULL << (ctx->mnt.inopblog + ctx->mnt.agblklog));
snprintf(descr, DESCR_BUFSZ, _("inode %"PRIu64" (%u/%u)"),
(uint64_t)bstat->bs_ino, agno, agino);
errno = old_errno;
int error;
xfs_action_list_init(&alist);
- agno = bstat->bs_ino / (1ULL << (ctx->inopblog + ctx->agblklog));
+ agno = bstat->bs_ino / (1ULL << (ctx->mnt.inopblog + ctx->mnt.agblklog));
background_sleep();
/* Try to open the inode to pin it. */
int fd = -1;
int error;
- agno = bstat->bs_ino / (1ULL << (ctx->inopblog + ctx->agblklog));
- agino = bstat->bs_ino % (1ULL << (ctx->inopblog + ctx->agblklog));
+ agno = bstat->bs_ino / (1ULL << (ctx->mnt.inopblog + ctx->mnt.agblklog));
+ agino = bstat->bs_ino % (1ULL << (ctx->mnt.inopblog + ctx->mnt.agblklog));
snprintf(descr, DESCR_BUFSZ, _("inode %"PRIu64" (%u/%u)"),
(uint64_t)bstat->bs_ino, agno, agino);
background_sleep();
if (!moveon)
return moveon;
- *items = ((d_blocks - d_bfree) + (r_blocks - r_bfree)) << ctx->blocklog;
+ *items = ((d_blocks - d_bfree) + (r_blocks - r_bfree)) << ctx->mnt.blocklog;
*nr_threads = disk_heads(ctx->datadev);
*rshift = 20;
return moveon;
* filesystem treats them as "free", but since we scanned
* them, we'll consider them used.
*/
- d_bfree -= totalcount.agbytes >> ctx->blocklog;
+ d_bfree -= totalcount.agbytes >> ctx->mnt.blocklog;
/* Report on what we found. */
- used_data = (d_blocks - d_bfree) << ctx->blocklog;
- used_rt = (r_blocks - r_bfree) << ctx->blocklog;
+ used_data = (d_blocks - d_bfree) << ctx->mnt.blocklog;
+ used_rt = (r_blocks - r_bfree) << ctx->mnt.blocklog;
used_files = f_files - f_free;
stat_data = totalcount.dbytes;
stat_rt = totalcount.rbytes;
/* XFS specific geometry */
struct fs_path fsinfo;
- unsigned int agblklog;
- unsigned int blocklog;
- unsigned int inodelog;
- unsigned int inopblog;
void *fshandle;
size_t fshandle_len;