On 6/6/14, 10:21 AM, Brian Foster wrote: > 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()). Hm, let's see - the only way to have mkfs create the file is with the -d file,name=foo,size=bar invocation. Sprinkling some printf's into the if/else above, I see: # rm -f testfile # mkfs/mkfs.xfs -dfile,name=testfile,size=1g ** doing platform_findsizes ** meta-data=testfile isize=256 agcount=4, agsize=65536 blks ... so it looks like the file does get created before we get here. -Eric _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs