On Thu, Nov 18, 2010 at 04:14:44PM +1100, Dave Chinner wrote:
> On Fri, Nov 12, 2010 at 04:55:05PM -0500, Josef Bacik wrote:
> > Obviously this is highly dependant upon my current implementation of hole
> > punching via fallocate going in, but this is the support code for falloc to
> > deal
> > with hole punching. This is necessary to run the xfstest I have to make
> > sure
> > the punching stuff is working properly. Thanks,
> >
> > Signed-off-by: Josef Bacik <josef@xxxxxxxxxx>
> > ---
> > io/prealloc.c | 17 ++++++++++++++++-
> > 1 files changed, 16 insertions(+), 1 deletions(-)
> >
> > diff --git a/io/prealloc.c b/io/prealloc.c
> > index c8b7df6..4b14da7 100644
> > --- a/io/prealloc.c
> > +++ b/io/prealloc.c
> > @@ -153,12 +153,23 @@ fallocate_f(
> > xfs_flock64_t segment;
> > int mode = 0;
> > int c;
> > + const char *opts;
> >
> > - while ((c = getopt(argc, argv, "k")) != EOF) {
> > +#if defined (FALLOC_FL_PUNCH_HOLE)
> > + opts = "kp";
> > +#else
> > + opts = "k";
> > +#endif
> > + while ((c = getopt(argc, argv, opts)) != EOF) {
> > switch (c) {
> > case 'k':
> > mode = FALLOC_FL_KEEP_SIZE;
> > break;
> > +#if defined (FALLOC_FL_PUNCH_HOLE)
> > + case 'p':
> > + mode = FALLOC_FL_PUNCH_HOLE;
> > + break;
> > +#endif
> > default:
> > command_usage(&falloc_cmd);
> > }
> > @@ -236,7 +247,11 @@ prealloc_init(void)
> > falloc_cmd.argmin = 2;
> > falloc_cmd.argmax = -1;
> > falloc_cmd.flags = CMD_NOMAP_OK | CMD_FOREIGN_OK;
> > +#if defined (FALLOC_FL_PUNCH_HOLE)
> > + falloc_cmd.args = _("[-k] [-p] off len");
> > +#else
> > falloc_cmd.args = _("[-k] off len");
> > +#endif
> > falloc_cmd.oneline =
> > _("allocates space associated with part of a file via
> > fallocate");
>
> I'd prefer that there is a separate command for FALLOC_FL_PUNCH_HOLE
> rather than a flag that changed the behaviour of the falloc command
> completely. This is the way we've done resvsp/unresvsp, so I think
> it makes sense to follow this command structure e.g. falloc/fpunch.
>
Fair enough, I can do that. Thanks,
Josef
|