From nobody@FreeBSD.org  Sun Aug 23 17:52:40 2009
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id C63C2106568B
	for <freebsd-gnats-submit@FreeBSD.org>; Sun, 23 Aug 2009 17:52:40 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id B49E48FC1B
	for <freebsd-gnats-submit@FreeBSD.org>; Sun, 23 Aug 2009 17:52:40 +0000 (UTC)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.3/8.14.3) with ESMTP id n7NHqeG7095859
	for <freebsd-gnats-submit@FreeBSD.org>; Sun, 23 Aug 2009 17:52:40 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.3/8.14.3/Submit) id n7NHqe5g095858;
	Sun, 23 Aug 2009 17:52:40 GMT
	(envelope-from nobody)
Message-Id: <200908231752.n7NHqe5g095858@www.freebsd.org>
Date: Sun, 23 Aug 2009 17:52:40 GMT
From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: Minor cleanups to the sys/gnu/fs/ext2fs based on BSD Lite2
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         138109
>Category:       kern
>Synopsis:       [extfs] [patch] Minor cleanups to the sys/gnu/fs/ext2fs based on BSD Lite2
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-fs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Aug 23 18:00:12 UTC 2009
>Closed-Date:    Fri Jan 22 16:39:03 UTC 2010
>Last-Modified:  Fri Jan 22 16:39:03 UTC 2010
>Originator:     Pedro F. Giffuni
>Release:        FreeBSD-7.2-RELEASE
>Organization:
>Environment:
FreeBSD kakumen.cable.net.co 7.2-RELEASE FreeBSD 7.2-RELEASE #3: Tue Aug 18 22:42:27 COT 2009     pedro@kakumen.cable.net.co:/usr/src/sys/amd64/compile/GENERIC.Dell  amd64
>Description:
I have been looking at some of the FFS BSD-lite2 fixes to apply them to our ext2fs (based on an older FFS1 from BSD lites). This is helping getting some of the code more in sync with the NetBSD implementation.

I am still missing some bigger changes but for now here are pretty simple cleanups, based on these FFS changes:

ffs_inode.c
------------
Use the correct flags (IO_SYNC -> B_SYNC) when deciding to do a sync or
async write in the section that changes the filesize. The bug resulted
in the updates always being async.

ffs_vfsops.c
-------------
Speed up for vfs_bio -- addition of a routine bqrelse to greatly diminish
	overhead for merged cache.
>How-To-Repeat:

>Fix:
diff -ruN ext2fs.orig/ext2_inode.c ext2fs/ext2_inode.c
--- ext2fs.orig/ext2_inode.c	2009-08-18 20:32:13.000000000 -0500
+++ ext2fs/ext2_inode.c	2009-08-23 12:37:18.000000000 -0500
@@ -126,16 +126,16 @@
 	long count, nblocks, blocksreleased = 0;
 	int aflags, error, i, allerror;
 	off_t osize;
-/*
-printf("ext2_truncate called %d to %d\n", VTOI(ovp)->i_number, length);
-*/	/* 
+
+	/* 
 	 * negative file sizes will totally break the code below and
 	 * are not meaningful anyways.
+	 * XXX: We should check for  max file size here too.
 	 */
+	oip = VTOI(ovp);
 	if (length < 0)
-	    return EFBIG;
+	    return EINVAL;
 
-	oip = VTOI(ovp);
 	if (ovp->v_type == VLNK &&
 	    oip->i_size < ovp->v_mount->mnt_maxsymlinklen) {
 #ifdef DIAGNOSTIC
@@ -157,7 +157,7 @@
 	/*
 	 * Lengthen the size of the file. We must ensure that the
 	 * last byte of the file is allocated. Since the smallest
-	 * value of oszie is 0, length will be at least 1.
+	 * value of osize is 0, length will be at least 1.
 	 */
 	if (osize < length) {
 		if (length > oip->i_e2fs->fs_maxfilesize)
@@ -167,12 +167,13 @@
 		aflags = B_CLRBUF;
 		if (flags & IO_SYNC)
 			aflags |= B_SYNC;
-		vnode_pager_setsize(ovp, length);
-		if ((error = ext2_balloc(oip, lbn, offset + 1, cred, &bp,
-		    aflags)) != 0)
+		error = ext2_balloc(oip, lbn, offset + 1, cred,
+		    &bp, aflags);
+		if (error)
 			return (error);
 		oip->i_size = length;
-		if (aflags & IO_SYNC)
+		vnode_pager_setsize(ovp, length);
+		if (aflags & B_SYNC)
 			bwrite(bp);
 		else
 			bawrite(bp);
@@ -195,18 +196,20 @@
 		aflags = B_CLRBUF;
 		if (flags & IO_SYNC)
 			aflags |= B_SYNC;
-		if ((error = ext2_balloc(oip, lbn, offset, cred, &bp,
-		    aflags)) != 0)
+		ext2_balloc(oip, lbn, offset, cred, &bp,
+		    aflags)
+		if (error)
 			return (error);
 		oip->i_size = length;
 		size = blksize(fs, oip, lbn);
 		bzero((char *)bp->b_data + offset, (u_int)(size - offset));
 		allocbuf(bp, size);
-		if (aflags & IO_SYNC)
+		if (aflags & B_SYNC)
 			bwrite(bp);
 		else
 			bawrite(bp);
 	}
+	vnode_pager_setsize(ovp, length);
 	/*
 	 * Calculate index into inode's block list of
 	 * last direct and indirect blocks (if any)
diff -ruN ext2fs.orig/ext2_vfsops.c ext2fs/ext2_vfsops.c
--- ext2fs.orig/ext2_vfsops.c	2009-08-18 20:32:13.000000000 -0500
+++ ext2fs/ext2_vfsops.c	2009-08-23 12:40:27.000000000 -0500
@@ -171,10 +171,7 @@
 			flags = WRITECLOSE;
 			if (mp->mnt_flag & MNT_FORCE)
 				flags |= FORCECLOSE;
-			if (vfs_busy(mp, LK_NOWAIT, 0, td))
-				return (EBUSY);
 			error = ext2_flushfiles(mp, flags, td);
-			vfs_unbusy(mp, td);
 			if (!error && fs->s_wasvalid) {
 				fs->s_es->s_state |= EXT2_VALID_FS;
 				ext2_sbupdate(ump, MNT_WAIT);
@@ -496,10 +493,10 @@
  * Things to do to update the mount:
  *	1) invalidate all cached meta-data.
  *	2) re-read superblock from disk.
- *	3) re-read summary information from disk.
- *	4) invalidate all inactive vnodes.
- *	5) invalidate all cached file data.
- *	6) re-read inode data for all active vnodes.
+ *	3) (re-read summary information from disk.)
+ *	-  (invalidate all inactive vnodes.)
+ *	4) invalidate all cached file data.
+ *	5) re-read inode data for all active vnodes.
  */
 static int
 ext2_reload(struct mount *mp, struct thread *td)
@@ -1007,8 +1004,8 @@
 		 * still zero, it will be unlinked and returned to the free
 		 * list by vput().
 		 */
-		vput(vp);
 		brelse(bp);
+		vput(vp);
 		*vpp = NULL;
 		return (error);
 	}
@@ -1032,7 +1029,7 @@
 /*
 	ext2_print_inode(ip);
 */
-	brelse(bp);
+	bqrelse(bp);
 
 	/*
 	 * Initialize the vnode from the inode, check for aliases.


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-fs 
Responsible-Changed-By: remko 
Responsible-Changed-When: Sun Aug 23 18:38:42 UTC 2009 
Responsible-Changed-Why:  
reassign to -fs team. 

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

From: Aditya Sarawgi <sarawgi.aditya@gmail.com>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/138109: extfs: Minor cleanups to the sys/gnu/fs/ext2fs
	based on BSD Lite2
Date: Mon, 24 Aug 2009 03:45:46 +0530

 I have merged these changes in my perforce branch.
 Please refer http://p4db.freebsd.org/branchView.cgi?BRANCH=truncs_ext2fs
 
 
 Cheers,
 
 Aditya Sarawgi

From: Bruce Evans <brde@optusnet.com.au>
To: "Pedro F. Giffuni" <giffunip@tutopia.com>
Cc: freebsd-gnats-submit@FreeBSD.org
Subject: Re: kern/138109: Minor cleanups to the sys/gnu/fs/ext2fs based on
 BSD Lite2
Date: Mon, 24 Aug 2009 23:14:47 +1000 (EST)

 On Sun, 23 Aug 2009, Pedro F. Giffuni wrote:
 
 >> Description:
 > I have been looking at some of the FFS BSD-lite2 fixes to apply them to our ext2fs (based on an older FFS1 from BSD lites). This is helping getting some of the code more in sync with the NetBSD implementation.
 
 Please don't format mail for 200+ column terminals.
 
 > I am still missing some bigger changes but for now here are pretty simple cleanups, based on these FFS changes:
 >
 > ffs_inode.c
 > ------------
 > Use the correct flags (IO_SYNC -> B_SYNC) when deciding to do a sync or
 > async write in the section that changes the filesize. The bug resulted
 > in the updates always being async.
 
 I tested this a bit after you told me about it a few months ago.
 
 > ffs_vfsops.c
 > -------------
 > Speed up for vfs_bio -- addition of a routine bqrelse to greatly diminish
 > 	overhead for merged cache.
 
 Interesting.  I've used this for many years, but didn't notice it reducing
 overheads.
 
 The changes involving vnode_pager_setsize() seem to be bugs:
 
 >> How-To-Repeat:
 >
 >> Fix:
 > diff -ruN ext2fs.orig/ext2_inode.c ext2fs/ext2_inode.c
 > --- ext2fs.orig/ext2_inode.c	2009-08-18 20:32:13.000000000 -0500
 > +++ ext2fs/ext2_inode.c	2009-08-23 12:37:18.000000000 -0500
 > @@ -126,16 +126,16 @@
 > 	long count, nblocks, blocksreleased = 0;
 > 	int aflags, error, i, allerror;
 > 	off_t osize;
 > -/*
   -printf("ext2_truncate called %d to %d\n", VTOI(ovp)->i_number, length);
 > -*/	/*
 > +
 > +	/*
 > 	 * negative file sizes will totally break the code below and
 > 	 * are not meaningful anyways.
 > +	 * XXX: We should check for  max file size here too.
 > 	 */
 > +	oip = VTOI(ovp);
 > 	if (length < 0)
 > -	    return EFBIG;
 > +	    return EINVAL;
 
 Should also fix the style bugs (indentation, and missing parentheses).
 These style bugs are missing in the ffs version.
 
 >
 > -	oip = VTOI(ovp);
 > 	if (ovp->v_type == VLNK &&
 > 	    oip->i_size < ovp->v_mount->mnt_maxsymlinklen) {
 > #ifdef DIAGNOSTIC
 
 This code should be almost identical with that in ffs, and now almost is.
 Did you get if from FreeBSD or NetBSD?
 
 The comments in it don't seem necessary.  ffs doesn't have them.  Both
 check for maxfilesize, but only ffs does it at this point, before the
 VLNK code, but after the extended attributes code).  It may be technically
 correct to not check maxfilesize for either symlinks or extended attributes,
 since maxfilesize only applies to regular files, but maxfilesize should be
 larger so checking it first is harmless.  ffs is now inconsisent about this
 for symlinks versus extended attributes.
 
 FreeBSD history shows that it is ffs that has the misplaced check for
 maxfilesize.  Lite1 was just missing the check.  Lite2 added it where
 ext2fs has it now.  FreeBSD already had it when Lite2 was merged in
 ffs_inode.c 1.24.  FreeBSD had it up-front, and FreeBSD had the wrong
 error code value for the (length < 0) case (like ext2fs has now).
 Rev.1.24 merged Lite2 incompletely by fixing the error code but not
 moving the maxfilesize check.
 
 > ...
 > @@ -167,12 +167,13 @@
 > 		aflags = B_CLRBUF;
 > 		if (flags & IO_SYNC)
 > 			aflags |= B_SYNC;
 > -		vnode_pager_setsize(ovp, length);
 
 Moving this is dangerous.  It is inconsistent with ffs and seems wrong.
 Don't copy NetBSD for this.  dyson!@ had to fix many misplaced calls
 to vnode_pager_setsize().
 
 > -		if ((error = ext2_balloc(oip, lbn, offset + 1, cred, &bp,
 > -		    aflags)) != 0)
 > +		error = ext2_balloc(oip, lbn, offset + 1, cred,
 > +		    &bp, aflags);
 
 This line no longer needs splitting.
 
 > +		if (error)
 > 			return (error);
 
 Another old bug is not restoring the size on error.  This was fixed
 in ffs (but not here :-() just this year (ffs_inode.c 1.115).  Presumably
 the old code delayed the setting until the space was allocated to avoid
 having to clean up and/or to avoid having an inconsistent setting while
 allocating, but in FreeBSD it is necessary to increase the vm size while
 allocating.
 
 > 		oip->i_size = length;
 > -		if (aflags & IO_SYNC)
 > +		vnode_pager_setsize(ovp, length);
 
 Don't move this -- see above.
 
 > +		if (aflags & B_SYNC)
 > 			bwrite(bp);
 > 		else
 > 			bawrite(bp);
 > @@ -195,18 +196,20 @@
 > 		aflags = B_CLRBUF;
 > 		if (flags & IO_SYNC)
 > 			aflags |= B_SYNC;
 > -		if ((error = ext2_balloc(oip, lbn, offset, cred, &bp,
 > -		    aflags)) != 0)
 > +		ext2_balloc(oip, lbn, offset, cred, &bp,
 > +		    aflags)
 
 This line shouldn't be split, much more so than the one above.
 
 > +		if (error)
 > 			return (error);
 
 Another place that is missing restoring the vm size on error.
 
 > 		oip->i_size = length;
 > 		size = blksize(fs, oip, lbn);
 > 		bzero((char *)bp->b_data + offset, (u_int)(size - offset));
 > 		allocbuf(bp, size);
 > -		if (aflags & IO_SYNC)
 > +		if (aflags & B_SYNC)
 > 			bwrite(bp);
 > 		else
 > 			bawrite(bp);
 > 	}
 > +	vnode_pager_setsize(ovp, length);
 
 Don't move this...
 
 > 	/*
 > 	 * Calculate index into inode's block list of
 > 	 * last direct and indirect blocks (if any)
 > diff -ruN ext2fs.orig/ext2_vfsops.c ext2fs/ext2_vfsops.c
 > --- ext2fs.orig/ext2_vfsops.c	2009-08-18 20:32:13.000000000 -0500
 > +++ ext2fs/ext2_vfsops.c	2009-08-23 12:40:27.000000000 -0500
 > @@ -171,10 +171,7 @@
 > 			flags = WRITECLOSE;
 > 			if (mp->mnt_flag & MNT_FORCE)
 > 				flags |= FORCECLOSE;
 > -			if (vfs_busy(mp, LK_NOWAIT, 0, td))
 > -				return (EBUSY);
 > 			error = ext2_flushfiles(mp, flags, td);
 > -			vfs_unbusy(mp, td);
 > 			if (!error && fs->s_wasvalid) {
 > 				fs->s_es->s_state |= EXT2_VALID_FS;
 > 				ext2_sbupdate(ump, MNT_WAIT);
 
 Consistent with ffs, but I don't understand it.
 
 > @@ -496,10 +493,10 @@
 >  * Things to do to update the mount:
 >  *	1) invalidate all cached meta-data.
 >  *	2) re-read superblock from disk.
 > - *	3) re-read summary information from disk.
 > - *	4) invalidate all inactive vnodes.
 > - *	5) invalidate all cached file data.
 > - *	6) re-read inode data for all active vnodes.
 > + *	3) (re-read summary information from disk.)
 > + *	-  (invalidate all inactive vnodes.)
 > + *	4) invalidate all cached file data.
 > + *	5) re-read inode data for all active vnodes.
 >  */
 > static int
 > ext2_reload(struct mount *mp, struct thread *td)
 
 Don't renumber this.  The meaning of the parentheses is unclear.  IIRC,
 ext2fs doesn't do all the steps here, but it should.  Use descriptive
 comments instead of parentheses to say which ones.
 
 > @@ -1007,8 +1004,8 @@
 > 		 * still zero, it will be unlinked and returned to the free
 > 		 * list by vput().
 > 		 */
 > -		vput(vp);
 > 		brelse(bp);
 > +		vput(vp);
 > 		*vpp = NULL;
 > 		return (error);
 > 	}
 
 Consistent with ffs, and seems to be needed (not just a style fix).
 
 > @@ -1032,7 +1029,7 @@
 > /*
 > 	ext2_print_inode(ip);
 > */
 > -	brelse(bp);
 > +	bqrelse(bp);
 >
 > 	/*
 > 	 * Initialize the vnode from the inode, check for aliases.
 
 Though I use it, I'm not sure about the safety of this.
 
 Bruce

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: bug-followup@FreeBSD.org
Cc: Bruce Evans <brde@optusnet.com.au>
Subject: Re: kern/138109: [extfs] [patch] Minor cleanups to the sys/gnu/fs/ext2fs based on BSD Lite2
Date: Thu, 10 Sep 2009 12:28:17 -0700 (PDT)

 --0-1580472039-1252610897=:7136
 Content-Type: text/plain; charset=utf-8
 Content-Transfer-Encoding: quoted-printable
 
 Hello;=0A=0AI finally did a new sweep and attempted to clean the issues not=
 ed by Bruce. I also added a couple of patches of his authorship(issue with =
 a goal=3D=3D0 and the clustering cleanups).=0AI tried to make the BSD licen=
 sed code (in particular *fs_inode.c) similar to the PRE_SOFTUPDATE tag.=0A=
 =0AThe patch compiles on my system and a similar patch has been tested by A=
 ditya Sarawgi for his Google SoC project.=0A=0A=0A      
 --0-1580472039-1252610897=:7136
 Content-Type: application/octet-stream; name=patch-ext2fs
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename="patch-ext2fs"
 
 ZGlmZiAtdSBleHQyZnMub3JpZy9leHQyX2FsbG9jLmMgZXh0MmZzL2V4dDJf
 YWxsb2MuYwotLS0gZXh0MmZzLm9yaWcvZXh0Ml9hbGxvYy5jCTIwMDktMDkt
 MTAgMTM6MDU6MzEuMDAwMDAwMDAwICswMDAwCisrKyBleHQyZnMvZXh0Ml9h
 bGxvYy5jCTIwMDktMDktMTAgMTM6NDE6MDkuMDAwMDAwMDAwICswMDAwCkBA
 IC00NDEsNyArNDQxLDcgQEAKIAkvKiBpZiB0aGUgbmV4dCBibG9jayBpcyBh
 Y3R1YWxseSB3aGF0IHdlIHRob3VnaHQgaXQgaXMsCiAJICAgdGhlbiBzZXQg
 dGhlIGdvYWwgdG8gd2hhdCB3ZSB0aG91Z2h0IGl0IHNob3VsZCBiZQogCSov
 Ci0JaWYoaXAtPmlfbmV4dF9hbGxvY19ibG9jayA9PSBsYm4pCisJaWYoaXAt
 PmlfbmV4dF9hbGxvY19ibG9jayA9PSBsYm4gJiYgaXAtPmlfbmV4dF9hbGxv
 Y19nb2FsICE9IDApCiAJCXJldHVybiBpcC0+aV9uZXh0X2FsbG9jX2dvYWw7
 CiAKIAkvKiBub3cgY2hlY2sgd2hldGhlciB3ZSB3ZXJlIHByb3ZpZGVkIHdp
 dGggYW4gYXJyYXkgdGhhdCBiYXNpY2FsbHkKZGlmZiAtdSBleHQyZnMub3Jp
 Zy9leHQyX2lub2RlLmMgZXh0MmZzL2V4dDJfaW5vZGUuYwotLS0gZXh0MmZz
 Lm9yaWcvZXh0Ml9pbm9kZS5jCTIwMDktMDktMTAgMTM6MDU6MzEuMDAwMDAw
 MDAwICswMDAwCisrKyBleHQyZnMvZXh0Ml9pbm9kZS5jCTIwMDktMDktMTAg
 MTM6NDI6MjEuMDAwMDAwMDAwICswMDAwCkBAIC0xMjYsMTYgKzEyNiwxMSBA
 QAogCWxvbmcgY291bnQsIG5ibG9ja3MsIGJsb2Nrc3JlbGVhc2VkID0gMDsK
 IAlpbnQgYWZsYWdzLCBlcnJvciwgaSwgYWxsZXJyb3I7CiAJb2ZmX3Qgb3Np
 emU7Ci0vKgotcHJpbnRmKCJleHQyX3RydW5jYXRlIGNhbGxlZCAlZCB0byAl
 ZFxuIiwgVlRPSShvdnApLT5pX251bWJlciwgbGVuZ3RoKTsKLSovCS8qIAot
 CSAqIG5lZ2F0aXZlIGZpbGUgc2l6ZXMgd2lsbCB0b3RhbGx5IGJyZWFrIHRo
 ZSBjb2RlIGJlbG93IGFuZAotCSAqIGFyZSBub3QgbWVhbmluZ2Z1bCBhbnl3
 YXlzLgotCSAqLworCisJb2lwID0gVlRPSShvdnApOwkgCiAJaWYgKGxlbmd0
 aCA8IDApCi0JICAgIHJldHVybiBFRkJJRzsKKwkJcmV0dXJuIChFSU5WQUwp
 OwogCi0Jb2lwID0gVlRPSShvdnApOwogCWlmIChvdnAtPnZfdHlwZSA9PSBW
 TE5LICYmCiAJICAgIG9pcC0+aV9zaXplIDwgb3ZwLT52X21vdW50LT5tbnRf
 bWF4c3ltbGlua2xlbikgewogI2lmZGVmIERJQUdOT1NUSUMKQEAgLTE1Nywy
 MyArMTUyLDI5IEBACiAJLyoKIAkgKiBMZW5ndGhlbiB0aGUgc2l6ZSBvZiB0
 aGUgZmlsZS4gV2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUKIAkgKiBsYXN0IGJ5
 dGUgb2YgdGhlIGZpbGUgaXMgYWxsb2NhdGVkLiBTaW5jZSB0aGUgc21hbGxl
 c3QKLQkgKiB2YWx1ZSBvZiBvc3ppZSBpcyAwLCBsZW5ndGggd2lsbCBiZSBh
 dCBsZWFzdCAxLgorCSAqIHZhbHVlIG9mIG9zaXplIGlzIDAsIGxlbmd0aCB3
 aWxsIGJlIGF0IGxlYXN0IDEuCiAJICovCiAJaWYgKG9zaXplIDwgbGVuZ3Ro
 KSB7CiAJCWlmIChsZW5ndGggPiBvaXAtPmlfZTJmcy0+ZnNfbWF4ZmlsZXNp
 emUpCiAJCQlyZXR1cm4gKEVGQklHKTsKKwkJdm5vZGVfcGFnZXJfc2V0c2l6
 ZShvdnAsIGxlbmd0aCk7CiAJCW9mZnNldCA9IGJsa29mZihmcywgbGVuZ3Ro
 IC0gMSk7CiAJCWxibiA9IGxibGtubyhmcywgbGVuZ3RoIC0gMSk7CiAJCWFm
 bGFncyA9IEJfQ0xSQlVGOwogCQlpZiAoZmxhZ3MgJiBJT19TWU5DKQogCQkJ
 YWZsYWdzIHw9IEJfU1lOQzsKLQkJdm5vZGVfcGFnZXJfc2V0c2l6ZShvdnAs
 IGxlbmd0aCk7Ci0JCWlmICgoZXJyb3IgPSBleHQyX2JhbGxvYyhvaXAsIGxi
 biwgb2Zmc2V0ICsgMSwgY3JlZCwgJmJwLAotCQkgICAgYWZsYWdzKSkgIT0g
 MCkKKwkJZXJyb3IgPSBleHQyX2JhbGxvYyhvaXAsIGxibiwgb2Zmc2V0ICsg
 MSwgY3JlZCwgJmJwLCBhZmxhZ3MpOworCQlpZiAoZXJyb3IpIHsKKwkJCXZu
 b2RlX3BhZ2VyX3NldHNpemUodnAsIG9zaXplKTsKIAkJCXJldHVybiAoZXJy
 b3IpOworCQl9CiAJCW9pcC0+aV9zaXplID0gbGVuZ3RoOwotCQlpZiAoYWZs
 YWdzICYgSU9fU1lOQykKKwkJaWYgKGJwLT5iX2J1ZnNpemUgPT0gZnMtPnNf
 YmxvY2tzaXplKQorCQkJYnAtPmJfZmxhZ3MgfD0gQl9DTFVTVEVST0s7CisJ
 CWlmIChhZmxhZ3MgJiBCX1NZTkMpCiAJCQlid3JpdGUoYnApOworCQllbHNl
 IGlmIChvdnAtPnZfbW91bnQtPm1udF9mbGFnICYgTU5UX0FTWU5DKQorCQkJ
 YmR3cml0ZShicCk7CiAJCWVsc2UKIAkJCWJhd3JpdGUoYnApOwogCQlvaXAt
 PmlfZmxhZyB8PSBJTl9DSEFOR0UgfCBJTl9VUERBVEU7CkBAIC0xOTUsMTUg
 KzE5NiwxOSBAQAogCQlhZmxhZ3MgPSBCX0NMUkJVRjsKIAkJaWYgKGZsYWdz
 ICYgSU9fU1lOQykKIAkJCWFmbGFncyB8PSBCX1NZTkM7Ci0JCWlmICgoZXJy
 b3IgPSBleHQyX2JhbGxvYyhvaXAsIGxibiwgb2Zmc2V0LCBjcmVkLCAmYnAs
 Ci0JCSAgICBhZmxhZ3MpKSAhPSAwKQorCQllcnJvciA9IGV4dDJfYmFsbG9j
 KG9pcCwgbGJuLCBvZmZzZXQsIGNyZWQsICZicCwgYWZsYWdzKTsKKwkJaWYg
 KGVycm9yKQogCQkJcmV0dXJuIChlcnJvcik7CiAJCW9pcC0+aV9zaXplID0g
 bGVuZ3RoOwogCQlzaXplID0gYmxrc2l6ZShmcywgb2lwLCBsYm4pOwogCQli
 emVybygoY2hhciAqKWJwLT5iX2RhdGEgKyBvZmZzZXQsICh1X2ludCkoc2l6
 ZSAtIG9mZnNldCkpOwogCQlhbGxvY2J1ZihicCwgc2l6ZSk7Ci0JCWlmIChh
 ZmxhZ3MgJiBJT19TWU5DKQorCQlpZiAoYnAtPmJfYnVmc2l6ZSA9PSBmcy0+
 c19ibG9ja3NpemUpCisJCQlicC0+Yl9mbGFncyB8PSBCX0NMVVNURVJPSzsK
 KwkJaWYgKGFmbGFncyAmIEJfU1lOQykKIAkJCWJ3cml0ZShicCk7CisJCWVs
 c2UgaWYgKG92cC0+dl9tb3VudC0+bW50X2ZsYWcgJiBNTlRfQVNZTkMpCisJ
 CQliZHdyaXRlKGJwKTsKIAkJZWxzZQogCQkJYmF3cml0ZShicCk7CiAJfQpA
 QCAtMjQ3LDYgKzI1Miw3IEBACiAJZXJyb3IgPSB2dHJ1bmNidWYob3ZwLCBj
 cmVkLCB0ZCwgbGVuZ3RoLCAoaW50KWZzLT5zX2Jsb2Nrc2l6ZSk7CiAJaWYg
 KGVycm9yICYmIChhbGxlcnJvciA9PSAwKSkKIAkJYWxsZXJyb3IgPSBlcnJv
 cjsKKwl2bm9kZV9wYWdlcl9zZXRzaXplKG92cCwgbGVuZ3RoKTsKIAogCS8q
 CiAJICogSW5kaXJlY3QgYmxvY2tzIGZpcnN0LgpkaWZmIC11IGV4dDJmcy5v
 cmlnL2V4dDJfcmVhZHdyaXRlLmMgZXh0MmZzL2V4dDJfcmVhZHdyaXRlLmMK
 LS0tIGV4dDJmcy5vcmlnL2V4dDJfcmVhZHdyaXRlLmMJMjAwOS0wOS0xMCAx
 MzowNTozMS4wMDAwMDAwMDAgKzAwMDAKKysrIGV4dDJmcy9leHQyX3JlYWR3
 cml0ZS5jCTIwMDktMDktMTAgMTQ6MTM6NDEuMDAwMDAwMDAwICswMDAwCkBA
 IC0zNiw2ICszNiw3IEBACiAgKiAkRnJlZUJTRDogc3JjL3N5cy9nbnUvZnMv
 ZXh0MmZzL2V4dDJfcmVhZHdyaXRlLmMsdiAxLjMxLjIwLjEgMjAwOS8wNC8x
 NSAwMzoxNDoyNiBrZW5zbWl0aCBFeHAgJAogICovCiAKKy8qIFhYWCBUT0RP
 OiByZW1vdmUgdGhlc2Ugb2JmdXNjYXRpb25zIChhcyBpbiBmZnNfdm5vcHMu
 YykuICovCiAjZGVmaW5lCUJMS1NJWkUoYSwgYiwgYykJYmxrc2l6ZShhLCBi
 LCBjKQogI2RlZmluZQlGUwkJCXN0cnVjdCBleHQyX3NiX2luZm8KICNkZWZp
 bmUJSV9GUwkJCWlfZTJmcwpAQCAtNDcsNyArNDgsNiBAQAogLyoKICAqIFZu
 b2RlIG9wIGZvciByZWFkaW5nLgogICovCi0vKiBBUkdTVVNFRCAqLwogc3Rh
 dGljIGludAogUkVBRChhcCkKIAlzdHJ1Y3Qgdm9wX3JlYWRfYXJncyAvKiB7
 CkBAIC02NSw4ICs2NSw4IEBACiAJZGFkZHJfdCBsYm4sIG5leHRsYm47CiAJ
 b2ZmX3QgYnl0ZXNpbmZpbGU7CiAJbG9uZyBzaXplLCB4ZmVyc2l6ZSwgYmxr
 b2Zmc2V0OwotCWludCBlcnJvciwgb3JpZ19yZXNpZDsKLQlpbnQgc2VxY291
 bnQgPSBhcC0+YV9pb2ZsYWcgPj4gSU9fU0VRU0hJRlQ7CisJaW50IGVycm9y
 LCBvcmlnX3Jlc2lkLCBzZXFjb3VudDsKKwlzZXFjb3VudCA9IGFwLT5hX2lv
 ZmxhZyA+PiBJT19TRVFTSElGVDsKIAl1X3Nob3J0IG1vZGU7CiAKIAl2cCA9
 IGFwLT5hX3ZwOwpAQCAtODQsMTEgKzg0LDE0IEBACiAJfSBlbHNlIGlmICh2
 cC0+dl90eXBlICE9IFZSRUcgJiYgdnAtPnZfdHlwZSAhPSBWRElSKQogCQlw
 YW5pYygiJXM6IHR5cGUgJWQiLCBSRUFEX1MsIHZwLT52X3R5cGUpOwogI2Vu
 ZGlmCi0JZnMgPSBpcC0+SV9GUzsKLQlpZiAoKHVvZmZfdCl1aW8tPnVpb19v
 ZmZzZXQgPiBmcy0+ZnNfbWF4ZmlsZXNpemUpCi0JCXJldHVybiAoRUZCSUcp
 OwotCiAJb3JpZ19yZXNpZCA9IHVpby0+dWlvX3Jlc2lkOworCUtBU1NFUlQo
 b3JpZ19yZXNpZCA+PSAwLCAoImV4dDJfcmVhZDogdWlvLT51aW9fcmVzaWQg
 PCAwIikpOworCWlmIChvcmlnX3Jlc2lkID09IDApCisJCXJldHVybiAoMCk7
 CisJS0FTU0VSVCh1aW8tPnVpb19vZmZzZXQgPj0gMCwgKCJleHQyX3JlYWQ6
 IHVpby0+dWlvX29mZnNldCA8IDAiKSk7CisJZnMgPSBpcC0+SV9GUzsKKwlp
 ZiAodWlvLT51aW9fb2Zmc2V0IDwgaXAtPmlfc2l6ZSAmJiB1aW8tPnVpb19v
 ZmZzZXQgPj0gZnMtPmZzX21heGZpbGVzaXplKQorCQlyZXR1cm4gKEVPVkVS
 RkxPVyk7CiAJZm9yIChlcnJvciA9IDAsIGJwID0gTlVMTDsgdWlvLT51aW9f
 cmVzaWQgPiAwOyBicCA9IE5VTEwpIHsKIAkJaWYgKChieXRlc2luZmlsZSA9
 IGlwLT5pX3NpemUgLSB1aW8tPnVpb19vZmZzZXQpIDw9IDApCiAJCQlicmVh
 azsKQEAgLTEwNiw5ICsxMDksOCBAQAogCQlpZiAobGJsa3Rvc2l6ZShmcywg
 bmV4dGxibikgPj0gaXAtPmlfc2l6ZSkKIAkJCWVycm9yID0gYnJlYWQodnAs
 IGxibiwgc2l6ZSwgTk9DUkVELCAmYnApOwogCQllbHNlIGlmICgodnAtPnZf
 bW91bnQtPm1udF9mbGFnICYgTU5UX05PQ0xVU1RFUlIpID09IDApCi0JCQll
 cnJvciA9IGNsdXN0ZXJfcmVhZCh2cCwKLQkJCSAgICBpcC0+aV9zaXplLCBs
 Ym4sIHNpemUsIE5PQ1JFRCwKLQkJCSAgICB1aW8tPnVpb19yZXNpZCwgKGFw
 LT5hX2lvZmxhZyA+PiBJT19TRVFTSElGVCksICZicCk7CisJCQllcnJvciA9
 IGNsdXN0ZXJfcmVhZCh2cCwgaXAtPmlfc2l6ZSwgbGJuLCBzaXplLCBOT0NS
 RUQsCisJCQkgICAgYmxrb2Zmc2V0ICsgdWlvLT51aW9fcmVzaWQsIHNlcWNv
 dW50LCAmYnApOwogCQllbHNlIGlmIChzZXFjb3VudCA+IDEpIHsKIAkJCWlu
 dCBuZXh0c2l6ZSA9IEJMS1NJWkUoZnMsIGlwLCBuZXh0bGJuKTsKIAkJCWVy
 cm9yID0gYnJlYWRuKHZwLCBsYm4sCkBAIC0xMzQsOCArMTM2LDggQEAKIAkJ
 CQlicmVhazsKIAkJCXhmZXJzaXplID0gc2l6ZTsKIAkJfQotCQllcnJvciA9
 Ci0JCSAgICB1aW9tb3ZlKChjaGFyICopYnAtPmJfZGF0YSArIGJsa29mZnNl
 dCwgKGludCl4ZmVyc2l6ZSwgdWlvKTsKKwkJZXJyb3IgPSB1aW9tb3ZlKChj
 aGFyICopYnAtPmJfZGF0YSArIGJsa29mZnNldCwKKwkJCShpbnQpeGZlcnNp
 emUsIHVpbyk7CiAJCWlmIChlcnJvcikKIAkJCWJyZWFrOwogCkBAIC0xNDMs
 NyArMTQ1LDcgQEAKIAl9CiAJaWYgKGJwICE9IE5VTEwpCiAJCWJxcmVsc2Uo
 YnApOwotCWlmIChvcmlnX3Jlc2lkID4gMCAmJiAoZXJyb3IgPT0gMCB8fCB1
 aW8tPnVpb19yZXNpZCAhPSBvcmlnX3Jlc2lkKSAmJgorCWlmICgoZXJyb3Ig
 PT0gMCB8fCB1aW8tPnVpb19yZXNpZCAhPSBvcmlnX3Jlc2lkKSAmJgogCSAg
 ICAodnAtPnZfbW91bnQtPm1udF9mbGFnICYgTU5UX05PQVRJTUUpID09IDAp
 CiAJCWlwLT5pX2ZsYWcgfD0gSU5fQUNDRVNTOwogCXJldHVybiAoZXJyb3Ip
 OwpAQCAtMTY5LDExICsxNzEsMTAgQEAKIAlzdHJ1Y3QgdGhyZWFkICp0ZDsK
 IAlkYWRkcl90IGxibjsKIAlvZmZfdCBvc2l6ZTsKLQlpbnQgc2VxY291bnQ7
 Ci0JaW50IGJsa29mZnNldCwgZXJyb3IsIGZsYWdzLCBpb2ZsYWcsIHJlc2lk
 LCBzaXplLCB4ZmVyc2l6ZTsKKwlpbnQgYmxrb2Zmc2V0LCBlcnJvciwgZmxh
 Z3MsIGlvZmxhZywgcmVzaWQsIHNpemUsIHNlcWNvdW50LCB4ZmVyc2l6ZTsK
 IAogCWlvZmxhZyA9IGFwLT5hX2lvZmxhZzsKLQlzZXFjb3VudCA9IGFwLT5h
 X2lvZmxhZyA+PiBJT19TRVFTSElGVDsKKwlzZXFjb3VudCA9IGlvZmxhZyA+
 PiBJT19TRVFTSElGVDsKIAl1aW8gPSBhcC0+YV91aW87CiAJdnAgPSBhcC0+
 YV92cDsKIAlpcCA9IFZUT0kodnApOwpAQCAtMTk0LDE1ICsxOTUsMTUgQEAK
 IAkJYnJlYWs7CiAJY2FzZSBWRElSOgogCQlpZiAoKGlvZmxhZyAmIElPX1NZ
 TkMpID09IDApCi0JCQlwYW5pYygiJXM6IG5vbnN5bmMgZGlyIHdyaXRlIiwg
 V1JJVEVfUyk7CisJCQlwYW5pYygiZXh0Ml93cml0ZTogbm9uc3luYyBkaXIg
 d3JpdGUiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcGFuaWMoIiVzOiB0
 eXBlIiwgV1JJVEVfUyk7CisJCXBhbmljKCJleHQyX3dyaXRlOiB0eXBlICVw
 ICVkICglamQsJWQpIiwgKHZvaWQgKil2cCwgdnAtPnZfdHlwZSwKKwkJCShp
 bnRtYXhfdCl1aW8tPnVpb19vZmZzZXQsIHVpby0+dWlvX3Jlc2lkKTsKIAl9
 CiAKIAlmcyA9IGlwLT5JX0ZTOwotCWlmICh1aW8tPnVpb19vZmZzZXQgPCAw
 IHx8Ci0JICAgICh1b2ZmX3QpdWlvLT51aW9fb2Zmc2V0ICsgdWlvLT51aW9f
 cmVzaWQgPiBmcy0+ZnNfbWF4ZmlsZXNpemUpCisJaWYgKCh1b2ZmX3QpdWlv
 LT51aW9fb2Zmc2V0ICsgdWlvLT51aW9fcmVzaWQgPiBmcy0+ZnNfbWF4Zmls
 ZXNpemUpCiAJCXJldHVybiAoRUZCSUcpOwogCS8qCiAJICogTWF5YmUgdGhp
 cyBzaG91bGQgYmUgYWJvdmUgdGhlIHZub2RlIG9wIGNhbGwsIGJ1dCBzbyBs
 b25nIGFzCkBAIC0yMzYsMjYgKzIzNywxOSBAQAogCiAJCS8qCiAJCSAqIEF2
 b2lkIGEgZGF0YS1jb25zaXN0ZW5jeSByYWNlIGJldHdlZW4gd3JpdGUoKSBh
 bmQgbW1hcCgpCi0JCSAqIGJ5IGVuc3VyaW5nIHRoYXQgbmV3bHkgYWxsb2Nh
 dGVkIGJsb2NrcyBhcmUgemVyb2QuICBUaGUKKwkJICogYnkgZW5zdXJpbmcg
 dGhhdCBuZXdseSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSB6ZXJvZWQuICBUaGUK
 IAkJICogcmFjZSBjYW4gb2NjdXIgZXZlbiBpbiB0aGUgY2FzZSB3aGVyZSB0
 aGUgd3JpdGUgY292ZXJzCiAJCSAqIHRoZSBlbnRpcmUgYmxvY2suCiAJCSAq
 LwogCQlmbGFncyB8PSBCX0NMUkJVRjsKLSNpZiAwCi0JCWlmIChmcy0+c19m
 cmFnX3NpemUgPiB4ZmVyc2l6ZSkKLQkJCWZsYWdzIHw9IEJfQ0xSQlVGOwot
 CQllbHNlCi0JCQlmbGFncyAmPSB+Ql9DTFJCVUY7Ci0jZW5kaWYKIAotCQll
 cnJvciA9IGV4dDJfYmFsbG9jKGlwLAotCQkgICAgbGJuLCBibGtvZmZzZXQg
 KyB4ZmVyc2l6ZSwgYXAtPmFfY3JlZCwgJmJwLCBmbGFncyk7CisJCWVycm9y
 ID0gZXh0Ml9iYWxsb2MoaXAsIGxibiwgYmxrb2Zmc2V0ICsgeGZlcnNpemUs
 CisJCSAgICBhcC0+YV9jcmVkLCAmYnAsIGZsYWdzKTsKIAkJaWYgKGVycm9y
 KQogCQkJYnJlYWs7CiAKLQkJaWYgKHVpby0+dWlvX29mZnNldCArIHhmZXJz
 aXplID4gaXAtPmlfc2l6ZSkgeworCQlpZiAodWlvLT51aW9fb2Zmc2V0ICsg
 eGZlcnNpemUgPiBpcC0+aV9zaXplKQogCQkJaXAtPmlfc2l6ZSA9IHVpby0+
 dWlvX29mZnNldCArIHhmZXJzaXplOwotCQl9CiAKIAkJc2l6ZSA9IEJMS1NJ
 WkUoZnMsIGlwLCBsYm4pIC0gYnAtPmJfcmVzaWQ7CiAJCWlmIChzaXplIDwg
 eGZlcnNpemUpCkBAIC0yNjQsNyArMjU4LDcgQEAKIAkJZXJyb3IgPQogCQkg
 ICAgdWlvbW92ZSgoY2hhciAqKWJwLT5iX2RhdGEgKyBibGtvZmZzZXQsIChp
 bnQpeGZlcnNpemUsIHVpbyk7CiAJCWlmICgoaW9mbGFnICYgSU9fVk1JTykg
 JiYKLQkJICAgKExJU1RfRklSU1QoJmJwLT5iX2RlcCkgPT0gTlVMTCkpIC8q
 IGluIGV4dDJmcz8gKi8KKwkJICAgTElTVF9GSVJTVCgmYnAtPmJfZGVwKSA9
 PSBOVUxMKSAvKiBpbiBleHQyZnM/ICovCiAJCQlicC0+Yl9mbGFncyB8PSBC
 X1JFTEJVRjsKIAogCQlpZiAoaW9mbGFnICYgSU9fU1lOQykgewpAQCAtMjgy
 LDEyICsyNzYsMTUgQEAKIAkJfQogCQlpZiAoZXJyb3IgfHwgeGZlcnNpemUg
 PT0gMCkKIAkJCWJyZWFrOwotCQlpcC0+aV9mbGFnIHw9IElOX0NIQU5HRSB8
 IElOX1VQREFURTsKIAl9CiAJLyoKIAkgKiBJZiB3ZSBzdWNjZXNzZnVsbHkg
 d3JvdGUgYW55IGRhdGEsIGFuZCB3ZSBhcmUgbm90IHRoZSBzdXBlcnVzZXIK
 IAkgKiB3ZSBjbGVhciB0aGUgc2V0dWlkIGFuZCBzZXRnaWQgYml0cyBhcyBh
 IHByZWNhdXRpb24gYWdhaW5zdAogCSAqIHRhbXBlcmluZy4KKwkgKiBYWFgg
 dG9vIGxhdGUsIHRoZSB0YW1wZXJlciBtYXkgaGF2ZSBvcGVuZWQgdGhlIGZp
 bGUgd2hpbGUgd2UKKwkgKiB3ZXJlIHdyaXRpbmcgdGhlIGRhdGEgKG9yIGJl
 Zm9yZSkuCisJICogWFhYIHRvbyBlYXJseSwgaWYgKGVycm9yICYmIGlvZmxh
 ZyAmIElPX1VOSVQpIHRoZW4gd2Ugd2lsbAorCSAqIHVud3JpdGUgdGhlIGRh
 dGEuCiAJICovCiAJaWYgKHJlc2lkID4gdWlvLT51aW9fcmVzaWQgJiYgYXAt
 PmFfY3JlZCAmJiBhcC0+YV9jcmVkLT5jcl91aWQgIT0gMCkKIAkJaXAtPmlf
 bW9kZSAmPSB+KElTVUlEIHwgSVNHSUQpOwpAQCAtMjk4LDcgKzI5NSwxMSBA
 QAogCQkJdWlvLT51aW9fb2Zmc2V0IC09IHJlc2lkIC0gdWlvLT51aW9fcmVz
 aWQ7CiAJCQl1aW8tPnVpb19yZXNpZCA9IHJlc2lkOwogCQl9Ci0JfSBlbHNl
 IGlmIChyZXNpZCA+IHVpby0+dWlvX3Jlc2lkICYmIChpb2ZsYWcgJiBJT19T
 WU5DKSkKLQkJZXJyb3IgPSBleHQyX3VwZGF0ZSh2cCwgMSk7CisJfQorCWlm
 ICh1aW8tPnVpb19yZXNpZCAhPSByZXNpZCkgeworCQlpcC0+aV9mbGFnIHw9
 IElOX0NIQU5HRSB8IElOX1VQREFURTsKKwkJaWYgKGlvZmxhZyAmIElPX1NZ
 TkMpCisJCQllcnJvciA9IGV4dDJfdXBkYXRlKHZwLCAxKTsKKwl9CiAJcmV0
 dXJuIChlcnJvcik7CiB9CmRpZmYgLXUgZXh0MmZzLm9yaWcvZXh0Ml92ZnNv
 cHMuYyBleHQyZnMvZXh0Ml92ZnNvcHMuYwotLS0gZXh0MmZzLm9yaWcvZXh0
 Ml92ZnNvcHMuYwkyMDA5LTA5LTEwIDEzOjA1OjMxLjAwMDAwMDAwMCArMDAw
 MAorKysgZXh0MmZzL2V4dDJfdmZzb3BzLmMJMjAwOS0wOS0xMCAxMzo0MTow
 OS4wMDAwMDAwMDAgKzAwMDAKQEAgLTE3MSw4ICsxNzEsNiBAQAogCQkJZmxh
 Z3MgPSBXUklURUNMT1NFOwogCQkJaWYgKG1wLT5tbnRfZmxhZyAmIE1OVF9G
 T1JDRSkKIAkJCQlmbGFncyB8PSBGT1JDRUNMT1NFOwotCQkJaWYgKHZmc19i
 dXN5KG1wLCBMS19OT1dBSVQsIDAsIHRkKSkKLQkJCQlyZXR1cm4gKEVCVVNZ
 KTsKIAkJCWVycm9yID0gZXh0Ml9mbHVzaGZpbGVzKG1wLCBmbGFncywgdGQp
 OwogCQkJdmZzX3VuYnVzeShtcCwgdGQpOwogCQkJaWYgKCFlcnJvciAmJiBm
 cy0+c193YXN2YWxpZCkgewpAQCAtNTAwLDYgKzQ5OCw3IEBACiAgKgk0KSBp
 bnZhbGlkYXRlIGFsbCBpbmFjdGl2ZSB2bm9kZXMuCiAgKgk1KSBpbnZhbGlk
 YXRlIGFsbCBjYWNoZWQgZmlsZSBkYXRhLgogICoJNikgcmUtcmVhZCBpbm9k
 ZSBkYXRhIGZvciBhbGwgYWN0aXZlIHZub2Rlcy4KKyAqIFhYWCB3ZSBhcmUg
 bWlzc2luZyBzb21lIHN0ZXBzLCBpbiBwYXJ0aWN1bGFyICMgMwogICovCiBz
 dGF0aWMgaW50CiBleHQyX3JlbG9hZChzdHJ1Y3QgbW91bnQgKm1wLCBzdHJ1
 Y3QgdGhyZWFkICp0ZCkKQEAgLTEwMDcsOCArMTAwNiw4IEBACiAJCSAqIHN0
 aWxsIHplcm8sIGl0IHdpbGwgYmUgdW5saW5rZWQgYW5kIHJldHVybmVkIHRv
 IHRoZSBmcmVlCiAJCSAqIGxpc3QgYnkgdnB1dCgpLgogCQkgKi8KLQkJdnB1
 dCh2cCk7CiAJCWJyZWxzZShicCk7CisJCXZwdXQodnApOwogCQkqdnBwID0g
 TlVMTDsKIAkJcmV0dXJuIChlcnJvcik7CiAJfQpAQCAtMTAzMiw3ICsxMDMx
 LDcgQEAKIC8qCiAJZXh0Ml9wcmludF9pbm9kZShpcCk7CiAqLwotCWJyZWxz
 ZShicCk7CisJYnFyZWxzZShicCk7CiAKIAkvKgogCSAqIEluaXRpYWxpemUg
 dGhlIHZub2RlIGZyb20gdGhlIGlub2RlLCBjaGVjayBmb3IgYWxpYXNlcy4K
 
 
 --0-1580472039-1252610897=:7136--

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/138109: [extfs] [patch] Minor cleanups to the sys/gnu/fs/ext2fs based on BSD Lite2
Date: Thu, 14 Jan 2010 07:14:51 -0800 (PST)

 Since the new BSDL ext2fs cleanup/rewrite (with these changes and
 much more) has been committed to head I think we can close this PR.
 
 Thanks to everyone involved!
 
 
       
State-Changed-From-To: open->closed 
State-Changed-By: jh 
State-Changed-When: Fri Jan 22 16:39:01 UTC 2010 
State-Changed-Why:  
Submitted changes were included in r202283. 

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