usage(void)
{
fprintf(stderr, _(
- "Usage: %s [-ifFrxV] [-p prog] [-l logdev] [-c cmd]... device\n"
+ "Usage: %s [-ifFrxV] [-p prog] [-l logdev] [-R rtdev] [-c cmd]... device\n"
), progname);
exit(1);
}
textdomain(PACKAGE);
progname = basename(argv[0]);
- while ((c = getopt(argc, argv, "c:fFip:rxVl:")) != EOF) {
+ while ((c = getopt(argc, argv, "c:fFip:rR:xVl:")) != EOF) {
switch (c) {
case 'c':
cmdline = xrealloc(cmdline, (ncmdline+1)*sizeof(char*));
case 'r':
x.flags = LIBXFS_ISREADONLY;
break;
+ case 'R':
+ x.rt.name = optarg;
+ break;
case 'l':
x.log.name = optarg;
break;
static void
write_cur_buf(void)
{
+ struct xfs_buftarg *btp = iocur_top->bp->b_target;
int ret;
ret = -libxfs_bwrite(iocur_top->bp);
dbprintf(_("write error: %s\n"), strerror(ret));
/* re-read buffer from disk */
- ret = -libxfs_readbufr(mp->m_ddev_targp, iocur_top->bb, iocur_top->bp,
+ ret = -libxfs_readbufr(btp, iocur_top->bb, iocur_top->bp,
iocur_top->blen, 0);
if (ret != 0)
dbprintf(_("read error: %s\n"), strerror(ret));
static void
write_cur_bbs(void)
{
+ struct xfs_buftarg *btp = iocur_top->bp->b_target;
int ret;
ret = -libxfs_bwrite(iocur_top->bp);
/* re-read buffer from disk */
- ret = -libxfs_readbufr_map(mp->m_ddev_targp, iocur_top->bp, 0);
+ ret = -libxfs_readbufr_map(btp, iocur_top->bp, 0);
if (ret != 0)
dbprintf(_("read error: %s\n"), strerror(ret));
}
__set_cur(
struct xfs_buftarg *btargp,
const typ_t *type,
- xfs_daddr_t blknum,
- int len,
- int ring_flag,
+ xfs_daddr_t blknum,
+ int len,
+ int ring_flag,
bbmap_t *bbmap)
{
struct xfs_buf *bp;
__set_cur(mp->m_logdev_targp, type, blknum, len, ring_flag, bbmap);
}
+int
+set_rt_cur(
+ const typ_t *type,
+ xfs_daddr_t blknum,
+ int len,
+ int ring_flag,
+ bbmap_t *bbmap)
+{
+ if (!mp->m_rtdev_targp->bt_bdev) {
+ printf(_("realtime device not loaded, use -R.\n"));
+ return ENODEV;
+ }
+
+ __set_cur(mp->m_rtdev_targp, type, blknum, len, ring_flag, bbmap);
+ return 0;
+}
void
set_iocur_type(
int len, int ring_add, bbmap_t *bbmap);
extern void set_log_cur(const struct typ *type, xfs_daddr_t blknum,
int len, int ring_add, bbmap_t *bbmap);
+int set_rt_cur(const struct typ *type, xfs_daddr_t blknum,
+ int len, int ring_add, bbmap_t *bbmap);
extern void ring_add(void);
extern void set_iocur_type(const struct typ *type);
extern void xfs_dummy_verify(struct xfs_buf *bp);
require_offline=""
require_online=""
DB_OPTS=""
+DB_DEV_OPTS=""
REPAIR_OPTS=""
IO_OPTS=""
REPAIR_DEV_OPTS=""
require_offline=1
;;
r) REPAIR_DEV_OPTS=" -r '$OPTARG'"
+ DB_DEV_OPTS=" -R '$OPTARG'"
require_offline=1
;;
u) DB_OPTS=$DB_OPTS" -r -c uuid"
if [ -n "$DB_OPTS" ]
then
- eval xfs_db -x -p xfs_admin $LOG_OPTS $DB_OPTS "$1"
+ eval xfs_db -x -p xfs_admin $LOG_OPTS $DB_DEV_OPTS $DB_OPTS "$1"
status=$?
fi
if [ -n "$REPAIR_OPTS" ]
.B \-l
.I logdev
] [
+.B \-R
+.I rtdev
+] [
.B \-p
.I progname
]
for prompts and some error messages, the default value is
.BR xfs_db .
.TP
+.B -R
+.I rtdev
+Specifies the device where the realtime data resides.
+This is only relevant for filesystems that have a realtime section.
+See the
+.BR mkfs.xfs "(8) " \-r
+option, and refer to
+.BR xfs (5)
+for a detailed description of the XFS realtime section.
+.TP
.B -r
Open
.I device