[PATCH] db: limit AGFL bno array printing
Carlos Maiolino
cmaiolino at redhat.com
Fri May 13 05:13:56 CDT 2016
On Fri, May 13, 2016 at 11:40:03AM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner at redhat.com>
>
> When asking for a single agfl entry such as:
Looks good to me, feel free to add
Reviewed-by: Carlos Maiolino <cmaiolino at redhat.com>
>
> # xfs_db -c "agfl 0" -c "p bno[1]" /dev/ram0
> bno[1] = 1:6 2:7 3:8 4:null .....
>
> The result should be just the single entry being asked for.
> Currently this outputs the entire remainder of the array starting at
> the given index. This makes it difficult to extract single entry
> values.
>
> This occurs because the printing of a flat array of number types
> does not take into account the range that is specified on the
> command line, which is held in fl->low and fl->high. To make this
> work for flat arrays of number types (print function fp_num), change
> print_flist() to limit the count of values to be emitted to the
> range specified. This now gives:
>
> # xfs_db -c "agfl 0" -c "p bno[1-2]" /dev/ram0
> bno[1-2] = 1:6 2:7
>
> To further simplify external parsing of single entry values, if only
> a single value is requested from the array of fp_num type, don't
> print the array index - it's already known. Hence:
>
> # xfs_db -c "agfl 0" -c "p bno[1]" /dev/ram0
> bno[1] = 6
>
> This change will take effect on all types of flat number arrays that
> are printed. e.g. the range limiting will work for things like the
> AGI unlinked list arrays.
>
> Signed-off-by: Dave Chinner <dchinner at redhat.com>
> ---
> db/fprint.c | 2 +-
> db/print.c | 7 +++++--
> 2 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/db/fprint.c b/db/fprint.c
> index f2b3794..fd7e7f4 100644
> --- a/db/fprint.c
> +++ b/db/fprint.c
> @@ -93,7 +93,7 @@ fp_num(
> val == -1LL : val == ((1LL << size) - 1LL);
> if ((arg & FTARG_SKIPNULL) && isnull)
> continue;
> - if (array)
> + if (array && count > 1)
> dbprintf("%d:", i + base);
> if ((arg & FTARG_DONULL) && isnull)
> dbprintf(_("null"));
> diff --git a/db/print.c b/db/print.c
> index 3ff2548..998daf4 100644
> --- a/db/print.c
> +++ b/db/print.c
> @@ -107,6 +107,7 @@ print_flist_1(
> const ftattr_t *fa;
> flist_t *fl;
> int low;
> + int count;
> int neednl;
> char **pfx;
>
> @@ -139,10 +140,12 @@ print_flist_1(
> low = fl->low;
> else
> low = 0;
> + count = fcount(f, iocur_top->data, parentoff);
> + if (fl->flags & FL_OKHIGH)
> + count = min(count, fl->high - low + 1);
> if (fa->prfunc) {
> neednl = fa->prfunc(iocur_top->data, fl->offset,
> - fcount(f, iocur_top->data, parentoff),
> - fa->fmtstr,
> + count, fa->fmtstr,
> fsize(f, iocur_top->data, parentoff, 0),
> fa->arg, low,
> (f->flags & FLD_ARRAY) != 0);
> --
> 2.8.0.rc3
>
> _______________________________________________
> xfs mailing list
> xfs at oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
--
Carlos
More information about the xfs
mailing list