xfs
[Top] [All Lists]

Re: [PATCH 2/2 V2] mkfs.xfs: don't call blkid_get_topology on regular fi

To: Eric Sandeen <sandeen@xxxxxxxxxxx>
Subject: Re: [PATCH 2/2 V2] mkfs.xfs: don't call blkid_get_topology on regular files
From: Brian Foster <bfoster@xxxxxxxxxx>
Date: Fri, 6 Jun 2014 11:21:00 -0400
Cc: Eric Sandeen <sandeen@xxxxxxxxxx>, xfs-oss <xfs@xxxxxxxxxxx>
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <5390C1B7.7050106@xxxxxxxxxxx>
References: <53852A05.5040006@xxxxxxxxxx> <5390C1B7.7050106@xxxxxxxxxxx>
User-agent: Mutt/1.5.23 (2014-03-12)
On Thu, Jun 05, 2014 at 02:15:03PM -0500, Eric Sandeen wrote:
> If we encounter a target that's really a regular file,
> even without "-d file..." on the cmdline, call
> platform_findsizes() instead of blkid_get_topology to
> try to discover the "sector size" via the fsgeom() call.
> 
> Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
> ---
> 
> V2: Lose local "isa_file" flag, just switch based on 
> (xi->disfile) or (stat works & S_ISREG)
> 
> diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
> index 188b6b3..3b8bf67 100644
> --- a/mkfs/xfs_mkfs.c
> +++ b/mkfs/xfs_mkfs.c
> @@ -456,9 +456,25 @@ static void get_topology(
>       struct fs_topology      *ft,
>       int                     force_overwrite)
>  {
> -     if (!xi->disfile) {
> -             const char *dfile = xi->volname ? xi->volname : xi->dname;
> +     struct stat statbuf;
> +     char *dfile = xi->volname ? xi->volname : xi->dname;
>  
> +     /*
> +      * Don't call blkid for topology if this is a "-d file" target, or
> +      * if we've simply been pointed at a regular file.  platform_findsizes
> +      * will attempt to find the underlying sector size of the host fs.
> +      */
> +     if (xi->disfile ||
> +         (!stat(dfile, &statbuf) && S_ISREG(statbuf.st_mode))) {
> +             int fd;
> +             long long dummy;
> +
> +             fd = open(dfile, O_RDONLY);
> +             if (fd >= 0) {
> +                     platform_findsizes(dfile, fd, &dummy, &ft->lsectorsize);
> +                     close(fd);
> +             }

The patch looks fine:

Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx>

It does look like we'd still be susceptible to error in a situation
where the file hasn't been created yet (which would occur in
libxfs_init()).

Brian

> +     } else {
>               blkid_get_topology(dfile, &ft->dsunit, &ft->dswidth,
>                                  &ft->lsectorsize, &ft->psectorsize,
>                                  force_overwrite);
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs

<Prev in Thread] Current Thread [Next in Thread>