From nobody@FreeBSD.org  Thu May 10 18:34:38 2012
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id 3CA6B1065672
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 10 May 2012 18:34:38 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id 27B1D8FC21
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 10 May 2012 18:34:38 +0000 (UTC)
Received: from red.freebsd.org (localhost [127.0.0.1])
	by red.freebsd.org (8.14.4/8.14.4) with ESMTP id q4AIYcdk073652
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 10 May 2012 18:34:38 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.4/8.14.4/Submit) id q4AIYb64073617;
	Thu, 10 May 2012 18:34:37 GMT
	(envelope-from nobody)
Message-Id: <201205101834.q4AIYb64073617@red.freebsd.org>
Date: Thu, 10 May 2012 18:34:37 GMT
From: Shesha Sreenivasamurthy <sheshas@gmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: makefs does not create sparse file
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         167779
>Category:       bin
>Synopsis:       makefs does not create sparse file
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    hrs
>State:          patched
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu May 10 18:40:13 UTC 2012
>Closed-Date:    
>Last-Modified:  Wed Aug 22 06:42:44 UTC 2012
>Originator:     Shesha Sreenivasamurthy
>Release:        freebsd 9.0
>Organization:
Juniper Networks
>Environment:
>Description:
When a file system is laid out using makefs, then it zeros out the size of the file specified. This is not essentially needed. We can just create a container, so that the file thus created is sparse. This is particularly helpful we we are creating a disk image for a VM (Virtual Machine). This,

 1. It reduces the creation time significantly.
 2. Copying around is less time consuming (Tools like rsync and cp can deal efficiently with sparse files)
 3. Easily fits the image into a CD without additional processing like 'cp --sparse=Always' etc.
>How-To-Repeat:
Just create a filesystem using makefs by specifying a file size:

makefs -t ffs -s 4G -o version=1 <filename> <dirname>

'du -sh' as well as 'ls -lh' on the file thus created shows 4GB.
>Fix:
Add another option '-p' for sparse and seek to the size instead of filling with zeros.

Patch attached with submission follows:

*** usr/src/usr.sbin/makefs/makefs.c	2012-04-22 22:38:49.000000000 -0700
--- ../9/usr/src/usr.sbin/makefs/makefs.c	2012-01-02 19:25:41.000000000 -0800
***************
*** 112,118 ****
  	start_time.tv_sec = start.tv_sec;
  	start_time.tv_nsec = start.tv_usec * 1000;
  
! 	while ((ch = getopt(argc, argv, "B:b:d:f:F:M:m:N:o:s:S:t:xp")) != -1) {
  		switch (ch) {
  
  		case 'B':
--- 112,118 ----
  	start_time.tv_sec = start.tv_sec;
  	start_time.tv_nsec = start.tv_usec * 1000;
  
! 	while ((ch = getopt(argc, argv, "B:b:d:f:F:M:m:N:o:s:S:t:x")) != -1) {
  		switch (ch) {
  
  		case 'B':
***************
*** 224,232 ****
  		case 'x':
  			fsoptions.onlyspec = 1;
  			break;
! 		case 'p':
! 			fsoptions.sparse = 1;
! 			break;
  		case '?':
  		default:
  			usage();
--- 224,230 ----
  		case 'x':
  			fsoptions.onlyspec = 1;
  			break;
! 
  		case '?':
  		default:
  			usage();
***************
*** 337,343 ****
  	fprintf(stderr,
  "usage: %s [-t fs-type] [-o fs-options] [-d debug-mask] [-B endian]\n"
  "\t[-S sector-size] [-M minimum-size] [-m maximum-size] [-s image-size]\n"
! "\t[-b free-blocks] [-f free-files] [-F mtree-specfile] [-x] [-p sparse]\n"
  "\t[-N userdb-dir] image-file directory | manifest\n",
  	    prog);
  	exit(1);
--- 335,341 ----
  	fprintf(stderr,
  "usage: %s [-t fs-type] [-o fs-options] [-d debug-mask] [-B endian]\n"
  "\t[-S sector-size] [-M minimum-size] [-m maximum-size] [-s image-size]\n"
! "\t[-b free-blocks] [-f free-files] [-F mtree-specfile] [-x]\n"
  "\t[-N userdb-dir] image-file directory | manifest\n",
  	    prog);
  	exit(1);
*** usr/src/usr.sbin/makefs/makefs.h	2012-04-22 22:49:25.000000000 -0700
--- ../9/usr/src/usr.sbin/makefs/makefs.h	2012-01-02 19:25:41.000000000 -0800
***************
*** 127,133 ****
  	int	freeblockpc;	/* free block % */
  	int	needswap;	/* non-zero if byte swapping needed */
  	int	sectorsize;	/* sector size */
- 	int	sparse;		/* sparse image, don't fill it with zeros */
  
  	void	*fs_specific;	/* File system specific additions. */
  } fsinfo_t;
--- 127,132 ----
*** usr/src/usr.sbin/makefs/ffs.c	2012-04-30 16:06:01.715365000 -0700
--- ../9/usr/src/usr.sbin/makefs/ffs.c	2012-01-02 19:25:41.000000000 -0800
***************
*** 493,508 ****
  		bufsize = sfs.f_iosize;
  #endif
  	bufrem = fsopts->size;
- 
- 	if (fsopts->sparse) {
- 		if (lseek(fsopts->fd, bufrem - bufsize, SEEK_SET) == -1) {
- 			printf ("ERROR in lseek. Sparse option disabled\n");
- 			fsopts->sparse = 0;
- 		} else {
- 			bufrem = bufsize; /* Seek to end and write one block */
- 		}
- 	}
- 
  	if (debug & DEBUG_FS_CREATE_IMAGE)
  		printf(
  		    "zero-ing image `%s', %lld sectors, using %d byte chunks\n",
--- 493,498 ----


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-standards->hrs 
Responsible-Changed-By: hrs 
Responsible-Changed-When: Thu May 10 18:44:10 UTC 2012 
Responsible-Changed-Why:  
I'll take this. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=167779 

From: Shesha Sreenivasamurthy <sheshas@gmail.com>
To: bug-followup@FreeBSD.org
Cc: Eitan Adler <lists@eitanadler.com>
Subject: Re: standards/167779: makefs does not create sparse file
Date: Thu, 10 May 2012 15:57:45 -0700

 --bcaec54eef20512fb004bfb68cd1
 Content-Type: multipart/alternative; boundary=bcaec54eef20512fad04bfb68ccf
 
 --bcaec54eef20512fad04bfb68ccf
 Content-Type: text/plain; charset=ISO-8859-1
 
 Here it is.
 
 
 On Thu, May 10, 2012 at 3:48 PM, Eitan Adler <lists@eitanadler.com> wrote:
 
 > Can you reply to this PR with a unified diff instead of a context one
 > please?
 > (use diff -u)
 >
 > On 10 May 2012 14:34, Shesha Sreenivasamurthy <sheshas@gmail.com> wrote:
 > >
 > >>Number:         167779
 > >>Category:       standards
 > >>Synopsis:       makefs does not create sparse file
 >
 > --
 > Eitan Adler
 >
 
 --bcaec54eef20512fad04bfb68ccf
 Content-Type: text/html; charset=ISO-8859-1
 Content-Transfer-Encoding: quoted-printable
 
 Here it is.<div><br><br><div class=3D"gmail_quote">On Thu, May 10, 2012 at =
 3:48 PM, Eitan Adler <span dir=3D"ltr">&lt;<a href=3D"mailto:lists@eitanadl=
 er.com" target=3D"_blank">lists@eitanadler.com</a>&gt;</span> wrote:<br><bl=
 ockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #=
 ccc solid;padding-left:1ex">
 Can you reply to this PR with a unified diff instead of a context one pleas=
 e?<br>
 (use diff -u)<br>
 <br>
 On 10 May 2012 14:34, Shesha Sreenivasamurthy &lt;<a href=3D"mailto:sheshas=
 @gmail.com">sheshas@gmail.com</a>&gt; wrote:<br>
 &gt;<br>
 &gt;&gt;Number: =A0 =A0 =A0 =A0 167779<br>
 &gt;&gt;Category: =A0 =A0 =A0 standards<br>
 <div class=3D"HOEnZb"><div class=3D"h5">&gt;&gt;Synopsis: =A0 =A0 =A0 makef=
 s does not create sparse file<br>
 <br>
 </div></div><span class=3D"HOEnZb"><font color=3D"#888888">--<br>
 Eitan Adler<br>
 </font></span></blockquote></div><br></div>
 
 --bcaec54eef20512fad04bfb68ccf--
 --bcaec54eef20512fb004bfb68cd1
 Content-Type: text/plain; charset=US-ASCII; name="makefs_unified_patch.txt"
 Content-Disposition: attachment; filename="makefs_unified_patch.txt"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_h22f3p320
 
 LS0tIC4uLzkvdXNyL3NyYy91c3Iuc2Jpbi9tYWtlZnMvbWFrZWZzLmMJMjAxMi0wMS0wMiAxOToy
 NTo0MS4wMDAwMDAwMDAgLTA4MDAKKysrIHVzci9zcmMvdXNyLnNiaW4vbWFrZWZzL21ha2Vmcy5j
 CTIwMTItMDQtMjIgMjI6Mzg6NDkuMDAwMDAwMDAwIC0wNzAwCkBAIC0xMTIsNyArMTEyLDcgQEAK
 IAlzdGFydF90aW1lLnR2X3NlYyA9IHN0YXJ0LnR2X3NlYzsKIAlzdGFydF90aW1lLnR2X25zZWMg
 PSBzdGFydC50dl91c2VjICogMTAwMDsKIAotCXdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJn
 diwgIkI6YjpkOmY6RjpNOm06TjpvOnM6Uzp0OngiKSkgIT0gLTEpIHsKKwl3aGlsZSAoKGNoID0g
 Z2V0b3B0KGFyZ2MsIGFyZ3YsICJCOmI6ZDpmOkY6TTptOk46bzpzOlM6dDp4cCIpKSAhPSAtMSkg
 ewogCQlzd2l0Y2ggKGNoKSB7CiAKIAkJY2FzZSAnQic6CkBAIC0yMjQsNyArMjI0LDkgQEAKIAkJ
 Y2FzZSAneCc6CiAJCQlmc29wdGlvbnMub25seXNwZWMgPSAxOwogCQkJYnJlYWs7Ci0KKwkJY2Fz
 ZSAncCc6CisJCQlmc29wdGlvbnMuc3BhcnNlID0gMTsKKwkJCWJyZWFrOwogCQljYXNlICc/JzoK
 IAkJZGVmYXVsdDoKIAkJCXVzYWdlKCk7CkBAIC0zMzUsNyArMzM3LDcgQEAKIAlmcHJpbnRmKHN0
 ZGVyciwKICJ1c2FnZTogJXMgWy10IGZzLXR5cGVdIFstbyBmcy1vcHRpb25zXSBbLWQgZGVidWct
 bWFza10gWy1CIGVuZGlhbl1cbiIKICJcdFstUyBzZWN0b3Itc2l6ZV0gWy1NIG1pbmltdW0tc2l6
 ZV0gWy1tIG1heGltdW0tc2l6ZV0gWy1zIGltYWdlLXNpemVdXG4iCi0iXHRbLWIgZnJlZS1ibG9j
 a3NdIFstZiBmcmVlLWZpbGVzXSBbLUYgbXRyZWUtc3BlY2ZpbGVdIFsteF1cbiIKKyJcdFstYiBm
 cmVlLWJsb2Nrc10gWy1mIGZyZWUtZmlsZXNdIFstRiBtdHJlZS1zcGVjZmlsZV0gWy14XSBbLXAg
 c3BhcnNlXVxuIgogIlx0Wy1OIHVzZXJkYi1kaXJdIGltYWdlLWZpbGUgZGlyZWN0b3J5IHwgbWFu
 aWZlc3RcbiIsCiAJICAgIHByb2cpOwogCWV4aXQoMSk7Ci0tLSAuLi85L3Vzci9zcmMvdXNyLnNi
 aW4vbWFrZWZzL21ha2Vmcy5oCTIwMTItMDEtMDIgMTk6MjU6NDEuMDAwMDAwMDAwIC0wODAwCisr
 KyB1c3Ivc3JjL3Vzci5zYmluL21ha2Vmcy9tYWtlZnMuaAkyMDEyLTA0LTIyIDIyOjQ5OjI1LjAw
 MDAwMDAwMCAtMDcwMApAQCAtMTI3LDYgKzEyNyw3IEBACiAJaW50CWZyZWVibG9ja3BjOwkvKiBm
 cmVlIGJsb2NrICUgKi8KIAlpbnQJbmVlZHN3YXA7CS8qIG5vbi16ZXJvIGlmIGJ5dGUgc3dhcHBp
 bmcgbmVlZGVkICovCiAJaW50CXNlY3RvcnNpemU7CS8qIHNlY3RvciBzaXplICovCisJaW50CXNw
 YXJzZTsJCS8qIHNwYXJzZSBpbWFnZSwgZG9uJ3QgZmlsbCBpdCB3aXRoIHplcm9zICovCiAKIAl2
 b2lkCSpmc19zcGVjaWZpYzsJLyogRmlsZSBzeXN0ZW0gc3BlY2lmaWMgYWRkaXRpb25zLiAqLwog
 fSBmc2luZm9fdDsKLS0tIC4uLzkvdXNyL3NyYy91c3Iuc2Jpbi9tYWtlZnMvZmZzLmMJMjAxMi0w
 MS0wMiAxOToyNTo0MS4wMDAwMDAwMDAgLTA4MDAKKysrIHVzci9zcmMvdXNyLnNiaW4vbWFrZWZz
 L2Zmcy5jCTIwMTItMDQtMzAgMTY6MDY6MDEuNzE1MzY1MDAwIC0wNzAwCkBAIC00OTMsNiArNDkz
 LDE2IEBACiAJCWJ1ZnNpemUgPSBzZnMuZl9pb3NpemU7CiAjZW5kaWYKIAlidWZyZW0gPSBmc29w
 dHMtPnNpemU7CisKKwlpZiAoZnNvcHRzLT5zcGFyc2UpIHsKKwkJaWYgKGxzZWVrKGZzb3B0cy0+
 ZmQsIGJ1ZnJlbSAtIGJ1ZnNpemUsIFNFRUtfU0VUKSA9PSAtMSkgeworCQkJcHJpbnRmICgiRVJS
 T1IgaW4gbHNlZWsuIFNwYXJzZSBvcHRpb24gZGlzYWJsZWRcbiIpOworCQkJZnNvcHRzLT5zcGFy
 c2UgPSAwOworCQl9IGVsc2UgeworCQkJYnVmcmVtID0gYnVmc2l6ZTsgLyogU2VlayB0byBlbmQg
 YW5kIHdyaXRlIG9uZSBibG9jayAqLworCQl9CisJfQorCiAJaWYgKGRlYnVnICYgREVCVUdfRlNf
 Q1JFQVRFX0lNQUdFKQogCQlwcmludGYoCiAJCSAgICAiemVyby1pbmcgaW1hZ2UgYCVzJywgJWxs
 ZCBzZWN0b3JzLCB1c2luZyAlZCBieXRlIGNodW5rc1xuIiwK
 --bcaec54eef20512fb004bfb68cd1--

From: Marc Olzheim <marcolz@stack.nl>
To: bug-followup@FreeBSD.org
Cc: sheshas@gmail.com
Subject: Re: bin/167779: makefs does not create sparse file
Date: Fri, 11 May 2012 21:42:00 +0200

 --ZPt4rx8FFjLCG7dd
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 Some comments:
 
 On the negative effects of sparse files a backing store for a filesystem:
 
 1. Mind the effects that happen when the underlying filesystem/device is
 full and a sparse block cannot be claimed.
 2. Mind the performance impact of linearly accessing non-linearly
 allocated blocks in the sparse file (probably less of a problem in
 practice than in theory).
 
 Maybe some of this should be in the CAVEAT of the man page.
 
 On the patch:
 There is no need to write (and thus allocate) a block at the end of the
 file; truncating it at the desired size is enough.
 
 Marc
 
 --ZPt4rx8FFjLCG7dd
 Content-Type: application/pgp-signature; name="signature.asc"
 Content-Description: Digital signature
 Content-Disposition: inline
 
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.10 (GNU/Linux)
 
 iEYEARECAAYFAk+ta4gACgkQezjnobFOgrEXWgCfU5XCPs/eJ8Y4HemlQ+SVI9zA
 NJoAoK5kVhgp1LpF0D6XOQPNvWlLgYRX
 =+f5H
 -----END PGP SIGNATURE-----
 
 --ZPt4rx8FFjLCG7dd--

From: Shesha Sreenivasamurthy <sheshas@gmail.com>
To: bug-followup@freebsd.org
Cc: Marc Olzheim <marcolz@stack.nl>
Subject: Re: bin/167779: makefs does not create sparse file
Date: Fri, 11 May 2012 21:53:25 -0700

 --f46d0430855a13330d04bfcfa211
 Content-Type: multipart/alternative; boundary=f46d0430855a13330904bfcfa20f
 
 --f46d0430855a13330904bfcfa20f
 Content-Type: text/plain; charset=ISO-8859-1
 
 I agree Marc there are caveats. However if one needs a sparse file, the
 option should be there. Here is the patch with your suggested changes.
 
 On Fri, May 11, 2012 at 12:42 PM, Marc Olzheim <marcolz@stack.nl> wrote:
 
 > Some comments:
 >
 > On the negative effects of sparse files a backing store for a filesystem:
 >
 > 1. Mind the effects that happen when the underlying filesystem/device is
 > full and a sparse block cannot be claimed.
 > 2. Mind the performance impact of linearly accessing non-linearly
 > allocated blocks in the sparse file (probably less of a problem in
 > practice than in theory).
 >
 > Maybe some of this should be in the CAVEAT of the man page.
 >
 > On the patch:
 > There is no need to write (and thus allocate) a block at the end of the
 > file; truncating it at the desired size is enough.
 >
 > Marc
 >
 > -----BEGIN PGP SIGNATURE-----
 > Version: GnuPG v1.4.10 (GNU/Linux)
 >
 > iEYEARECAAYFAk+ta4gACgkQezjnobFOgrEXWgCfU5XCPs/eJ8Y4HemlQ+SVI9zA
 > NJoAoK5kVhgp1LpF0D6XOQPNvWlLgYRX
 > =+f5H
 > -----END PGP SIGNATURE-----
 >
 >
 
 --f46d0430855a13330904bfcfa20f
 Content-Type: text/html; charset=ISO-8859-1
 Content-Transfer-Encoding: quoted-printable
 
 I agree Marc there are caveats. However if one needs a sparse file, the opt=
 ion should be there. Here is the patch with your suggested changes.<br><br>=
 <div class=3D"gmail_quote">On Fri, May 11, 2012 at 12:42 PM, Marc Olzheim <=
 span dir=3D"ltr">&lt;<a href=3D"mailto:marcolz@stack.nl" target=3D"_blank">=
 marcolz@stack.nl</a>&gt;</span> wrote:<br>
 <blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
 x #ccc solid;padding-left:1ex">Some comments:<br>
 <br>
 On the negative effects of sparse files a backing store for a filesystem:<b=
 r>
 <br>
 1. Mind the effects that happen when the underlying filesystem/device is<br=
 >
 full and a sparse block cannot be claimed.<br>
 2. Mind the performance impact of linearly accessing non-linearly<br>
 allocated blocks in the sparse file (probably less of a problem in<br>
 practice than in theory).<br>
 <br>
 Maybe some of this should be in the CAVEAT of the man page.<br>
 <br>
 On the patch:<br>
 There is no need to write (and thus allocate) a block at the end of the<br>
 file; truncating it at the desired size is enough.<br>
 <span class=3D"HOEnZb"><font color=3D"#888888"><br>
 Marc<br>
 </font></span><br>-----BEGIN PGP SIGNATURE-----<br>
 Version: GnuPG v1.4.10 (GNU/Linux)<br>
 <br>
 iEYEARECAAYFAk+ta4gACgkQezjnobFOgrEXWgCfU5XCPs/eJ8Y4HemlQ+SVI9zA<br>
 NJoAoK5kVhgp1LpF0D6XOQPNvWlLgYRX<br>
 =3D+f5H<br>
 -----END PGP SIGNATURE-----<br>
 <br></blockquote></div><br>
 
 --f46d0430855a13330904bfcfa20f--
 --f46d0430855a13330d04bfcfa211
 Content-Type: text/plain; charset=US-ASCII; name="makefs_unified_patch.txt"
 Content-Disposition: attachment; filename="makefs_unified_patch.txt"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_h2478lo61
 
 LS0tIC4uLzkvdXNyL3NyYy91c3Iuc2Jpbi9tYWtlZnMvL21ha2Vmcy5jCTIwMTItMDEtMDIgMTk6
 MjU6NDEuMDAwMDAwMDAwIC0wODAwCisrKyB1c3Ivc3JjL3Vzci5zYmluL21ha2Vmcy8vbWFrZWZz
 LmMJMjAxMi0wNC0yMiAyMjozODo0OS4wMDAwMDAwMDAgLTA3MDAKQEAgLTExMiw3ICsxMTIsNyBA
 QAogCXN0YXJ0X3RpbWUudHZfc2VjID0gc3RhcnQudHZfc2VjOwogCXN0YXJ0X3RpbWUudHZfbnNl
 YyA9IHN0YXJ0LnR2X3VzZWMgKiAxMDAwOwogCi0Jd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBh
 cmd2LCAiQjpiOmQ6ZjpGOk06bTpOOm86czpTOnQ6eCIpKSAhPSAtMSkgeworCXdoaWxlICgoY2gg
 PSBnZXRvcHQoYXJnYywgYXJndiwgIkI6YjpkOmY6RjpNOm06TjpvOnM6Uzp0OnhwIikpICE9IC0x
 KSB7CiAJCXN3aXRjaCAoY2gpIHsKIAogCQljYXNlICdCJzoKQEAgLTIyNCw3ICsyMjQsOSBAQAog
 CQljYXNlICd4JzoKIAkJCWZzb3B0aW9ucy5vbmx5c3BlYyA9IDE7CiAJCQlicmVhazsKLQorCQlj
 YXNlICdwJzoKKwkJCWZzb3B0aW9ucy5zcGFyc2UgPSAxOworCQkJYnJlYWs7CiAJCWNhc2UgJz8n
 OgogCQlkZWZhdWx0OgogCQkJdXNhZ2UoKTsKQEAgLTMzNSw3ICszMzcsNyBAQAogCWZwcmludGYo
 c3RkZXJyLAogInVzYWdlOiAlcyBbLXQgZnMtdHlwZV0gWy1vIGZzLW9wdGlvbnNdIFstZCBkZWJ1
 Zy1tYXNrXSBbLUIgZW5kaWFuXVxuIgogIlx0Wy1TIHNlY3Rvci1zaXplXSBbLU0gbWluaW11bS1z
 aXplXSBbLW0gbWF4aW11bS1zaXplXSBbLXMgaW1hZ2Utc2l6ZV1cbiIKLSJcdFstYiBmcmVlLWJs
 b2Nrc10gWy1mIGZyZWUtZmlsZXNdIFstRiBtdHJlZS1zcGVjZmlsZV0gWy14XVxuIgorIlx0Wy1i
 IGZyZWUtYmxvY2tzXSBbLWYgZnJlZS1maWxlc10gWy1GIG10cmVlLXNwZWNmaWxlXSBbLXhdIFst
 cCBzcGFyc2VdXG4iCiAiXHRbLU4gdXNlcmRiLWRpcl0gaW1hZ2UtZmlsZSBkaXJlY3RvcnkgfCBt
 YW5pZmVzdFxuIiwKIAkgICAgcHJvZyk7CiAJZXhpdCgxKTsKLS0tIC4uLzkvdXNyL3NyYy91c3Iu
 c2Jpbi9tYWtlZnMvL21ha2Vmcy5oCTIwMTItMDEtMDIgMTk6MjU6NDEuMDAwMDAwMDAwIC0wODAw
 CisrKyB1c3Ivc3JjL3Vzci5zYmluL21ha2Vmcy8vbWFrZWZzLmgJMjAxMi0wNC0yMiAyMjo0OToy
 NS4wMDAwMDAwMDAgLTA3MDAKQEAgLTEyNyw2ICsxMjcsNyBAQAogCWludAlmcmVlYmxvY2twYzsJ
 LyogZnJlZSBibG9jayAlICovCiAJaW50CW5lZWRzd2FwOwkvKiBub24temVybyBpZiBieXRlIHN3
 YXBwaW5nIG5lZWRlZCAqLwogCWludAlzZWN0b3JzaXplOwkvKiBzZWN0b3Igc2l6ZSAqLworCWlu
 dAlzcGFyc2U7CQkvKiBzcGFyc2UgaW1hZ2UsIGRvbid0IGZpbGwgaXQgd2l0aCB6ZXJvcyAqLwog
 CiAJdm9pZAkqZnNfc3BlY2lmaWM7CS8qIEZpbGUgc3lzdGVtIHNwZWNpZmljIGFkZGl0aW9ucy4g
 Ki8KIH0gZnNpbmZvX3Q7Ci0tLSAuLi85L3Vzci9zcmMvdXNyLnNiaW4vbWFrZWZzLy9mZnMuYwky
 MDEyLTAxLTAyIDE5OjI1OjQxLjAwMDAwMDAwMCAtMDgwMAorKysgdXNyL3NyYy91c3Iuc2Jpbi9t
 YWtlZnMvL2Zmcy5jCTIwMTItMDUtMTEgMjE6NDY6MzUuMjM3MjczMDAwIC0wNzAwCkBAIC00OTMs
 MTEgKzQ5MywyMiBAQAogCQlidWZzaXplID0gc2ZzLmZfaW9zaXplOwogI2VuZGlmCiAJYnVmcmVt
 ID0gZnNvcHRzLT5zaXplOwotCWlmIChkZWJ1ZyAmIERFQlVHX0ZTX0NSRUFURV9JTUFHRSkKKwor
 CWlmIChmc29wdHMtPnNwYXJzZSkgeworCQlpZiAoZnRydW5jYXRlKGZzb3B0cy0+ZmQsIGJ1ZnJl
 bSkgPT0gLTEpIHsKKwkJCXByaW50ZiAoIkVSUk9SIGluIGxzZWVrLiBTcGFyc2Ugb3B0aW9uIGRp
 c2FibGVkXG4iKTsKKwkJCWZzb3B0cy0+c3BhcnNlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWJ1ZnJl
 bSA9IDA7IC8qIEZpbGUgdHJ1bmNhdGVkIGF0IGJ1ZnJlbS4gUmVtYWluaW5nIGlzIDAgKi8KKwkJ
 CWJ1ZiA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAoKGRlYnVnICYgREVCVUdfRlNfQ1JFQVRFX0lN
 QUdFKSAmJiBmc29wdHMtPnNwYXJzZSA9PSAwKQogCQlwcmludGYoCiAJCSAgICAiemVyby1pbmcg
 aW1hZ2UgYCVzJywgJWxsZCBzZWN0b3JzLCB1c2luZyAlZCBieXRlIGNodW5rc1xuIiwKIAkJICAg
 IGltYWdlLCAobG9uZyBsb25nKWJ1ZnJlbSwgYnVmc2l6ZSk7Ci0JaWYgKChidWYgPSBjYWxsb2Mo
 MSwgYnVmc2l6ZSkpID09IE5VTEwpIHsKKwlpZiAoKGJ1ZnJlbSA+IDApICYmICgoYnVmID0gY2Fs
 bG9jKDEsIGJ1ZnNpemUpKSA9PSBOVUxMKSkgewogCQl3YXJuKCJDYW4ndCBjcmVhdGUgYnVmZmVy
 IGZvciBzZWN0b3IiKTsKIAkJcmV0dXJuICgtMSk7CiAJfQpAQCAtNTExLDcgKzUyMiw4IEBACiAJ
 CX0KIAkJYnVmcmVtIC09IGk7CiAJfQotCWZyZWUoYnVmKTsKKwlpZiAoYnVmKQorCQlmcmVlKGJ1
 Zik7CiAKIAkJLyogbWFrZSB0aGUgZmlsZSBzeXN0ZW0gKi8KIAlpZiAoZGVidWcgJiBERUJVR19G
 U19DUkVBVEVfSU1BR0UpCg==
 --f46d0430855a13330d04bfcfa211--

From: Shesha Sreenivasamurthy <sheshas@gmail.com>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/167779: makefs does not create sparse file
Date: Tue, 22 May 2012 22:09:27 -0700

 --f46d043bd6faaf39ea04c0ad2310
 Content-Type: multipart/alternative; boundary=f46d043bd6faaf39e604c0ad230e
 
 --f46d043bd6faaf39e604c0ad230e
 Content-Type: text/plain; charset=ISO-8859-1
 
 Line 52 of the patch, changed lseek to truncate.
 
 --f46d043bd6faaf39e604c0ad230e
 Content-Type: text/html; charset=ISO-8859-1
 
 Line 52 of the patch, changed lseek to truncate.
 
 --f46d043bd6faaf39e604c0ad230e--
 --f46d043bd6faaf39ea04c0ad2310
 Content-Type: text/plain; charset=US-ASCII; name="makefs_unified_patch.txt"
 Content-Disposition: attachment; filename="makefs_unified_patch.txt"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_h2jxncmi0
 
 LS0tIC4uLzkvdXNyL3NyYy91c3Iuc2Jpbi9tYWtlZnMvL21ha2Vmcy5jCTIwMTItMDEtMDIgMTk6
 MjU6NDEuMDAwMDAwMDAwIC0wODAwCisrKyB1c3Ivc3JjL3Vzci5zYmluL21ha2Vmcy8vbWFrZWZz
 LmMJMjAxMi0wNC0yMiAyMjozODo0OS4wMDAwMDAwMDAgLTA3MDAKQEAgLTExMiw3ICsxMTIsNyBA
 QAogCXN0YXJ0X3RpbWUudHZfc2VjID0gc3RhcnQudHZfc2VjOwogCXN0YXJ0X3RpbWUudHZfbnNl
 YyA9IHN0YXJ0LnR2X3VzZWMgKiAxMDAwOwogCi0Jd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBh
 cmd2LCAiQjpiOmQ6ZjpGOk06bTpOOm86czpTOnQ6eCIpKSAhPSAtMSkgeworCXdoaWxlICgoY2gg
 PSBnZXRvcHQoYXJnYywgYXJndiwgIkI6YjpkOmY6RjpNOm06TjpvOnM6Uzp0OnhwIikpICE9IC0x
 KSB7CiAJCXN3aXRjaCAoY2gpIHsKIAogCQljYXNlICdCJzoKQEAgLTIyNCw3ICsyMjQsOSBAQAog
 CQljYXNlICd4JzoKIAkJCWZzb3B0aW9ucy5vbmx5c3BlYyA9IDE7CiAJCQlicmVhazsKLQorCQlj
 YXNlICdwJzoKKwkJCWZzb3B0aW9ucy5zcGFyc2UgPSAxOworCQkJYnJlYWs7CiAJCWNhc2UgJz8n
 OgogCQlkZWZhdWx0OgogCQkJdXNhZ2UoKTsKQEAgLTMzNSw3ICszMzcsNyBAQAogCWZwcmludGYo
 c3RkZXJyLAogInVzYWdlOiAlcyBbLXQgZnMtdHlwZV0gWy1vIGZzLW9wdGlvbnNdIFstZCBkZWJ1
 Zy1tYXNrXSBbLUIgZW5kaWFuXVxuIgogIlx0Wy1TIHNlY3Rvci1zaXplXSBbLU0gbWluaW11bS1z
 aXplXSBbLW0gbWF4aW11bS1zaXplXSBbLXMgaW1hZ2Utc2l6ZV1cbiIKLSJcdFstYiBmcmVlLWJs
 b2Nrc10gWy1mIGZyZWUtZmlsZXNdIFstRiBtdHJlZS1zcGVjZmlsZV0gWy14XVxuIgorIlx0Wy1i
 IGZyZWUtYmxvY2tzXSBbLWYgZnJlZS1maWxlc10gWy1GIG10cmVlLXNwZWNmaWxlXSBbLXhdIFst
 cCBzcGFyc2VdXG4iCiAiXHRbLU4gdXNlcmRiLWRpcl0gaW1hZ2UtZmlsZSBkaXJlY3RvcnkgfCBt
 YW5pZmVzdFxuIiwKIAkgICAgcHJvZyk7CiAJZXhpdCgxKTsKLS0tIC4uLzkvdXNyL3NyYy91c3Iu
 c2Jpbi9tYWtlZnMvL21ha2Vmcy5oCTIwMTItMDEtMDIgMTk6MjU6NDEuMDAwMDAwMDAwIC0wODAw
 CisrKyB1c3Ivc3JjL3Vzci5zYmluL21ha2Vmcy8vbWFrZWZzLmgJMjAxMi0wNC0yMiAyMjo0OToy
 NS4wMDAwMDAwMDAgLTA3MDAKQEAgLTEyNyw2ICsxMjcsNyBAQAogCWludAlmcmVlYmxvY2twYzsJ
 LyogZnJlZSBibG9jayAlICovCiAJaW50CW5lZWRzd2FwOwkvKiBub24temVybyBpZiBieXRlIHN3
 YXBwaW5nIG5lZWRlZCAqLwogCWludAlzZWN0b3JzaXplOwkvKiBzZWN0b3Igc2l6ZSAqLworCWlu
 dAlzcGFyc2U7CQkvKiBzcGFyc2UgaW1hZ2UsIGRvbid0IGZpbGwgaXQgd2l0aCB6ZXJvcyAqLwog
 CiAJdm9pZAkqZnNfc3BlY2lmaWM7CS8qIEZpbGUgc3lzdGVtIHNwZWNpZmljIGFkZGl0aW9ucy4g
 Ki8KIH0gZnNpbmZvX3Q7Ci0tLSAuLi85L3Vzci9zcmMvdXNyLnNiaW4vbWFrZWZzLy9mZnMuYwky
 MDEyLTAxLTAyIDE5OjI1OjQxLjAwMDAwMDAwMCAtMDgwMAorKysgdXNyL3NyYy91c3Iuc2Jpbi9t
 YWtlZnMvL2Zmcy5jCTIwMTItMDUtMTEgMjE6NDY6MzUuMjM3MjczMDAwIC0wNzAwCkBAIC00OTMs
 MTEgKzQ5MywyMiBAQAogCQlidWZzaXplID0gc2ZzLmZfaW9zaXplOwogI2VuZGlmCiAJYnVmcmVt
 ID0gZnNvcHRzLT5zaXplOwotCWlmIChkZWJ1ZyAmIERFQlVHX0ZTX0NSRUFURV9JTUFHRSkKKwor
 CWlmIChmc29wdHMtPnNwYXJzZSkgeworCQlpZiAoZnRydW5jYXRlKGZzb3B0cy0+ZmQsIGJ1ZnJl
 bSkgPT0gLTEpIHsKKwkJCXByaW50ZiAoIkVSUk9SIGluIHRydW5jYXRlLiBTcGFyc2Ugb3B0aW9u
 IGRpc2FibGVkXG4iKTsKKwkJCWZzb3B0cy0+c3BhcnNlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWJ1
 ZnJlbSA9IDA7IC8qIEZpbGUgdHJ1bmNhdGVkIGF0IGJ1ZnJlbS4gUmVtYWluaW5nIGlzIDAgKi8K
 KwkJCWJ1ZiA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAoKGRlYnVnICYgREVCVUdfRlNfQ1JFQVRF
 X0lNQUdFKSAmJiBmc29wdHMtPnNwYXJzZSA9PSAwKQogCQlwcmludGYoCiAJCSAgICAiemVyby1p
 bmcgaW1hZ2UgYCVzJywgJWxsZCBzZWN0b3JzLCB1c2luZyAlZCBieXRlIGNodW5rc1xuIiwKIAkJ
 ICAgIGltYWdlLCAobG9uZyBsb25nKWJ1ZnJlbSwgYnVmc2l6ZSk7Ci0JaWYgKChidWYgPSBjYWxs
 b2MoMSwgYnVmc2l6ZSkpID09IE5VTEwpIHsKKwlpZiAoKGJ1ZnJlbSA+IDApICYmICgoYnVmID0g
 Y2FsbG9jKDEsIGJ1ZnNpemUpKSA9PSBOVUxMKSkgewogCQl3YXJuKCJDYW4ndCBjcmVhdGUgYnVm
 ZmVyIGZvciBzZWN0b3IiKTsKIAkJcmV0dXJuICgtMSk7CiAJfQpAQCAtNTExLDcgKzUyMiw4IEBA
 CiAJCX0KIAkJYnVmcmVtIC09IGk7CiAJfQotCWZyZWUoYnVmKTsKKwlpZiAoYnVmKQorCQlmcmVl
 KGJ1Zik7CiAKIAkJLyogbWFrZSB0aGUgZmlsZSBzeXN0ZW0gKi8KIAlpZiAoZGVidWcgJiBERUJV
 R19GU19DUkVBVEVfSU1BR0UpCg==
 --f46d043bd6faaf39ea04c0ad2310--

From: Shesha Sreenivasamurthy <sheshas@gmail.com>
To: bug-followup@freebsd.org
Cc:  
Subject: Re: standards/167779: makefs does not create sparse file
Date: Tue, 26 Jun 2012 13:54:04 -0700

 --14dae9d712c088e01104c3664c8c
 Content-Type: text/plain; charset=ISO-8859-1
 
 Hi,
   Any updates on this when this patch makes it to the main stream?
 
 Thanks,
 Shesha
 
 --14dae9d712c088e01104c3664c8c
 Content-Type: text/html; charset=ISO-8859-1
 Content-Transfer-Encoding: quoted-printable
 
 Hi,<div>=A0 Any updates on this when this patch makes it to the main stream=
 ?</div><div><br></div><div>Thanks,</div><div>Shesha</div>
 
 --14dae9d712c088e01104c3664c8c--

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/167779: commit references a PR
Date: Wed, 22 Aug 2012 06:37:54 +0000 (UTC)

 Author: hrs
 Date: Wed Aug 22 06:37:30 2012
 New Revision: 239562
 URL: http://svn.freebsd.org/changeset/base/239562
 
 Log:
   Add -p flag to create the image as a sparse file.
   
   Submitted by:	Shesha Sreenivasamurthy
   PR:		bin/167779
 
 Modified:
   head/usr.sbin/makefs/ffs.c
   head/usr.sbin/makefs/makefs.8
   head/usr.sbin/makefs/makefs.c
   head/usr.sbin/makefs/makefs.h
 
 Modified: head/usr.sbin/makefs/ffs.c
 ==============================================================================
 --- head/usr.sbin/makefs/ffs.c	Wed Aug 22 05:38:06 2012	(r239561)
 +++ head/usr.sbin/makefs/ffs.c	Wed Aug 22 06:37:30 2012	(r239562)
 @@ -493,13 +493,25 @@ ffs_create_image(const char *image, fsin
  		bufsize = sfs.f_iosize;
  #endif
  	bufrem = fsopts->size;
 -	if (debug & DEBUG_FS_CREATE_IMAGE)
 -		printf(
 -		    "zero-ing image `%s', %lld sectors, using %d byte chunks\n",
 -		    image, (long long)bufrem, bufsize);
 -	if ((buf = calloc(1, bufsize)) == NULL) {
 -		warn("Can't create buffer for sector");
 -		return (-1);
 +	if (fsopts->sparse) {
 +		if (ftruncate(fsopts->fd, bufrem) == -1) {
 +			warn("sparse option disabled.\n");
 +			fsopts->sparse = 0;
 +		}
 +	}
 +	if (fsopts->sparse) {
 +		/* File truncated at bufrem. Remaining is 0 */
 +		bufrem = 0;
 +		buf = NULL;
 +	} else {
 +		if (debug & DEBUG_FS_CREATE_IMAGE)
 +			printf("zero-ing image `%s', %lld sectors, "
 +			    "using %d byte chunks\n", image, (long long)bufrem,
 +			    bufsize);
 +		if ((buf = calloc(1, bufsize)) == NULL) {
 +			warn("Can't create buffer for sector");
 +			return (-1);
 +		}
  	}
  	while (bufrem > 0) {
  		i = write(fsopts->fd, buf, MIN(bufsize, bufrem));
 @@ -511,7 +523,8 @@ ffs_create_image(const char *image, fsin
  		}
  		bufrem -= i;
  	}
 -	free(buf);
 +	if (buf)
 +		free(buf);
  
  		/* make the file system */
  	if (debug & DEBUG_FS_CREATE_IMAGE)
 
 Modified: head/usr.sbin/makefs/makefs.8
 ==============================================================================
 --- head/usr.sbin/makefs/makefs.8	Wed Aug 22 05:38:06 2012	(r239561)
 +++ head/usr.sbin/makefs/makefs.8	Wed Aug 22 06:37:30 2012	(r239562)
 @@ -35,7 +35,7 @@
  .\"
  .\" $FreeBSD$
  .\"
 -.Dd January 30, 2012
 +.Dd August 22, 2012
  .Dt MAKEFS 8
  .Os
  .Sh NAME
 @@ -43,6 +43,7 @@
  .Nd create a file system image from a directory tree or a mtree manifest
  .Sh SYNOPSIS
  .Nm
 +.Op Fl p
  .Op Fl x
  .Op Fl B Ar byte-order
  .Op Fl b Ar free-blocks
 @@ -188,6 +189,8 @@ Set file system specific options.
  .Ar fs-options
  is a comma separated list of options.
  Valid file system specific options are detailed below.
 +.It Fl p 
 +Create the image as a sparse file.
  .It Fl S Ar sector-size
  Set the file system sector size to
  .Ar sector-size .
 
 Modified: head/usr.sbin/makefs/makefs.c
 ==============================================================================
 --- head/usr.sbin/makefs/makefs.c	Wed Aug 22 05:38:06 2012	(r239561)
 +++ head/usr.sbin/makefs/makefs.c	Wed Aug 22 06:37:30 2012	(r239562)
 @@ -112,7 +112,7 @@ main(int argc, char *argv[])
  	start_time.tv_sec = start.tv_sec;
  	start_time.tv_nsec = start.tv_usec * 1000;
  
 -	while ((ch = getopt(argc, argv, "B:b:d:f:F:M:m:N:o:s:S:t:x")) != -1) {
 +	while ((ch = getopt(argc, argv, "B:b:d:f:F:M:m:N:o:ps:S:t:x")) != -1) {
  		switch (ch) {
  
  		case 'B':
 @@ -199,6 +199,9 @@ main(int argc, char *argv[])
  			}
  			break;
  		}
 +		case 'p':
 +			fsoptions.sparse = 1;
 +			break;
  
  		case 's':
  			fsoptions.minsize = fsoptions.maxsize =
 @@ -346,7 +349,7 @@ usage(void)
  	fprintf(stderr,
  "usage: %s [-t fs-type] [-o fs-options] [-d debug-mask] [-B endian]\n"
  "\t[-S sector-size] [-M minimum-size] [-m maximum-size] [-s image-size]\n"
 -"\t[-b free-blocks] [-f free-files] [-F mtree-specfile] [-x]\n"
 +"\t[-b free-blocks] [-f free-files] [-F mtree-specfile] [-x] [-p]\n"
  "\t[-N userdb-dir] image-file directory | manifest [extra-directory ...]\n",
  	    prog);
  	exit(1);
 
 Modified: head/usr.sbin/makefs/makefs.h
 ==============================================================================
 --- head/usr.sbin/makefs/makefs.h	Wed Aug 22 05:38:06 2012	(r239561)
 +++ head/usr.sbin/makefs/makefs.h	Wed Aug 22 06:37:30 2012	(r239562)
 @@ -129,6 +129,7 @@ typedef struct {
  	int	freeblockpc;	/* free block % */
  	int	needswap;	/* non-zero if byte swapping needed */
  	int	sectorsize;	/* sector size */
 +	int	sparse;		/* sparse image, don't fill it with zeros */
  
  	void	*fs_specific;	/* File system specific additions. */
  } fsinfo_t;
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->patched 
State-Changed-By: hrs 
State-Changed-When: Wed Aug 22 06:42:29 UTC 2012 
State-Changed-Why:  
Committed the patch. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=167779 
>Unformatted:
