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 _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs