diff --git a/xfsprogs-3.1.0-mkfs-fixes.patch b/xfsprogs-3.1.0-mkfs-fixes.patch new file mode 100644 index 0000000..80fb909 --- /dev/null +++ b/xfsprogs-3.1.0-mkfs-fixes.patch @@ -0,0 +1,149 @@ +From: Eric Sandeen +Date: Fri, 15 Jan 2010 17:45:10 +0000 (-0600) +Subject: mkfs: fix mkfs sectorsize setting when blkid fails +X-Git-Url: http://git.kernel.org/?p=fs%2Fxfs%2Fxfsprogs-dev.git;a=commitdiff_plain;h=7355966f018edd0d56b47dc5d7bac7950ed49683 + +mkfs: fix mkfs sectorsize setting when blkid fails + +When trying to mkfs something that blkid doesn't grok: + +# mkfs.xfs fsfile +warning: unable to probe device toplology for device fsfile +illegal sector size 0 +Usage: mkfs.xfs +... + +mkfs fails. :( + +Signed-off-by: Eric Sandeen +Reviewed-by: Alex Elder +--- + +From: Eric Sandeen +Date: Fri, 15 Jan 2010 19:25:20 +0000 (-0600) +Subject: mkfs: fix mkfs.xfs -dfile,name=$NAME for new files +X-Git-Url: http://git.kernel.org/?p=fs%2Fxfs%2Fxfsprogs-dev.git;a=commitdiff_plain;h=063aab8b3b597d4714fee03a657c58906900cf8e + +mkfs: fix mkfs.xfs -dfile,name=$NAME for new files + +# /sbin/mkfs.xfs -dfile,name=grrr,size=100g +mkfs.xfs: Use the -f option to force overwrite. + +check_overwrite is failing, because blkid_new_probe_from_filename() +is failing, because the (new) image file is 0 length. + +It's easy to test for 0 length, and if found, there is +nothing to overwrite so return 0. + +Also, if testing itself failed for some reason, print +a message to that effect: + +# mkfs/mkfs.xfs -dfile,name=newfile,size=1g +mkfs.xfs: probe of newfile failed, cannot detect existing filesystem. +mkfs.xfs: Use the -f option to force overwrite. + +Signed-off-by: Eric Sandeen +Reviewed-by: Alex Elder +--- + +From: Eric Sandeen +Date: Sun, 17 Jan 2010 16:31:58 +0000 (-0600) +Subject: mkfs: get size of device properly +X-Git-Url: http://git.kernel.org/?p=fs%2Fxfs%2Fxfsprogs-dev.git;a=commitdiff_plain;h=d943b1140e566223bfd424ca4e24b3c1f3781037 + +mkfs: get size of device properly + +Test device node size properly in check_overwrite, st_size +is only valid for regular files. + +Signed-off-by: Eric Sandeen +Reviewed-by: Christoph Hellwig +--- + +Index: xfsprogs-3.1.0/mkfs/xfs_mkfs.c +=================================================================== +--- xfsprogs-3.1.0.orig/mkfs/xfs_mkfs.c ++++ xfsprogs-3.1.0/mkfs/xfs_mkfs.c +@@ -283,27 +283,52 @@ calc_stripe_factors( + } + + #ifdef ENABLE_BLKID ++/* ++ * Check for existing filesystem or partition table on device. ++ * Returns: ++ * 1 for existing fs or partition ++ * 0 for nothing found ++ * -1 for internal error ++ */ + static int + check_overwrite( + char *device) + { + const char *type; +- blkid_probe pr; +- int ret = 0; ++ blkid_probe pr = NULL; ++ int ret; ++ int fd; ++ long long size; ++ int bsz; + + if (!device || !*device) + return 0; + ++ ret = -1; /* will reset on success of all setup calls */ ++ ++ fd = open(device, O_RDONLY); ++ if (fd < 0) ++ goto out; ++ platform_findsizes(device, fd, &size, &bsz); ++ close(fd); ++ ++ /* nothing to overwrite on a 0-length device */ ++ if (size == 0) { ++ ret = 0; ++ goto out; ++ } ++ + pr = blkid_new_probe_from_filename(device); + if (!pr) +- return -1; ++ goto out; + + if (blkid_probe_enable_partitions(pr, 1)) +- goto out_free_probe; ++ goto out; + + if (blkid_do_fullprobe(pr)) +- goto out_free_probe; ++ goto out; + ++ ret = 0; + if (!blkid_probe_lookup_value(pr, "TYPE", &type, NULL)) { + fprintf(stderr, + _("%s: %s appears to contain an existing " +@@ -316,8 +341,13 @@ check_overwrite( + ret = 1; + } + +-out_free_probe: +- blkid_free_probe(pr); ++out: ++ if (pr) ++ blkid_free_probe(pr); ++ if (ret == -1) ++ fprintf(stderr, ++ _("%s: probe of %s failed, cannot detect " ++ "existing filesystem.\n"), progname, device); + return ret; + } + +@@ -1574,7 +1604,7 @@ main( + * Unless specified manually on the command line use the + * advertised sector size of the device. + */ +- sectorsize = ft.sectorsize; ++ sectorsize = ft.sectorsize ? ft.sectorsize : XFS_MIN_SECTORSIZE; + } + + if (ft.sectoralign || !ssflag) { diff --git a/xfsprogs.spec b/xfsprogs.spec index a6e439d..9f10bec 100644 --- a/xfsprogs.spec +++ b/xfsprogs.spec @@ -1,7 +1,7 @@ Summary: Utilities for managing the XFS filesystem Name: xfsprogs Version: 3.1.0 -Release: 1%{?dist} +Release: 2%{?dist} # Licensing based on generic "GNU GENERAL PUBLIC LICENSE" # in source, with no mention of version. # doc/COPYING file specifies what is GPL and what is LGPL @@ -18,8 +18,7 @@ Provides: xfs-cmds Obsoletes: xfs-cmds <= %{version} Conflicts: xfsdump < 3.0.1 -# Fix-ups for very latest glibc header posix conformance changes -Patch0: xfsprogs-3.1.0-glibc-fixes.patch +Patch0: xfsprogs-3.1.0-mkfs-fixes.patch %description A set of commands to use the XFS filesystem, including mkfs.xfs. @@ -192,9 +191,12 @@ rm -rf $RPM_BUILD_ROOT %{_includedir}/xfs/xfs_types.h %changelog +* Sun Jan 17 2010 Eric Sandeen 3.1.0-2 +- Post-release mkfs fixes (#555847) + * Wed Jan 13 2010 Eric Sandeen 3.1.0-1 - New upstream release -- Minor fixups for new glibc headers +- Fixes default mkfs.xfs on 4k sector device (#539553) * Tue Dec 08 2009 Eric Sandeen 3.0.3-5 - And finally, BuildRequire libblkid-devel