Skip to contentSkip to conversation

gfs2_edit: Log descriptor continuation blocks print wrong info

PATCH New Bob Peterson 2 participants 2 messages Nov 12, 2015 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw

PATCH 1/1 gfs2_edit: Log descriptor continuation blocks print wrong info

Hi,

This patch fixes a couple minor annoyances wrt the printing of journal continuation blocks.

gfs2_edit: Log descriptor continuation blocks print wrong info

Log descriptor continuation blocks are printing misleading information. First, the offset from the start of the journal is reported incorrectly. Second, it's trying to print the block types when it shouldn't. The faulty output looks like this:
0x40e9 (j+4093000): Log descriptor continuation block

                0x48202b none      0x481e2d none      0x481c2f none      0x481a31 none

In practice, these are used to continue the job of "revoke" log descriptors, which have no blocks that follow, so it should not try to report the types of the blocks that follow.

This patch fixes the journal offset calculation and skips the reporting of the block types that follow, so the output looks is given correctly as:
0x40e9 (j+4093): Log descriptor continuation block

                0x48202b        0x481e2d        0x481c2f        0x481a31

---

gfs2/edit/journal.c +3 -2
index 15e02de..80c8738 100644
@@ -610,7 +610,8 @@ void dump_journal(const char *journal, int tblk)
 		} else if ((ld_blocks > 0) &&
 			   (sbd.gfs1 || block_type == GFS2_METATYPE_LB)) {
 			print_gfs2("0x%"PRIx64" (j+%4"PRIx64"): Log descriptor"
-				   " continuation block", abs_block, jb);
+				   " continuation block", abs_block,
+				   ((jb + wrappt) % j_size) / sbd.bsize);
 			eol(0);
 			print_gfs2("                    ");
 			ld_blocks -= print_ld_blks((uint64_t *)dummy_bh.b_data +
@@ -619,7 +620,7 @@ void dump_journal(const char *journal, int tblk)
 						   (dummy_bh.b_data +
 						    sbd.bsize), start_line,
 						   tblk, &tblk_off, 0, rgd,
-						   0, 1, NULL, 1);
+						   0, 1, NULL, 0);
 		} else if (block_type == 0) {
 			continue;
 		}
#2 lore raw

PATCH 1/1 gfs2_edit: Log descriptor continuation blocks print wrong info

Quoted 17 lines · Bob Peterson

Hi,

This patch fixes a couple minor annoyances wrt the printing of journal continuation blocks.

gfs2_edit: Log descriptor continuation blocks print wrong info

Log descriptor continuation blocks are printing misleading information. First, the offset from the start of the journal is reported incorrectly. Second, it's trying to print the block types when it shouldn't. The faulty output looks like this:
0x40e9 (j+4093000): Log descriptor continuation block

                 0x48202b none      0x481e2d none      0x481c2f none      0x481a31 none

In practice, these are used to continue the job of "revoke" log descriptors, which have no blocks that follow, so it should not try to report the types of the blocks that follow.

Quoted 7 lines

This patch fixes the journal offset calculation and skips the reporting of the block types that follow, so the output looks is given correctly as:
0x40e9 (j+4093): Log descriptor continuation block

                 0x48202b        0x481e2d        0x481c2f        0x481a31

Looks good to me.

Thanks,
Andy

Quoted 25 lines

---

gfs2/edit/journal.c +3 -2
index 15e02de..80c8738 100644
@@ -610,7 +610,8 @@ void dump_journal(const char *journal, int tblk)
  		} else if ((ld_blocks > 0) &&
  			   (sbd.gfs1 || block_type == GFS2_METATYPE_LB)) {
  			print_gfs2("0x%"PRIx64" (j+%4"PRIx64"): Log descriptor"
-				   " continuation block", abs_block, jb);
+				   " continuation block", abs_block,
+				   ((jb + wrappt) % j_size) / sbd.bsize);
  			eol(0);
  			print_gfs2("                    ");
  			ld_blocks -= print_ld_blks((uint64_t *)dummy_bh.b_data +
@@ -619,7 +620,7 @@ void dump_journal(const char *journal, int tblk)
  						   (dummy_bh.b_data +
  						    sbd.bsize), start_line,
  						   tblk, &tblk_off, 0, rgd,
-						   0, 1, NULL, 1);
+						   0, 1, NULL, 0);
  		} else if (block_type == 0) {
  			continue;
  		}