@@ -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.flags = LIBXFS_ISREADONLY;
break;
+ case 'R':
+ x.rt.name = optarg;
+ break;
case 'l':
x.log.name = optarg;
break;
@@ -458,6 +458,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);
@@ -465,7 +466,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));
@@ -474,6 +475,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);
@@ -482,7 +484,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));
}
@@ -541,9 +543,9 @@ static void
__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;
@@ -647,6 +649,22 @@ set_log_cur(
__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(
@@ -51,6 +51,8 @@ extern void set_cur(const struct typ *type, xfs_daddr_t blknum,
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);
@@ -8,6 +8,7 @@ status=0
require_offline=""
require_online=""
DB_OPTS=""
+DB_DEV_OPTS=""
REPAIR_OPTS=""
IO_OPTS=""
REPAIR_DEV_OPTS=""
@@ -42,6 +43,7 @@ do
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"
@@ -89,7 +91,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 @@ .SH SYNOPSIS
.B \-l
.I logdev
] [
+.B \-R
+.I rtdev
+] [
.B \-p
.I progname
]
@@ -80,6 +83,16 @@ .SH OPTIONS
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