Hi Brian,
>
> Well, the code looks Ok to me but the design still seems overdone IMO. I
> have no major objection if this goes in as is (with one exception noted
> below), but IMO we should take the approach somewhat discussed in the v3
> review.
First of all, thanks for reviewing the patch again, I took some time to reply
because I was waiting for any other comments and had a few other things to do.
>
> In particular, define an actual default behavior for the command to
> return the largest inode number (or return 1/0 for "ability to mount w/
> inode32" as Dave suggested). For example, kill both of the -l and -s
> flags and just return 1/0 by default. Define a single verbose (-v) flag
> to print the combined inode number and size. This mode can be
> implemented as the body of the inode_f() function. If -n is specified,
> basically do what the current version does. Just my .02.
>
I agree with you here and tbh, I don't really think a -v flag is really needed,
although it can certainly facilitate the usage of the xfs_io -c "inode".
Checking for the size of the inode returned against UINT32_MAX is not that hard
anyway, but I think keeping a very simple return value for the command might be
the best approach.
I'm going to re-write it and send a V5 today including a review of your comment
below.
thanks again for the review
> > io/open.c | 151
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 151 insertions(+)
> >
> > diff --git a/io/open.c b/io/open.c
> > index ac5a5e0..2fc8aab 100644
> > --- a/io/open.c
> > +++ b/io/open.c
> ...
> > + if (ret_lsize || ret_largest) {
> > +
> > + bulkreq.lastip = &last;
> > + bulkreq.icount = 1024; /* User-defined maybe!? */
> > + bulkreq.ubuffer = &igroup;
> > + bulkreq.ocount = &count;
> > +
> > + for (;;) {
> > +
> > + if (xfsctl(file->name, file->fd, XFS_IOC_FSINUMBERS,
> > + &bulkreq)) {
> > + perror("XFS_IOC_FSINUMBERS");
> > + exitcode = 1;
> > + return 0;
> > + }
> > +
> > + if (count == 0)
> > + break;
> > +
> > + lastgrp = count;
> > + }
> > +
> > + lastgrp--;
> > + igrp_rec = igroup[lastgrp];
>
> IIRC the point of igrp_rec was to save off the last record so it could
> be used directly after the loop without need for the count (because it
> could be 0). Here we use a separate lastgrp count to protect against the
> 0 case, yet still do the record copy after the loop... what's the point
> of that?
>
> Brian
>
> > + lastino = igrp_rec.xi_startino +
> > + xfs_highbit64(igrp_rec.xi_allocmask);
> > +
> > + if (ret_lsize)
> > + printf (_("Largest inode size: %d\n"),
> > + lastino > XFS_MAXINUMBER_32 ? 64 : 32);
> > + else
> > + printf(_("Largest inode: %llu\n"), lastino);
> > +
> > + return 0;
> > + }
> > +
> > + return command_usage(&inode_cmd);
> > +}
> > +
> > void
> > open_init(void)
> > {
> > @@ -815,6 +955,16 @@ open_init(void)
> > _("get/set preferred extent size (in bytes) for the open file");
> > extsize_cmd.help = extsize_help;
> >
> > + inode_cmd.name = "inode";
> > + inode_cmd.cfunc = inode_f;
> > + inode_cmd.args = _("[-s | -l | -n] [num]");
> > + inode_cmd.argmin = 1;
> > + inode_cmd.argmax = 2;
> > + inode_cmd.flags = CMD_NOMAP_OK;
> > + inode_cmd.oneline =
> > + _("Query inode number usage in the filesystem");
> > + inode_cmd.help = inode_help;
> > +
> > add_command(&open_cmd);
> > add_command(&stat_cmd);
> > add_command(&close_cmd);
> > @@ -822,4 +972,5 @@ open_init(void)
> > add_command(&chproj_cmd);
> > add_command(&lsproj_cmd);
> > add_command(&extsize_cmd);
> > + add_command(&inode_cmd);
> > }
> > --
> > 2.4.3
> >
> > _______________________________________________
> > xfs mailing list
> > xfs@xxxxxxxxxxx
> > http://oss.sgi.com/mailman/listinfo/xfs
--
Carlos
|