On 6/27/11 12:48 AM, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > fsx segvs when dumping fallocate log entries. Fix magic string > array index parameters to be zero based rather than one based. Oh geez. :( > While touching log string related stuff, make the format consistent > with read and write operations so the log dump is easier to look at > with the human eye. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxx> > --- > ltp/fsx.c | 28 +++++++++++++++------------- > 1 files changed, 15 insertions(+), 13 deletions(-) > > diff --git a/ltp/fsx.c b/ltp/fsx.c > index 66daefe..38d5278 100644 > --- a/ltp/fsx.c > +++ b/ltp/fsx.c > @@ -223,14 +223,14 @@ logdump(void) > int opnum; > > opnum = i+1 + (logcount/LOGSIZE)*LOGSIZE; > - prt("%d(%d mod 256): ", opnum, opnum%256); > + prt("%d(%3d mod 256): ", opnum, opnum%256); > lp = &oplog[i]; > if ((closeopen = lp->operation < 0)) > lp->operation = ~ lp->operation; > > switch (lp->operation) { > case OP_MAPREAD: > - prt("MAPREAD\t0x%x thru 0x%x\t(0x%x bytes)", > + prt("MAPREAD 0x%x thru 0x%x\t(0x%x bytes)", > lp->args[0], lp->args[0] + lp->args[1] - 1, > lp->args[1]); > if (badoff >= lp->args[0] && badoff < > @@ -246,7 +246,7 @@ logdump(void) > prt("\t******WWWW"); > break; > case OP_READ: > - prt("READ\t0x%x thru 0x%x\t(0x%x bytes)", > + prt("READ 0x%x thru 0x%x\t(0x%x bytes)", > lp->args[0], lp->args[0] + lp->args[1] - 1, > lp->args[1]); > if (badoff >= lp->args[0] && > @@ -254,7 +254,7 @@ logdump(void) > prt("\t***RRRR***"); > break; > case OP_WRITE: > - prt("WRITE\t0x%x thru 0x%x\t(0x%x bytes)", > + prt("WRITE 0x%x thru 0x%x\t(0x%x bytes)", > lp->args[0], lp->args[0] + lp->args[1] - 1, > lp->args[1]); > if (lp->args[0] > lp->args[2]) > @@ -275,14 +275,15 @@ logdump(void) > break; > case OP_FALLOCATE: > /* 0: offset 1: length 2: where alloced */ > - prt("FALLOCATE %s\tfrom 0x%x to 0x%x", > - falloc_type[lp->args[2]], lp->args[0], lp->args[0] + lp->args[1]); > + prt("FALLOC 0x%x thru 0x%x\t(0x%x bytes) %s", > + lp->args[0], lp->args[0] + lp->args[1], > + lp->args[1], falloc_type[lp->args[2]]); > if (badoff >= lp->args[0] && > badoff < lp->args[0] + lp->args[1]) > prt("\t******FFFF"); > break; > case OP_PUNCH_HOLE: > - prt("PUNCH HOLE\t0x%x thru 0x%x\t(0x%x bytes)", > + prt("PUNCH 0x%x thru 0x%x\t(0x%x bytes)", > lp->args[0], lp->args[0] + lp->args[1] - 1, > lp->args[1]); > if (badoff >= lp->args[0] && badoff < > @@ -877,12 +878,12 @@ do_preallocate(unsigned offset, unsigned length) > } > > /* > - * last arg: > - * 1: allocate past EOF > - * 2: extending prealloc > - * 3: interior prealloc > + * last arg matches fallocate string array index in logdump: > + * 0: allocate past EOF > + * 1: extending prealloc > + * 2: interior prealloc > */ > - log4(OP_FALLOCATE, offset, length, (end_offset > file_size) ? (keep_size ? 1 : 2) : 3); > + log4(OP_FALLOCATE, offset, length, (end_offset > file_size) ? (keep_size ? 0 : 1) : 2); > > if (end_offset > file_size) { > memset(good_buf + file_size, '\0', end_offset - file_size); > @@ -895,7 +896,8 @@ do_preallocate(unsigned offset, unsigned length) > if ((progressinterval && testcalls % progressinterval == 0) || > (debug && (monitorstart == -1 || monitorend == -1 || > end_offset <= monitorend))) > - prt("%lu falloc\tfrom 0x%x to 0x%x\n", testcalls, offset, length); > + prt("%lu falloc\tfrom 0x%x to 0x%x (0x%x bytes)\n", testcalls, > + offset, offset + length, length); > if (fallocate(fd, keep_size ? FALLOC_FL_KEEP_SIZE : 0, (loff_t)offset, (loff_t)length) == -1) { > prt("fallocate: %x to %x\n", offset, length); > prterr("do_preallocate: fallocate"); _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs