@@ -33,7 +33,7 @@ static void
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);
}
@@ -54,7 +54,7 @@ init(
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*));
@@ -75,6 +75,9 @@ init(
case 'r':
x.isreadonly = LIBXFS_ISREADONLY;
break;
+ case 'R':
+ x.rtname = optarg;
+ break;
case 'l':
x.logname = optarg;
break;
@@ -429,6 +429,7 @@ ring_add(void)
static void
write_cur_buf(void)
{
+ struct xfs_buftarg *btp = iocur_top->bp->b_target;
int ret;
ret = -libxfs_bwrite(iocur_top->bp);
@@ -436,7 +437,7 @@ write_cur_buf(void)
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));
@@ -445,6 +446,7 @@ write_cur_buf(void)
static void
write_cur_bbs(void)
{
+ struct xfs_buftarg *btp = iocur_top->bp->b_target;
int ret;
ret = -libxfs_bwrite(iocur_top->bp);
@@ -453,7 +455,7 @@ write_cur_bbs(void)
/* 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));
}
@@ -508,8 +510,9 @@ write_cur(void)
}
-void
-set_cur(
+static void
+__set_cur(
+ struct xfs_buftarg *btp,
const typ_t *type,
xfs_daddr_t blknum,
int len,
@@ -548,11 +551,11 @@ set_cur(
if (!iocur_top->bbmap)
return;
memcpy(iocur_top->bbmap, bbmap, sizeof(struct bbmap));
- error = -libxfs_buf_read_map(mp->m_ddev_targp, bbmap->b,
+ error = -libxfs_buf_read_map(btp, bbmap->b,
bbmap->nmaps, LIBXFS_READBUF_SALVAGE, &bp,
ops);
} else {
- error = -libxfs_buf_read(mp->m_ddev_targp, blknum, len,
+ error = -libxfs_buf_read(btp, blknum, len,
LIBXFS_READBUF_SALVAGE, &bp, ops);
iocur_top->bbmap = NULL;
}
@@ -589,6 +592,34 @@ set_cur(
ring_add();
}
+void
+set_cur(
+ const typ_t *type,
+ xfs_daddr_t blknum,
+ int len,
+ int ring_flag,
+ bbmap_t *bbmap)
+{
+ __set_cur(mp->m_ddev_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(
const typ_t *type)
@@ -49,6 +49,8 @@ extern void push_cur_and_set_type(void);
extern void write_cur(void);
extern void set_cur(const struct typ *type, xfs_daddr_t blknum,
int len, int ring_add, bbmap_t *bbmap);
+extern 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);
@@ -6,6 +6,7 @@
status=0
DB_OPTS=""
+DB_DEV_OPTS=""
REPAIR_OPTS=""
REPAIR_DEV_OPTS=""
LOG_OPTS=""
@@ -22,7 +23,7 @@ do
L) DB_OPTS=$DB_OPTS" -c 'label "$OPTARG"'";;
O) REPAIR_OPTS=$REPAIR_OPTS" -c $OPTARG";;
p) DB_OPTS=$DB_OPTS" -c 'version projid32bit'";;
- r) REPAIR_DEV_OPTS=" -r '$OPTARG'";;
+ r) REPAIR_DEV_OPTS=" -r '$OPTARG'"; DB_DEV_OPTS=" -R '$OPTARG'";;
u) DB_OPTS=$DB_OPTS" -r -c uuid";;
U) DB_OPTS=$DB_OPTS" -c 'uuid "$OPTARG"'";;
V) xfs_db -p xfs_admin -V
@@ -45,7 +46,7 @@ case $# in
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" ]
@@ -14,6 +14,9 @@ xfs_db \- debug an XFS filesystem
.B \-l
.I logdev
] [
+.B \-R
+.I rtdev
+] [
.B \-p
.I progname
]
@@ -80,6 +83,16 @@ Set the program name to
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