struct read_verify_pool *rvp[XFS_DEV_RT + 1];
};
-/* Return XFS device index from fsmap device. */
-static enum xfs_device
-from_fsmap_dev(
- struct scrub_ctx *ctx,
- dev_t dev)
-{
- if (ctx->mnt.fsgeom.rtstart) {
- if (dev < XFS_DEV_DATA || dev > XFS_DEV_RT)
- abort();
- return dev;
- }
-
- if (dev == ctx->fsinfo.fs_datadev)
- return XFS_DEV_DATA;
- if (dev == ctx->fsinfo.fs_logdev)
- return XFS_DEV_LOG;
- if (dev == ctx->fsinfo.fs_rtdev)
- return XFS_DEV_RT;
- abort();
-}
-
-/* Return fsmap device for XFS device index. */
-static uint32_t
-to_fsmap_dev(
- struct scrub_ctx *ctx,
- enum xfs_device dev)
-{
- if (ctx->mnt.fsgeom.rtstart)
- return dev;
-
- switch (dev) {
- case XFS_DEV_DATA:
- return ctx->fsinfo.fs_datadev;
- case XFS_DEV_LOG:
- return ctx->fsinfo.fs_logdev;
- case XFS_DEV_RT:
- return ctx->fsinfo.fs_rtdev;
- default:
- abort();
- }
-}
-
struct disk_ioerr_report {
struct scrub_ctx *ctx;
enum xfs_device dev;
void *arg)
{
struct summary_counts *counts;
- enum xfs_device dev;
+ enum xfs_device dev = from_fsmap_dev(ctx, fsmap->fmr_device);
unsigned long long len;
int ret;
- if (ctx->mnt.fsgeom.rtstart)
- dev = fsmap->fmr_device;
- else if (fsmap->fmr_device == ctx->fsinfo.fs_logdev)
- dev = XFS_DEV_LOG;
- else if (fsmap->fmr_device == ctx->fsinfo.fs_rtdev)
- dev = XFS_DEV_RT;
- else
- dev = XFS_DEV_DATA;
-
counts = ptvar_get((struct ptvar *)arg, &ret);
if (ret) {
str_liberror(ctx, -ret, _("retrieving summary counts"));
bperag = (off_t)ctx->mnt.fsgeom.agblocks *
(off_t)ctx->mnt.fsgeom.blocksize;
- if (ctx->mnt.fsgeom.rtstart)
- keys[0].fmr_device = XFS_DEV_DATA;
- else
- keys[0].fmr_device = ctx->fsinfo.fs_datadev;
+ keys[0].fmr_device = to_fsmap_dev(ctx, XFS_DEV_DATA);
keys[0].fmr_physical = agno * bperag;
keys[1].fmr_device = keys[0].fmr_device;
keys[1].fmr_physical = ((agno + 1) * bperag) - 1;
off_t bperrg = bytes_per_rtgroup(&ctx->mnt.fsgeom);
int ret;
- if (ctx->mnt.fsgeom.rtstart)
- keys[0].fmr_device = XFS_DEV_RT;
- else
- keys[0].fmr_device = ctx->fsinfo.fs_rtdev;
+ keys[0].fmr_device = to_fsmap_dev(ctx, XFS_DEV_RT);
keys[0].fmr_physical = (xfs_rtblock_t)rgno * bperrg;
keys[1].fmr_device = keys[0].fmr_device;
keys[1].fmr_physical = ((rgno + 1) * bperrg) - 1;
{
struct scrub_ctx *ctx = (struct scrub_ctx *)wq->wq_ctx;
- scan_dev_rmaps(ctx, ctx->fsinfo.fs_rtdev, arg);
+ scan_dev_rmaps(ctx, to_fsmap_dev(ctx, XFS_DEV_RT), arg);
}
-/* Iterate all the reverse mappings of the log device. */
+/* Iterate all the reverse mappings of the external log device. */
static void
scan_log_rmaps(
struct workqueue *wq,
{
struct scrub_ctx *ctx = (struct scrub_ctx *)wq->wq_ctx;
- scan_dev_rmaps(ctx, ctx->mnt.fsgeom.rtstart ? 2 : ctx->fsinfo.fs_logdev,
- arg);
+ scan_dev_rmaps(ctx, to_fsmap_dev(ctx, XFS_DEV_LOG), arg);
}
/*
return scrub_nproc(ctx);
}
+/* Return XFS device index from fsmap device. */
+static inline enum xfs_device
+from_fsmap_dev(
+ struct scrub_ctx *ctx,
+ dev_t dev)
+{
+ if (ctx->mnt.fsgeom.rtstart) {
+ if (dev < XFS_DEV_DATA || dev > XFS_DEV_RT)
+ abort();
+ return dev;
+ }
+
+ if (dev == ctx->fsinfo.fs_datadev)
+ return XFS_DEV_DATA;
+ if (dev == ctx->fsinfo.fs_logdev)
+ return XFS_DEV_LOG;
+ if (dev == ctx->fsinfo.fs_rtdev)
+ return XFS_DEV_RT;
+ abort();
+}
+
+/* Return fsmap device for XFS device index. */
+static inline uint32_t
+to_fsmap_dev(
+ struct scrub_ctx *ctx,
+ enum xfs_device dev)
+{
+ if (ctx->mnt.fsgeom.rtstart)
+ return dev;
+
+ switch (dev) {
+ case XFS_DEV_DATA:
+ return ctx->fsinfo.fs_datadev;
+ case XFS_DEV_LOG:
+ return ctx->fsinfo.fs_logdev;
+ case XFS_DEV_RT:
+ return ctx->fsinfo.fs_rtdev;
+ default:
+ abort();
+ }
+}
+
#endif /* XFS_SCRUB_SPACEMAP_H_ */