From nobody@FreeBSD.org  Fri Dec 31 15:53:07 2010
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 64471106564A
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 31 Dec 2010 15:53:07 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (unknown [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id 4748A8FC0A
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 31 Dec 2010 15:53:07 +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 oBVFr6de009271
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 31 Dec 2010 15:53:06 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.4/8.14.4/Submit) id oBVFr6jE009270;
	Fri, 31 Dec 2010 15:53:06 GMT
	(envelope-from nobody)
Message-Id: <201012311553.oBVFr6jE009270@red.freebsd.org>
Date: Fri, 31 Dec 2010 15:53:06 GMT
From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: Performance fix and cleanups for BSD licensed ext2fs
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         153584
>Category:       kern
>Synopsis:       [ext2fs] [patch] Performance fix and cleanups for BSD licensed ext2fs
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-fs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Fri Dec 31 16:00:24 UTC 2010
>Closed-Date:    Tue Feb 01 19:38:09 UTC 2011
>Last-Modified:  Tue Feb 01 19:38:09 UTC 2011
>Originator:     Pedro F. Giffuni
>Release:        8.2-BETA1
>Organization:
>Environment:
Non-relevant: I added the BSD-licensed ext2fs to my 8.2 kernel (i386)
>Description:
Since the adoption of the BSD licensed ext2fs implementation, a performance decrease was observed.
Bruce Evans found the source for some of the problems:
http://lists.freebsd.org/pipermail/freebsd-fs/2010-September/009589.html

In addition to these, some merges from UFS1 have been backported and some style issues have been fixed. See PR 142924 and 143345 for the details.

This patch include bde's fixes and applies the basic cleanups from the previous PRs.

It also adds back the async mount option as it is operational after the initial BSD licensed backporting: this has been tested as part of the recent GSoC project.
>How-To-Repeat:

>Fix:
Patch follows.

Patch attached with submission follows:

diff -ru ext2fs.orig/ext2_alloc.c ext2fs/ext2_alloc.c
--- ext2fs.orig/ext2_alloc.c	2010-12-29 15:14:06.000000000 +0000
+++ ext2fs/ext2_alloc.c	2010-12-31 10:04:27.000000000 +0000
@@ -59,6 +59,10 @@
 						int));
 static daddr_t	ext2_nodealloccg(struct inode *, int, daddr_t, int);
 static daddr_t  ext2_mapsearch(struct m_ext2fs *, char *, daddr_t);
+#ifdef FANCY_REALLOC
+static int	ext2_reallocblks(struct vop_reallocblks_args *);
+#endif
+
 /*
  * Allocate a block in the file system.
  *
@@ -76,7 +80,6 @@
  *   2) quadradically rehash into other cylinder groups, until an
  *        available block is located.
  */
-
 int
 ext2_alloc(ip, lbn, bpref, size, cred, bnp)
 	struct inode *ip;
@@ -116,6 +119,10 @@
         bno = (daddr_t)ext2_hashalloc(ip, cg, bpref, fs->e2fs_bsize,
                                                  ext2_alloccg);
         if (bno > 0) {
+		/* set next_alloc fields as done in block_getblk */
+		ip->i_next_alloc_block = lbn;
+		ip->i_next_alloc_goal = bno;
+
                 ip->i_blocks += btodb(fs->e2fs_bsize);
                 ip->i_flag |= IN_CHANGE | IN_UPDATE;
                 *bnp = bno;
@@ -144,9 +151,13 @@
  */
 
 #ifdef FANCY_REALLOC
-#include <sys/sysctl.h>
+SYSCTL_NODE(_vfs, OID_AUTO, ext2, CTLFLAG_RW, 0, "EXT2FS filesystem");
+
 static int doasyncfree = 1;
+SYSCTL_INT(_vfs_ext2, OID_AUTO, doasyncfree, CTLFLAG_RW, &doasyncfree, 0, "");
+
 static int doreallocblks = 1;
+SYSCTL_INT(_vfs_ext2s, OID_AUTO, doreallocblks, CTLFLAG_RW, &doreallocblks, 0, "");
 
 #ifdef	OPT_DEBUG
 SYSCTL_INT(_debug, 14, doasyncfree, CTLFLAG_RW, &doasyncfree, 0, "");
@@ -173,7 +184,7 @@
 	struct ext2mount *ump;
 	struct cluster_save *buflist;
 	struct indir start_ap[NIADDR + 1], end_ap[NIADDR + 1], *idp;
-	int32_t start_lbn, end_lbn, soff, newblk, blkno =0;
+	int32_t start_lbn, end_lbn, soff, newblk, blkno;
 	int i, len, start_lvl, end_lvl, pref, ssize;
 
 	vp = ap->a_vp;
@@ -223,7 +234,7 @@
 	 * Find the preferred location for the cluster.
 	 */
 	EXT2_LOCK(ump); 
-	pref = ext2_blkpref(ip, start_lbn, soff, sbap, blkno);
+	pref = ext2_blkpref(ip, start_lbn, soff, sbap, blkno=0);
 	/*
 	 * If the block range spans two block maps, get the second map.
 	 */
@@ -625,7 +636,7 @@
 	struct m_ext2fs *fs;
 	struct buf *bp;
 	struct ext2mount *ump;
-	int error, bno, start, end, loc;
+	int error, bno;
 	char *bbp;
 	/* XXX ondisk32 */
 	fs = ip->i_e2fs;
@@ -658,26 +669,7 @@
 	/*
 	 * no blocks in the requested cylinder, so take next
 	 * available one in this cylinder group.
-	 * first try to get 8 contigous blocks, then fall back to a single
-	 * block.
 	 */
-	if (bpref)
-		start = dtogd(fs, bpref) / NBBY;
-	else
-		start = 0;
-	end = howmany(fs->e2fs->e2fs_fpg, NBBY) - start;
-	for (loc = start; loc < end; loc++) {
-		if (bbp[loc] == 0) {
-			bno = loc * NBBY;
-			goto gotit;
-		}
-	}
-	for (loc = 0; loc < start; loc++) {
-		if (bbp[loc] == 0) {
-			bno = loc * NBBY;
-			goto gotit;
-		}
-	}
 
 	bno = ext2_mapsearch(fs, bbp, bpref);
 	if (bno < 0){
diff -ru ext2fs.orig/ext2_dinode.h ext2fs/ext2_dinode.h
--- ext2fs.orig/ext2_dinode.h	2010-12-29 15:14:23.000000000 +0000
+++ ext2fs/ext2_dinode.h	2010-12-30 23:18:21.000000000 +0000
@@ -32,6 +32,18 @@
 #define e2di_size_high	e2di_dacl
 
 /*
+ * Special inode numbers
+ * The root inode is the root of the file system.  Inode 0 can't be used for
+ * normal purposes and bad blocks are normally linked to inode 1, thus
+ * the root inode is 2.
+ * Inode 3 to 10 are reserved in ext2fs.
+ */
+#define EXT2_BAD_INO		 1	/* Bad blocks inode */
+#define EXT2_ROOT_INO		 2	/* Root inode */
+#define EXT2_BOOT_LOADER_INO	 5	/* Boot loader inode */
+#define EXT2_UNDEL_DIR_INO	 6	/* Undelete directory inode */
+
+/*
  * Inode flags
  * The current implementation uses only EXT2_IMMUTABLE and EXT2_APPEND flags
  */
@@ -74,5 +86,5 @@
 	u_int32_t	e2di_linux_reserved3; /* 124 */
 };
 
-#endif /* _FS_EXT2FS_EXT2_DINODE_H_ */
+#endif /* !_FS_EXT2FS_EXT2_DINODE_H_ */
 
diff -ru ext2fs.orig/ext2_lookup.c ext2fs/ext2_lookup.c
--- ext2fs.orig/ext2_lookup.c	2010-12-29 15:14:51.000000000 +0000
+++ ext2fs/ext2_lookup.c	2010-12-30 23:16:06.000000000 +0000
@@ -347,6 +347,7 @@
 		slotneeded = (sizeof(struct direct) - MAXNAMLEN +
 			cnp->cn_namelen + 3) &~ 3; */
 	}
+	bmask = VFSTOEXT2(vdp->v_mount)->um_mountp->mnt_stat.f_iosize - 1;
 
 	/*
 	 * If there is cached information on a previous search of
@@ -359,7 +360,6 @@
 	 * profiling time and hence has been removed in the interest
 	 * of simplicity.
 	 */
-	bmask = VFSTOEXT2(vdp->v_mount)->um_mountp->mnt_stat.f_iosize - 1;
 	if (nameiop != LOOKUP || i_diroff == 0 ||
 	    i_diroff > dp->i_size) {
 		entryoffsetinblock = 0;
diff -ru ext2fs.orig/ext2_vfsops.c ext2fs/ext2_vfsops.c
--- ext2fs.orig/ext2_vfsops.c	2010-12-29 15:15:11.000000000 +0000
+++ ext2fs/ext2_vfsops.c	2010-12-31 10:01:28.000000000 +0000
@@ -95,9 +95,9 @@
 static int	compute_sb_data(struct vnode * devvp,
 		    struct ext2fs * es, struct m_ext2fs * fs);
 
-static const char *ext2_opts[] = { "from", "export", "acls", "noexec",
-    "noatime", "union", "suiddir", "multilabel", "nosymfollow",
-    "noclusterr", "noclusterw", "force", NULL };
+static const char *ext2_opts[] = { "acls", "async", "noatime", "noclusterr", 
+    "noclusterw", "noexec", "export", "force", "from", "multilabel",
+    "suiddir", "nosymfollow", "sync", "union", NULL };
 
 /*
  * VFS Operations.
@@ -945,9 +945,8 @@
 	}
 
 	/*
-	 * Finish inode initialization now that aliasing has been resolved.
+	 * Finish inode initialization.
 	 */
-	ip->i_devvp = ump->um_devvp;
 
 	/*
 	 * Set up a generation number for this inode if it does not
diff -ru ext2fs.orig/ext2fs.h ext2fs/ext2fs.h
--- ext2fs.orig/ext2fs.h	2010-12-29 15:15:21.000000000 +0000
+++ ext2fs/ext2fs.h	2010-12-30 23:18:21.000000000 +0000
@@ -39,22 +39,6 @@
 
 #include <sys/types.h>
 
-/*
- * Special inode numbers
- */
-#define	EXT2_BAD_INO		 1	/* Bad blocks inode */
-#define EXT2_ROOT_INO		 2	/* Root inode */
-#define EXT2_BOOT_LOADER_INO	 5	/* Boot loader inode */
-#define EXT2_UNDEL_DIR_INO	 6	/* Undelete directory inode */
-
-/* First non-reserved inode for old ext2 filesystems */
-#define E2FS_REV0_FIRST_INO	11
-
-/*
- * The second extended file system magic number
- */
-#define E2FS_MAGIC		0xEF53
-
 #if defined(_KERNEL)
 /*
  * FreeBSD passes the pointer to the in-core struct with relevant
@@ -129,7 +113,9 @@
 	u_int8_t   e2fs_uuid[16];	/* 128-bit uuid for volume */
 	char       e2fs_vname[16];	/* volume name */
 	char       e2fs_fsmnt[64]; 	/* name mounted on */
-	u_int32_t  e2fs_algo;		/* For comcate for dir */
+	u_int32_t  e2fs_algo;		/* for compression */
+	uint8_t	   e2fs_prealloc;	/* # of blocks to preallocate */
+	uint8_t	   e2fs_dir_prealloc;	/* # of blocks to preallocate for dir */
 	u_int16_t  e2fs_reserved_ngdb; /* # of reserved gd blocks for resize */
 	u_int32_t  reserved2[204];
 };
@@ -153,8 +139,8 @@
 	uint32_t e2fs_bshift;     /* calc of logical block no */
 	int32_t e2fs_bmask;       /* calc of block offset */
 	int32_t e2fs_bpg;         /* Number of blocks per group */
-	int64_t e2fs_qbmask;       /* = s_blocksize -1 */
-	uint32_t e2fs_fsbtodb;     /* Shift to get disk block */
+	int64_t e2fs_qbmask;      /* = s_blocksize -1 */
+	uint32_t e2fs_fsbtodb;    /* Shift to get disk block */
 	uint32_t e2fs_ipg;        /* Number of inodes per group */
 	uint32_t e2fs_ipb;        /* Number of inodes per block */
 	uint32_t e2fs_itpg;       /* Number of inode table per group */
@@ -169,8 +155,8 @@
 	int32_t  e2fs_isize;      /* Size of inode */
 	uint32_t e2fs_mount_opt;
 	uint32_t e2fs_blocksize_bits;
+	uint8_t	*e2fs_contigdirs; /* (u) # of contig. allocated dirs */
 	uint32_t e2fs_total_dir;  /* Total number of directories */
-	uint8_t	*e2fs_contigdirs;
 	char e2fs_wasvalid;       /* valid at mount time */
 	off_t e2fs_maxfilesize;
 	struct ext2_gd *e2fs_gd; /* Group Descriptors */
@@ -182,6 +168,14 @@
 #define E2FS_DATE		"95/08/09"
 #define E2FS_VERSION		"0.5b"
 
+/* First non-reserved inode for old ext2 filesystems */
+#define E2FS_REV0_FIRST_INO	11
+
+/*
+ * The second extended file system magic number
+ */
+#define E2FS_MAGIC		0xEF53
+
 /*
  * Revision levels
  */
@@ -197,6 +191,7 @@
  * compatible/incompatible features
  */
 #define EXT2F_COMPAT_PREALLOC		0x0001
+#define EXT2F_COMPAT_HASJOURNAL		0x0004
 #define EXT2F_COMPAT_RESIZE		0x0010
 
 #define EXT2F_ROCOMPAT_SPARSESUPER	0x0001
@@ -326,4 +321,4 @@
 
 #endif
 
-#endif	/* _LINUX_EXT2_FS_H */
+#endif	/* !_FS_EXT2FS_EXT2FS_H */
diff -ru ext2fs.orig/inode.h ext2fs/inode.h
--- ext2fs.orig/inode.h	2010-12-29 15:15:30.000000000 +0000
+++ ext2fs/inode.h	2010-12-30 23:16:06.000000000 +0000
@@ -62,7 +62,6 @@
  */
 struct inode {
 	struct	vnode  *i_vnode;/* Vnode associated with this inode. */
-	struct	vnode  *i_devvp;/* Vnode for block I/O. */
 	struct	ext2mount *i_ump;
 	u_int32_t i_flag;	/* flags, see below */
 	ino_t	  i_number;	/* The identity of the inode. */
@@ -143,6 +142,9 @@
 #define	IN_SPACECOUNTED	0x0080		/* Blocks to be freed in free count. */
 #define IN_LAZYACCESS   0x0100		/* Process IN_ACCESS after the
 					    suspension finished */
+
+#define i_devvp i_ump->um_devvp
+
 #ifdef _KERNEL
 /*
  * Structure used to pass around logical block paths generated by


>Release-Note:
>Audit-Trail:

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: bug-followup@FreeBSD.org
Cc: Doug Barton <dougb@FreeBSD.org>
Subject: Re: kern/153584: Performance fix and cleanups for BSD licensed ext2fs
Date: Sun, 2 Jan 2011 19:50:08 -0800 (PST)

 --0-493483054-1294026608=:21492
 Content-Type: text/plain; charset=us-ascii
 
 A small update ...
 This includes a small patch for the #ifdef KDB case
 in ext2_subr.c.
 
 Thanks to Doug Barton for reporting the issue.
 
 
       
 --0-493483054-1294026608=:21492
 Content-Type: text/plain; name="patch-ext2fs.txt"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename="patch-ext2fs.txt"
 
 ZGlmZiAtcnUgZXh0MmZzLm9yaWcvZXh0Ml9hbGxvYy5jIGV4dDJmcy9leHQy
 X2FsbG9jLmMKLS0tIGV4dDJmcy5vcmlnL2V4dDJfYWxsb2MuYwkyMDEwLTEy
 LTI5IDE1OjE0OjA2LjAwMDAwMDAwMCArMDAwMAorKysgZXh0MmZzL2V4dDJf
 YWxsb2MuYwkyMDEwLTEyLTMxIDEwOjA1OjA5LjAwMDAwMDAwMCArMDAwMApA
 QCAtNTksNiArNTksMTAgQEAKIAkJCQkJCWludCkpOwogc3RhdGljIGRhZGRy
 X3QJZXh0Ml9ub2RlYWxsb2NjZyhzdHJ1Y3QgaW5vZGUgKiwgaW50LCBkYWRk
 cl90LCBpbnQpOwogc3RhdGljIGRhZGRyX3QgIGV4dDJfbWFwc2VhcmNoKHN0
 cnVjdCBtX2V4dDJmcyAqLCBjaGFyICosIGRhZGRyX3QpOworI2lmZGVmIEZB
 TkNZX1JFQUxMT0MKK3N0YXRpYyBpbnQJZXh0Ml9yZWFsbG9jYmxrcyhzdHJ1
 Y3Qgdm9wX3JlYWxsb2NibGtzX2FyZ3MgKik7CisjZW5kaWYKKwogLyoKICAq
 IEFsbG9jYXRlIGEgYmxvY2sgaW4gdGhlIGZpbGUgc3lzdGVtLgogICoKQEAg
 LTc2LDcgKzgwLDYgQEAKICAqICAgMikgcXVhZHJhZGljYWxseSByZWhhc2gg
 aW50byBvdGhlciBjeWxpbmRlciBncm91cHMsIHVudGlsIGFuCiAgKiAgICAg
 ICAgYXZhaWxhYmxlIGJsb2NrIGlzIGxvY2F0ZWQuCiAgKi8KLQogaW50CiBl
 eHQyX2FsbG9jKGlwLCBsYm4sIGJwcmVmLCBzaXplLCBjcmVkLCBibnApCiAJ
 c3RydWN0IGlub2RlICppcDsKQEAgLTExNiw2ICsxMTksMTAgQEAKICAgICAg
 ICAgYm5vID0gKGRhZGRyX3QpZXh0Ml9oYXNoYWxsb2MoaXAsIGNnLCBicHJl
 ZiwgZnMtPmUyZnNfYnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgZXh0Ml9hbGxvY2NnKTsKICAgICAg
 ICAgaWYgKGJubyA+IDApIHsKKwkJLyogc2V0IG5leHRfYWxsb2MgZmllbGRz
 IGFzIGRvbmUgaW4gYmxvY2tfZ2V0YmxrICovCisJCWlwLT5pX25leHRfYWxs
 b2NfYmxvY2sgPSBsYm47CisJCWlwLT5pX25leHRfYWxsb2NfZ29hbCA9IGJu
 bzsKKwogICAgICAgICAgICAgICAgIGlwLT5pX2Jsb2NrcyArPSBidG9kYihm
 cy0+ZTJmc19ic2l6ZSk7CiAgICAgICAgICAgICAgICAgaXAtPmlfZmxhZyB8
 PSBJTl9DSEFOR0UgfCBJTl9VUERBVEU7CiAgICAgICAgICAgICAgICAgKmJu
 cCA9IGJubzsKQEAgLTE0NCw5ICsxNTEsMTMgQEAKICAqLwogCiAjaWZkZWYg
 RkFOQ1lfUkVBTExPQwotI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KK1NZU0NU
 TF9OT0RFKF92ZnMsIE9JRF9BVVRPLCBleHQyLCBDVExGTEFHX1JXLCAwLCAi
 RVhUMkZTIGZpbGVzeXN0ZW0iKTsKKwogc3RhdGljIGludCBkb2FzeW5jZnJl
 ZSA9IDE7CitTWVNDVExfSU5UKF92ZnNfZXh0MiwgT0lEX0FVVE8sIGRvYXN5
 bmNmcmVlLCBDVExGTEFHX1JXLCAmZG9hc3luY2ZyZWUsIDAsICIiKTsKKwog
 c3RhdGljIGludCBkb3JlYWxsb2NibGtzID0gMTsKK1NZU0NUTF9JTlQoX3Zm
 c19leHQycywgT0lEX0FVVE8sIGRvcmVhbGxvY2Jsa3MsIENUTEZMQUdfUlcs
 ICZkb3JlYWxsb2NibGtzLCAwLCAiIik7CiAKICNpZmRlZglPUFRfREVCVUcK
 IFNZU0NUTF9JTlQoX2RlYnVnLCAxNCwgZG9hc3luY2ZyZWUsIENUTEZMQUdf
 UlcsICZkb2FzeW5jZnJlZSwgMCwgIiIpOwpAQCAtMTczLDcgKzE4NCw3IEBA
 CiAJc3RydWN0IGV4dDJtb3VudCAqdW1wOwogCXN0cnVjdCBjbHVzdGVyX3Nh
 dmUgKmJ1Zmxpc3Q7CiAJc3RydWN0IGluZGlyIHN0YXJ0X2FwW05JQUREUiAr
 IDFdLCBlbmRfYXBbTklBRERSICsgMV0sICppZHA7Ci0JaW50MzJfdCBzdGFy
 dF9sYm4sIGVuZF9sYm4sIHNvZmYsIG5ld2JsaywgYmxrbm8gPTA7CisJaW50
 MzJfdCBzdGFydF9sYm4sIGVuZF9sYm4sIHNvZmYsIG5ld2JsaywgYmxrbm87
 CiAJaW50IGksIGxlbiwgc3RhcnRfbHZsLCBlbmRfbHZsLCBwcmVmLCBzc2l6
 ZTsKIAogCXZwID0gYXAtPmFfdnA7CkBAIC0yMjMsNyArMjM0LDcgQEAKIAkg
 KiBGaW5kIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gZm9yIHRoZSBjbHVzdGVy
 LgogCSAqLwogCUVYVDJfTE9DSyh1bXApOyAKLQlwcmVmID0gZXh0Ml9ibGtw
 cmVmKGlwLCBzdGFydF9sYm4sIHNvZmYsIHNiYXAsIGJsa25vKTsKKwlwcmVm
 ID0gZXh0Ml9ibGtwcmVmKGlwLCBzdGFydF9sYm4sIHNvZmYsIHNiYXAsIGJs
 a25vPTApOwogCS8qCiAJICogSWYgdGhlIGJsb2NrIHJhbmdlIHNwYW5zIHR3
 byBibG9jayBtYXBzLCBnZXQgdGhlIHNlY29uZCBtYXAuCiAJICovCkBAIC02
 MjUsNyArNjM2LDcgQEAKIAlzdHJ1Y3QgbV9leHQyZnMgKmZzOwogCXN0cnVj
 dCBidWYgKmJwOwogCXN0cnVjdCBleHQybW91bnQgKnVtcDsKLQlpbnQgZXJy
 b3IsIGJubywgc3RhcnQsIGVuZCwgbG9jOworCWludCBlcnJvciwgYm5vOwog
 CWNoYXIgKmJicDsKIAkvKiBYWFggb25kaXNrMzIgKi8KIAlmcyA9IGlwLT5p
 X2UyZnM7CkBAIC02NTgsMjYgKzY2OSw3IEBACiAJLyoKIAkgKiBubyBibG9j
 a3MgaW4gdGhlIHJlcXVlc3RlZCBjeWxpbmRlciwgc28gdGFrZSBuZXh0CiAJ
 ICogYXZhaWxhYmxlIG9uZSBpbiB0aGlzIGN5bGluZGVyIGdyb3VwLgotCSAq
 IGZpcnN0IHRyeSB0byBnZXQgOCBjb250aWdvdXMgYmxvY2tzLCB0aGVuIGZh
 bGwgYmFjayB0byBhIHNpbmdsZQotCSAqIGJsb2NrLgogCSAqLwotCWlmIChi
 cHJlZikKLQkJc3RhcnQgPSBkdG9nZChmcywgYnByZWYpIC8gTkJCWTsKLQll
 bHNlCi0JCXN0YXJ0ID0gMDsKLQllbmQgPSBob3dtYW55KGZzLT5lMmZzLT5l
 MmZzX2ZwZywgTkJCWSkgLSBzdGFydDsKLQlmb3IgKGxvYyA9IHN0YXJ0OyBs
 b2MgPCBlbmQ7IGxvYysrKSB7Ci0JCWlmIChiYnBbbG9jXSA9PSAwKSB7Ci0J
 CQlibm8gPSBsb2MgKiBOQkJZOwotCQkJZ290byBnb3RpdDsKLQkJfQotCX0K
 LQlmb3IgKGxvYyA9IDA7IGxvYyA8IHN0YXJ0OyBsb2MrKykgewotCQlpZiAo
 YmJwW2xvY10gPT0gMCkgewotCQkJYm5vID0gbG9jICogTkJCWTsKLQkJCWdv
 dG8gZ290aXQ7Ci0JCX0KLQl9CiAKIAlibm8gPSBleHQyX21hcHNlYXJjaChm
 cywgYmJwLCBicHJlZik7CiAJaWYgKGJubyA8IDApewpAQCAtNzAzLDYgKzY5
 NSwyNiBAQAogCXJldHVybiAoY2cgKiBmcy0+ZTJmcy0+ZTJmc19mcGcgKyBm
 cy0+ZTJmcy0+ZTJmc19maXJzdF9kYmxvY2sgKyBibm8pOwogfQogCisjaWZk
 ZWYgRkFOQ1lfUkVBTExPQworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIGEg
 Y2x1c3RlciBjYW4gYmUgYWxsb2NhdGVkLgorICoKKyAqIFdlIGRvIG5vdCBj
 dXJyZW50bHkgY2hlY2sgZm9yIG9wdGltYWwgcm90YXRpb25hbCBsYXlvdXQg
 aWYgdGhlcmUKKyAqIGFyZSBtdWx0aXBsZSBjaG9pY2VzIGluIHRoZSBzYW1l
 IGN5bGluZGVyIGdyb3VwLiBJbnN0ZWFkIHdlIGp1c3QKKyAqIHRha2UgdGhl
 IGZpcnN0IG9uZSB0aGF0IHdlIGZpbmQgZm9sbG93aW5nIGJwcmVmLgorICov
 CitzdGF0aWMgZGFkZHJfdAorZXh0MmZzX2NsdXN0ZXJhbGxvYyhpcCwgY2cs
 IGJwcmVmLCBsZW4sIHVudXNlZCkKKwlzdHJ1Y3QgaW5vZGUgKmlwOworCXVf
 aW50IGNnOworCXVmczJfZGFkZHJfdCBicHJlZjsKKwlpbnQgbGVuOworCWlu
 dCB1bnVzZWQ7Cit7CisJCS8qIE5PVCBJTVBMRU1FTlRFRCAqLworfQorI2Vu
 ZGlmCisKIC8qCiAgKiBEZXRlcm1pbmUgd2hldGhlciBhbiBpbm9kZSBjYW4g
 YmUgYWxsb2NhdGVkLgogICoKZGlmZiAtcnUgZXh0MmZzLm9yaWcvZXh0Ml9k
 aW5vZGUuaCBleHQyZnMvZXh0Ml9kaW5vZGUuaAotLS0gZXh0MmZzLm9yaWcv
 ZXh0Ml9kaW5vZGUuaAkyMDEwLTEyLTI5IDE1OjE0OjIzLjAwMDAwMDAwMCAr
 MDAwMAorKysgZXh0MmZzL2V4dDJfZGlub2RlLmgJMjAxMC0xMi0zMCAyMzox
 ODoyMS4wMDAwMDAwMDAgKzAwMDAKQEAgLTMyLDYgKzMyLDE4IEBACiAjZGVm
 aW5lIGUyZGlfc2l6ZV9oaWdoCWUyZGlfZGFjbAogCiAvKgorICogU3BlY2lh
 bCBpbm9kZSBudW1iZXJzCisgKiBUaGUgcm9vdCBpbm9kZSBpcyB0aGUgcm9v
 dCBvZiB0aGUgZmlsZSBzeXN0ZW0uICBJbm9kZSAwIGNhbid0IGJlIHVzZWQg
 Zm9yCisgKiBub3JtYWwgcHVycG9zZXMgYW5kIGJhZCBibG9ja3MgYXJlIG5v
 cm1hbGx5IGxpbmtlZCB0byBpbm9kZSAxLCB0aHVzCisgKiB0aGUgcm9vdCBp
 bm9kZSBpcyAyLgorICogSW5vZGUgMyB0byAxMCBhcmUgcmVzZXJ2ZWQgaW4g
 ZXh0MmZzLgorICovCisjZGVmaW5lIEVYVDJfQkFEX0lOTwkJIDEJLyogQmFk
 IGJsb2NrcyBpbm9kZSAqLworI2RlZmluZSBFWFQyX1JPT1RfSU5PCQkgMgkv
 KiBSb290IGlub2RlICovCisjZGVmaW5lIEVYVDJfQk9PVF9MT0FERVJfSU5P
 CSA1CS8qIEJvb3QgbG9hZGVyIGlub2RlICovCisjZGVmaW5lIEVYVDJfVU5E
 RUxfRElSX0lOTwkgNgkvKiBVbmRlbGV0ZSBkaXJlY3RvcnkgaW5vZGUgKi8K
 KworLyoKICAqIElub2RlIGZsYWdzCiAgKiBUaGUgY3VycmVudCBpbXBsZW1l
 bnRhdGlvbiB1c2VzIG9ubHkgRVhUMl9JTU1VVEFCTEUgYW5kIEVYVDJfQVBQ
 RU5EIGZsYWdzCiAgKi8KQEAgLTc0LDUgKzg2LDUgQEAKIAl1X2ludDMyX3QJ
 ZTJkaV9saW51eF9yZXNlcnZlZDM7IC8qIDEyNCAqLwogfTsKIAotI2VuZGlm
 IC8qIF9GU19FWFQyRlNfRVhUMl9ESU5PREVfSF8gKi8KKyNlbmRpZiAvKiAh
 X0ZTX0VYVDJGU19FWFQyX0RJTk9ERV9IXyAqLwogCmRpZmYgLXJ1IGV4dDJm
 cy5vcmlnL2V4dDJfbG9va3VwLmMgZXh0MmZzL2V4dDJfbG9va3VwLmMKLS0t
 IGV4dDJmcy5vcmlnL2V4dDJfbG9va3VwLmMJMjAxMC0xMi0yOSAxNToxNDo1
 MS4wMDAwMDAwMDAgKzAwMDAKKysrIGV4dDJmcy9leHQyX2xvb2t1cC5jCTIw
 MTAtMTItMzAgMjM6MTY6MDYuMDAwMDAwMDAwICswMDAwCkBAIC0zNDcsNiAr
 MzQ3LDcgQEAKIAkJc2xvdG5lZWRlZCA9IChzaXplb2Yoc3RydWN0IGRpcmVj
 dCkgLSBNQVhOQU1MRU4gKwogCQkJY25wLT5jbl9uYW1lbGVuICsgMykgJn4g
 MzsgKi8KIAl9CisJYm1hc2sgPSBWRlNUT0VYVDIodmRwLT52X21vdW50KS0+
 dW1fbW91bnRwLT5tbnRfc3RhdC5mX2lvc2l6ZSAtIDE7CiAKIAkvKgogCSAq
 IElmIHRoZXJlIGlzIGNhY2hlZCBpbmZvcm1hdGlvbiBvbiBhIHByZXZpb3Vz
 IHNlYXJjaCBvZgpAQCAtMzU5LDcgKzM2MCw2IEBACiAJICogcHJvZmlsaW5n
 IHRpbWUgYW5kIGhlbmNlIGhhcyBiZWVuIHJlbW92ZWQgaW4gdGhlIGludGVy
 ZXN0CiAJICogb2Ygc2ltcGxpY2l0eS4KIAkgKi8KLQlibWFzayA9IFZGU1RP
 RVhUMih2ZHAtPnZfbW91bnQpLT51bV9tb3VudHAtPm1udF9zdGF0LmZfaW9z
 aXplIC0gMTsKIAlpZiAobmFtZWlvcCAhPSBMT09LVVAgfHwgaV9kaXJvZmYg
 PT0gMCB8fAogCSAgICBpX2Rpcm9mZiA+IGRwLT5pX3NpemUpIHsKIAkJZW50
 cnlvZmZzZXRpbmJsb2NrID0gMDsKZGlmZiAtcnUgZXh0MmZzLm9yaWcvZXh0
 Ml9zdWJyLmMgZXh0MmZzL2V4dDJfc3Vici5jCi0tLSBleHQyZnMub3JpZy9l
 eHQyX3N1YnIuYwkyMDEwLTEyLTI5IDE1OjE1OjA2LjAwMDAwMDAwMCArMDAw
 MAorKysgZXh0MmZzL2V4dDJfc3Vici5jCTIwMTEtMDEtMDIgMjI6MzY6MDUu
 MDAwMDAwMDAwICswMDAwCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlmb3IgKGVw
 ID0gYnVmOyBlcCA8IGVicDsgZXArKykgewogCQlpZiAoZXAgPT0gYnAgfHwg
 KGVwLT5iX2ZsYWdzICYgQl9JTlZBTCkpCiAJCQljb250aW51ZTsKLQkJdnAg
 PSBpcC0+aV9kZXZ2cDsKKwkJdnAgPSBpcC0+aV91bXAtPnVtX2RldnZwOwog
 CQkvKiBsb29rIGZvciBvdmVybGFwICovCiAJCWlmIChlcC0+Yl9iY291bnQg
 PT0gMCB8fCBlcC0+Yl9ibGtubyA+IGxhc3QgfHwKIAkJICAgIGVwLT5iX2Js
 a25vICsgYnRvZGIoZXAtPmJfYmNvdW50KSA8PSBzdGFydCkKZGlmZiAtcnUg
 ZXh0MmZzLm9yaWcvZXh0Ml92ZnNvcHMuYyBleHQyZnMvZXh0Ml92ZnNvcHMu
 YwotLS0gZXh0MmZzLm9yaWcvZXh0Ml92ZnNvcHMuYwkyMDEwLTEyLTI5IDE1
 OjE1OjExLjAwMDAwMDAwMCArMDAwMAorKysgZXh0MmZzL2V4dDJfdmZzb3Bz
 LmMJMjAxMC0xMi0zMSAxMDowMToyOC4wMDAwMDAwMDAgKzAwMDAKQEAgLTk1
 LDkgKzk1LDkgQEAKIHN0YXRpYyBpbnQJY29tcHV0ZV9zYl9kYXRhKHN0cnVj
 dCB2bm9kZSAqIGRldnZwLAogCQkgICAgc3RydWN0IGV4dDJmcyAqIGVzLCBz
 dHJ1Y3QgbV9leHQyZnMgKiBmcyk7CiAKLXN0YXRpYyBjb25zdCBjaGFyICpl
 eHQyX29wdHNbXSA9IHsgImZyb20iLCAiZXhwb3J0IiwgImFjbHMiLCAibm9l
 eGVjIiwKLSAgICAibm9hdGltZSIsICJ1bmlvbiIsICJzdWlkZGlyIiwgIm11
 bHRpbGFiZWwiLCAibm9zeW1mb2xsb3ciLAotICAgICJub2NsdXN0ZXJyIiwg
 Im5vY2x1c3RlcnciLCAiZm9yY2UiLCBOVUxMIH07CitzdGF0aWMgY29uc3Qg
 Y2hhciAqZXh0Ml9vcHRzW10gPSB7ICJhY2xzIiwgImFzeW5jIiwgIm5vYXRp
 bWUiLCAibm9jbHVzdGVyciIsIAorICAgICJub2NsdXN0ZXJ3IiwgIm5vZXhl
 YyIsICJleHBvcnQiLCAiZm9yY2UiLCAiZnJvbSIsICJtdWx0aWxhYmVsIiwK
 KyAgICAic3VpZGRpciIsICJub3N5bWZvbGxvdyIsICJzeW5jIiwgInVuaW9u
 IiwgTlVMTCB9OwogCiAvKgogICogVkZTIE9wZXJhdGlvbnMuCkBAIC05NDUs
 OSArOTQ1LDggQEAKIAl9CiAKIAkvKgotCSAqIEZpbmlzaCBpbm9kZSBpbml0
 aWFsaXphdGlvbiBub3cgdGhhdCBhbGlhc2luZyBoYXMgYmVlbiByZXNvbHZl
 ZC4KKwkgKiBGaW5pc2ggaW5vZGUgaW5pdGlhbGl6YXRpb24uCiAJICovCi0J
 aXAtPmlfZGV2dnAgPSB1bXAtPnVtX2RldnZwOwogCiAJLyoKIAkgKiBTZXQg
 dXAgYSBnZW5lcmF0aW9uIG51bWJlciBmb3IgdGhpcyBpbm9kZSBpZiBpdCBk
 b2VzIG5vdApkaWZmIC1ydSBleHQyZnMub3JpZy9leHQyZnMuaCBleHQyZnMv
 ZXh0MmZzLmgKLS0tIGV4dDJmcy5vcmlnL2V4dDJmcy5oCTIwMTAtMTItMjkg
 MTU6MTU6MjEuMDAwMDAwMDAwICswMDAwCisrKyBleHQyZnMvZXh0MmZzLmgJ
 MjAxMC0xMi0zMCAyMzoxODoyMS4wMDAwMDAwMDAgKzAwMDAKQEAgLTM5LDIy
 ICszOSw2IEBACiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAotLyoKLSAq
 IFNwZWNpYWwgaW5vZGUgbnVtYmVycwotICovCi0jZGVmaW5lCUVYVDJfQkFE
 X0lOTwkJIDEJLyogQmFkIGJsb2NrcyBpbm9kZSAqLwotI2RlZmluZSBFWFQy
 X1JPT1RfSU5PCQkgMgkvKiBSb290IGlub2RlICovCi0jZGVmaW5lIEVYVDJf
 Qk9PVF9MT0FERVJfSU5PCSA1CS8qIEJvb3QgbG9hZGVyIGlub2RlICovCi0j
 ZGVmaW5lIEVYVDJfVU5ERUxfRElSX0lOTwkgNgkvKiBVbmRlbGV0ZSBkaXJl
 Y3RvcnkgaW5vZGUgKi8KLQotLyogRmlyc3Qgbm9uLXJlc2VydmVkIGlub2Rl
 IGZvciBvbGQgZXh0MiBmaWxlc3lzdGVtcyAqLwotI2RlZmluZSBFMkZTX1JF
 VjBfRklSU1RfSU5PCTExCi0KLS8qCi0gKiBUaGUgc2Vjb25kIGV4dGVuZGVk
 IGZpbGUgc3lzdGVtIG1hZ2ljIG51bWJlcgotICovCi0jZGVmaW5lIEUyRlNf
 TUFHSUMJCTB4RUY1MwotCiAjaWYgZGVmaW5lZChfS0VSTkVMKQogLyoKICAq
 IEZyZWVCU0QgcGFzc2VzIHRoZSBwb2ludGVyIHRvIHRoZSBpbi1jb3JlIHN0
 cnVjdCB3aXRoIHJlbGV2YW50CkBAIC0xMjksNyArMTEzLDkgQEAKIAl1X2lu
 dDhfdCAgIGUyZnNfdXVpZFsxNl07CS8qIDEyOC1iaXQgdXVpZCBmb3Igdm9s
 dW1lICovCiAJY2hhciAgICAgICBlMmZzX3ZuYW1lWzE2XTsJLyogdm9sdW1l
 IG5hbWUgKi8KIAljaGFyICAgICAgIGUyZnNfZnNtbnRbNjRdOyAJLyogbmFt
 ZSBtb3VudGVkIG9uICovCi0JdV9pbnQzMl90ICBlMmZzX2FsZ287CQkvKiBG
 b3IgY29tY2F0ZSBmb3IgZGlyICovCisJdV9pbnQzMl90ICBlMmZzX2FsZ287
 CQkvKiBmb3IgY29tcHJlc3Npb24gKi8KKwl1aW50OF90CSAgIGUyZnNfcHJl
 YWxsb2M7CS8qICMgb2YgYmxvY2tzIHRvIHByZWFsbG9jYXRlICovCisJdWlu
 dDhfdAkgICBlMmZzX2Rpcl9wcmVhbGxvYzsJLyogIyBvZiBibG9ja3MgdG8g
 cHJlYWxsb2NhdGUgZm9yIGRpciAqLwogCXVfaW50MTZfdCAgZTJmc19yZXNl
 cnZlZF9uZ2RiOyAvKiAjIG9mIHJlc2VydmVkIGdkIGJsb2NrcyBmb3IgcmVz
 aXplICovCiAJdV9pbnQzMl90ICByZXNlcnZlZDJbMjA0XTsKIH07CkBAIC0x
 NTMsOCArMTM5LDggQEAKIAl1aW50MzJfdCBlMmZzX2JzaGlmdDsgICAgIC8q
 IGNhbGMgb2YgbG9naWNhbCBibG9jayBubyAqLwogCWludDMyX3QgZTJmc19i
 bWFzazsgICAgICAgLyogY2FsYyBvZiBibG9jayBvZmZzZXQgKi8KIAlpbnQz
 Ml90IGUyZnNfYnBnOyAgICAgICAgIC8qIE51bWJlciBvZiBibG9ja3MgcGVy
 IGdyb3VwICovCi0JaW50NjRfdCBlMmZzX3FibWFzazsgICAgICAgLyogPSBz
 X2Jsb2Nrc2l6ZSAtMSAqLwotCXVpbnQzMl90IGUyZnNfZnNidG9kYjsgICAg
 IC8qIFNoaWZ0IHRvIGdldCBkaXNrIGJsb2NrICovCisJaW50NjRfdCBlMmZz
 X3FibWFzazsgICAgICAvKiA9IHNfYmxvY2tzaXplIC0xICovCisJdWludDMy
 X3QgZTJmc19mc2J0b2RiOyAgICAvKiBTaGlmdCB0byBnZXQgZGlzayBibG9j
 ayAqLwogCXVpbnQzMl90IGUyZnNfaXBnOyAgICAgICAgLyogTnVtYmVyIG9m
 IGlub2RlcyBwZXIgZ3JvdXAgKi8KIAl1aW50MzJfdCBlMmZzX2lwYjsgICAg
 ICAgIC8qIE51bWJlciBvZiBpbm9kZXMgcGVyIGJsb2NrICovCiAJdWludDMy
 X3QgZTJmc19pdHBnOyAgICAgICAvKiBOdW1iZXIgb2YgaW5vZGUgdGFibGUg
 cGVyIGdyb3VwICovCkBAIC0xNjksOCArMTU1LDggQEAKIAlpbnQzMl90ICBl
 MmZzX2lzaXplOyAgICAgIC8qIFNpemUgb2YgaW5vZGUgKi8KIAl1aW50MzJf
 dCBlMmZzX21vdW50X29wdDsKIAl1aW50MzJfdCBlMmZzX2Jsb2Nrc2l6ZV9i
 aXRzOworCXVpbnQ4X3QJKmUyZnNfY29udGlnZGlyczsgLyogKHUpICMgb2Yg
 Y29udGlnLiBhbGxvY2F0ZWQgZGlycyAqLwogCXVpbnQzMl90IGUyZnNfdG90
 YWxfZGlyOyAgLyogVG90YWwgbnVtYmVyIG9mIGRpcmVjdG9yaWVzICovCi0J
 dWludDhfdAkqZTJmc19jb250aWdkaXJzOwogCWNoYXIgZTJmc193YXN2YWxp
 ZDsgICAgICAgLyogdmFsaWQgYXQgbW91bnQgdGltZSAqLwogCW9mZl90IGUy
 ZnNfbWF4ZmlsZXNpemU7CiAJc3RydWN0IGV4dDJfZ2QgKmUyZnNfZ2Q7IC8q
 IEdyb3VwIERlc2NyaXB0b3JzICovCkBAIC0xODIsNiArMTY4LDE0IEBACiAj
 ZGVmaW5lIEUyRlNfREFURQkJIjk1LzA4LzA5IgogI2RlZmluZSBFMkZTX1ZF
 UlNJT04JCSIwLjViIgogCisvKiBGaXJzdCBub24tcmVzZXJ2ZWQgaW5vZGUg
 Zm9yIG9sZCBleHQyIGZpbGVzeXN0ZW1zICovCisjZGVmaW5lIEUyRlNfUkVW
 MF9GSVJTVF9JTk8JMTEKKworLyoKKyAqIFRoZSBzZWNvbmQgZXh0ZW5kZWQg
 ZmlsZSBzeXN0ZW0gbWFnaWMgbnVtYmVyCisgKi8KKyNkZWZpbmUgRTJGU19N
 QUdJQwkJMHhFRjUzCisKIC8qCiAgKiBSZXZpc2lvbiBsZXZlbHMKICAqLwpA
 QCAtMTk3LDYgKzE5MSw3IEBACiAgKiBjb21wYXRpYmxlL2luY29tcGF0aWJs
 ZSBmZWF0dXJlcwogICovCiAjZGVmaW5lIEVYVDJGX0NPTVBBVF9QUkVBTExP
 QwkJMHgwMDAxCisjZGVmaW5lIEVYVDJGX0NPTVBBVF9IQVNKT1VSTkFMCQkw
 eDAwMDQKICNkZWZpbmUgRVhUMkZfQ09NUEFUX1JFU0laRQkJMHgwMDEwCiAK
 ICNkZWZpbmUgRVhUMkZfUk9DT01QQVRfU1BBUlNFU1VQRVIJMHgwMDAxCkBA
 IC0zMjYsNCArMzIxLDQgQEAKIAogI2VuZGlmCiAKLSNlbmRpZgkvKiBfTElO
 VVhfRVhUMl9GU19IICovCisjZW5kaWYJLyogIV9GU19FWFQyRlNfRVhUMkZT
 X0ggKi8KZGlmZiAtcnUgZXh0MmZzLm9yaWcvaW5vZGUuaCBleHQyZnMvaW5v
 ZGUuaAotLS0gZXh0MmZzLm9yaWcvaW5vZGUuaAkyMDEwLTEyLTI5IDE1OjE1
 OjMwLjAwMDAwMDAwMCArMDAwMAorKysgZXh0MmZzL2lub2RlLmgJMjAxMC0x
 Mi0zMCAyMzoxNjowNi4wMDAwMDAwMDAgKzAwMDAKQEAgLTYyLDcgKzYyLDYg
 QEAKICAqLwogc3RydWN0IGlub2RlIHsKIAlzdHJ1Y3QJdm5vZGUgICppX3Zu
 b2RlOy8qIFZub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlub2RlLiAqLwot
 CXN0cnVjdAl2bm9kZSAgKmlfZGV2dnA7LyogVm5vZGUgZm9yIGJsb2NrIEkv
 Ty4gKi8KIAlzdHJ1Y3QJZXh0Mm1vdW50ICppX3VtcDsKIAl1X2ludDMyX3Qg
 aV9mbGFnOwkvKiBmbGFncywgc2VlIGJlbG93ICovCiAJaW5vX3QJICBpX251
 bWJlcjsJLyogVGhlIGlkZW50aXR5IG9mIHRoZSBpbm9kZS4gKi8KQEAgLTE0
 Myw2ICsxNDIsOSBAQAogI2RlZmluZQlJTl9TUEFDRUNPVU5URUQJMHgwMDgw
 CQkvKiBCbG9ja3MgdG8gYmUgZnJlZWQgaW4gZnJlZSBjb3VudC4gKi8KICNk
 ZWZpbmUgSU5fTEFaWUFDQ0VTUyAgIDB4MDEwMAkJLyogUHJvY2VzcyBJTl9B
 Q0NFU1MgYWZ0ZXIgdGhlCiAJCQkJCSAgICBzdXNwZW5zaW9uIGZpbmlzaGVk
 ICovCisKKyNkZWZpbmUgaV9kZXZ2cCBpX3VtcC0+dW1fZGV2dnAKKwogI2lm
 ZGVmIF9LRVJORUwKIC8qCiAgKiBTdHJ1Y3R1cmUgdXNlZCB0byBwYXNzIGFy
 b3VuZCBsb2dpY2FsIGJsb2NrIHBhdGhzIGdlbmVyYXRlZCBieQo=
 
 --0-493483054-1294026608=:21492--
Responsible-Changed-From-To: freebsd-bugs->freebsd-fs 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Mon Jan 3 20:58:15 UTC 2011 
Responsible-Changed-Why:  
Over to maintainer(s). 

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

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/153584: [ext2fs] [patch] Performance fix and cleanups for BSD licensed ext2fs
Date: Tue, 18 Jan 2011 13:24:51 -0800 (PST)

 --0-1498478816-1295385891=:52958
 Content-Type: text/plain; charset=us-ascii
 
 Oops.. cleanup some comments that were not supposed to be there.
 
 While here, I should mention that Bruce Evans' patch has been giving some great results with blogbench:
 
 http://blogs.freebsdish.org/liuzheng/2011/01/10/ext2fs-performance-benchmark-blogbench/
 
 and bonnie++
 http://blogs.freebsdish.org/liuzheng/2011/01/18/ext2fs-performance-benchmark-bonnie/
 
 
       
 --0-1498478816-1295385891=:52958
 Content-Type: text/plain; name="patch-ext2fs.txt"
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename="patch-ext2fs.txt"
 
 ZGlmZiAtcnUgZXh0MmZzLm9yaWcvZXh0Ml9hbGxvYy5jIGV4dDJmcy9leHQy
 X2FsbG9jLmMKLS0tIGV4dDJmcy5vcmlnL2V4dDJfYWxsb2MuYwkyMDExLTAx
 LTE4IDE1OjQwOjMyLjAwMDAwMDAwMCArMDAwMAorKysgZXh0MmZzL2V4dDJf
 YWxsb2MuYwkyMDExLTAxLTE4IDE1OjUwOjM1LjAwMDAwMDAwMCArMDAwMApA
 QCAtNTksNiArNTksMTAgQEAKIAkJCQkJCWludCkpOwogc3RhdGljIGRhZGRy
 X3QJZXh0Ml9ub2RlYWxsb2NjZyhzdHJ1Y3QgaW5vZGUgKiwgaW50LCBkYWRk
 cl90LCBpbnQpOwogc3RhdGljIGRhZGRyX3QgIGV4dDJfbWFwc2VhcmNoKHN0
 cnVjdCBtX2V4dDJmcyAqLCBjaGFyICosIGRhZGRyX3QpOworI2lmZGVmIEZB
 TkNZX1JFQUxMT0MKK3N0YXRpYyBpbnQJZXh0Ml9yZWFsbG9jYmxrcyhzdHJ1
 Y3Qgdm9wX3JlYWxsb2NibGtzX2FyZ3MgKik7CisjZW5kaWYKKwogLyoKICAq
 IEFsbG9jYXRlIGEgYmxvY2sgaW4gdGhlIGZpbGUgc3lzdGVtLgogICoKQEAg
 LTc2LDcgKzgwLDYgQEAKICAqICAgMikgcXVhZHJhZGljYWxseSByZWhhc2gg
 aW50byBvdGhlciBjeWxpbmRlciBncm91cHMsIHVudGlsIGFuCiAgKiAgICAg
 ICAgYXZhaWxhYmxlIGJsb2NrIGlzIGxvY2F0ZWQuCiAgKi8KLQogaW50CiBl
 eHQyX2FsbG9jKGlwLCBsYm4sIGJwcmVmLCBzaXplLCBjcmVkLCBibnApCiAJ
 c3RydWN0IGlub2RlICppcDsKQEAgLTExNiw2ICsxMTksMTAgQEAKICAgICAg
 ICAgYm5vID0gKGRhZGRyX3QpZXh0Ml9oYXNoYWxsb2MoaXAsIGNnLCBicHJl
 ZiwgZnMtPmUyZnNfYnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgICAgICAgICAgICAgZXh0Ml9hbGxvY2NnKTsKICAgICAg
 ICAgaWYgKGJubyA+IDApIHsKKwkJLyogc2V0IG5leHRfYWxsb2MgZmllbGRz
 IGFzIGRvbmUgaW4gYmxvY2tfZ2V0YmxrICovCisJCWlwLT5pX25leHRfYWxs
 b2NfYmxvY2sgPSBsYm47CisJCWlwLT5pX25leHRfYWxsb2NfZ29hbCA9IGJu
 bzsKKwogICAgICAgICAgICAgICAgIGlwLT5pX2Jsb2NrcyArPSBidG9kYihm
 cy0+ZTJmc19ic2l6ZSk7CiAgICAgICAgICAgICAgICAgaXAtPmlfZmxhZyB8
 PSBJTl9DSEFOR0UgfCBJTl9VUERBVEU7CiAgICAgICAgICAgICAgICAgKmJu
 cCA9IGJubzsKQEAgLTE0NCw5ICsxNTEsMTMgQEAKICAqLwogCiAjaWZkZWYg
 RkFOQ1lfUkVBTExPQwotI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KK1NZU0NU
 TF9OT0RFKF92ZnMsIE9JRF9BVVRPLCBleHQyLCBDVExGTEFHX1JXLCAwLCAi
 RVhUMkZTIGZpbGVzeXN0ZW0iKTsKKwogc3RhdGljIGludCBkb2FzeW5jZnJl
 ZSA9IDE7CitTWVNDVExfSU5UKF92ZnNfZXh0MiwgT0lEX0FVVE8sIGRvYXN5
 bmNmcmVlLCBDVExGTEFHX1JXLCAmZG9hc3luY2ZyZWUsIDAsICIiKTsKKwog
 c3RhdGljIGludCBkb3JlYWxsb2NibGtzID0gMTsKK1NZU0NUTF9JTlQoX3Zm
 c19leHQycywgT0lEX0FVVE8sIGRvcmVhbGxvY2Jsa3MsIENUTEZMQUdfUlcs
 ICZkb3JlYWxsb2NibGtzLCAwLCAiIik7CiAKICNpZmRlZglPUFRfREVCVUcK
 IFNZU0NUTF9JTlQoX2RlYnVnLCAxNCwgZG9hc3luY2ZyZWUsIENUTEZMQUdf
 UlcsICZkb2FzeW5jZnJlZSwgMCwgIiIpOwpAQCAtMjIyLDcgKzIzMyw3IEBA
 CiAJLyoKIAkgKiBGaW5kIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gZm9yIHRo
 ZSBjbHVzdGVyLgogCSAqLwotCUVYVDJfTE9DSyh1bXApOyAKKwlFWFQyX0xP
 Q0sodW1wKTsKIAlwcmVmID0gZXh0Ml9ibGtwcmVmKGlwLCBzdGFydF9sYm4s
 IHNvZmYsIHNiYXAsIGJsa25vKTsKIAkvKgogCSAqIElmIHRoZSBibG9jayBy
 YW5nZSBzcGFucyB0d28gYmxvY2sgbWFwcywgZ2V0IHRoZSBzZWNvbmQgbWFw
 LgpAQCAtNjI1LDcgKzYzNiw3IEBACiAJc3RydWN0IG1fZXh0MmZzICpmczsK
 IAlzdHJ1Y3QgYnVmICpicDsKIAlzdHJ1Y3QgZXh0Mm1vdW50ICp1bXA7Ci0J
 aW50IGVycm9yLCBibm8sIHN0YXJ0LCBlbmQsIGxvYzsKKwlpbnQgZXJyb3Is
 IGJubzsKIAljaGFyICpiYnA7CiAJLyogWFhYIG9uZGlzazMyICovCiAJZnMg
 PSBpcC0+aV9lMmZzOwpAQCAtNjU4LDI2ICs2NjksNyBAQAogCS8qCiAJICog
 bm8gYmxvY2tzIGluIHRoZSByZXF1ZXN0ZWQgY3lsaW5kZXIsIHNvIHRha2Ug
 bmV4dAogCSAqIGF2YWlsYWJsZSBvbmUgaW4gdGhpcyBjeWxpbmRlciBncm91
 cC4KLQkgKiBmaXJzdCB0cnkgdG8gZ2V0IDggY29udGlnb3VzIGJsb2Nrcywg
 dGhlbiBmYWxsIGJhY2sgdG8gYSBzaW5nbGUKLQkgKiBibG9jay4KIAkgKi8K
 LQlpZiAoYnByZWYpCi0JCXN0YXJ0ID0gZHRvZ2QoZnMsIGJwcmVmKSAvIE5C
 Qlk7Ci0JZWxzZQotCQlzdGFydCA9IDA7Ci0JZW5kID0gaG93bWFueShmcy0+
 ZTJmcy0+ZTJmc19mcGcsIE5CQlkpIC0gc3RhcnQ7Ci0JZm9yIChsb2MgPSBz
 dGFydDsgbG9jIDwgZW5kOyBsb2MrKykgewotCQlpZiAoYmJwW2xvY10gPT0g
 MCkgewotCQkJYm5vID0gbG9jICogTkJCWTsKLQkJCWdvdG8gZ290aXQ7Ci0J
 CX0KLQl9Ci0JZm9yIChsb2MgPSAwOyBsb2MgPCBzdGFydDsgbG9jKyspIHsK
 LQkJaWYgKGJicFtsb2NdID09IDApIHsKLQkJCWJubyA9IGxvYyAqIE5CQlk7
 Ci0JCQlnb3RvIGdvdGl0OwotCQl9Ci0JfQogCiAJYm5vID0gZXh0Ml9tYXBz
 ZWFyY2goZnMsIGJicCwgYnByZWYpOwogCWlmIChibm8gPCAwKXsKT25seSBp
 biBleHQyZnM6IGV4dDJfYWxsb2MuY34KZGlmZiAtcnUgZXh0MmZzLm9yaWcv
 ZXh0Ml9kaW5vZGUuaCBleHQyZnMvZXh0Ml9kaW5vZGUuaAotLS0gZXh0MmZz
 Lm9yaWcvZXh0Ml9kaW5vZGUuaAkyMDExLTAxLTE4IDE1OjQwOjMyLjAwMDAw
 MDAwMCArMDAwMAorKysgZXh0MmZzL2V4dDJfZGlub2RlLmgJMjAxMS0wMS0x
 OCAxNTo0Mjo0NS4wMDAwMDAwMDAgKzAwMDAKQEAgLTMyLDYgKzMyLDE4IEBA
 CiAjZGVmaW5lIGUyZGlfc2l6ZV9oaWdoCWUyZGlfZGFjbAogCiAvKgorICog
 U3BlY2lhbCBpbm9kZSBudW1iZXJzCisgKiBUaGUgcm9vdCBpbm9kZSBpcyB0
 aGUgcm9vdCBvZiB0aGUgZmlsZSBzeXN0ZW0uICBJbm9kZSAwIGNhbid0IGJl
 IHVzZWQgZm9yCisgKiBub3JtYWwgcHVycG9zZXMgYW5kIGJhZCBibG9ja3Mg
 YXJlIG5vcm1hbGx5IGxpbmtlZCB0byBpbm9kZSAxLCB0aHVzCisgKiB0aGUg
 cm9vdCBpbm9kZSBpcyAyLgorICogSW5vZGUgMyB0byAxMCBhcmUgcmVzZXJ2
 ZWQgaW4gZXh0MmZzLgorICovCisjZGVmaW5lIEVYVDJfQkFEX0lOTwkJIDEJ
 LyogQmFkIGJsb2NrcyBpbm9kZSAqLworI2RlZmluZSBFWFQyX1JPT1RfSU5P
 CQkgMgkvKiBSb290IGlub2RlICovCisjZGVmaW5lIEVYVDJfQk9PVF9MT0FE
 RVJfSU5PCSA1CS8qIEJvb3QgbG9hZGVyIGlub2RlICovCisjZGVmaW5lIEVY
 VDJfVU5ERUxfRElSX0lOTwkgNgkvKiBVbmRlbGV0ZSBkaXJlY3RvcnkgaW5v
 ZGUgKi8KKworLyoKICAqIElub2RlIGZsYWdzCiAgKiBUaGUgY3VycmVudCBp
 bXBsZW1lbnRhdGlvbiB1c2VzIG9ubHkgRVhUMl9JTU1VVEFCTEUgYW5kIEVY
 VDJfQVBQRU5EIGZsYWdzCiAgKi8KQEAgLTc0LDUgKzg2LDUgQEAKIAl1X2lu
 dDMyX3QJZTJkaV9saW51eF9yZXNlcnZlZDM7IC8qIDEyNCAqLwogfTsKIAot
 I2VuZGlmIC8qIF9GU19FWFQyRlNfRVhUMl9ESU5PREVfSF8gKi8KKyNlbmRp
 ZiAvKiAhX0ZTX0VYVDJGU19FWFQyX0RJTk9ERV9IXyAqLwogCmRpZmYgLXJ1
 IGV4dDJmcy5vcmlnL2V4dDJfbG9va3VwLmMgZXh0MmZzL2V4dDJfbG9va3Vw
 LmMKLS0tIGV4dDJmcy5vcmlnL2V4dDJfbG9va3VwLmMJMjAxMS0wMS0xOCAx
 NTo0MDozMi4wMDAwMDAwMDAgKzAwMDAKKysrIGV4dDJmcy9leHQyX2xvb2t1
 cC5jCTIwMTEtMDEtMTggMTU6NDI6NDUuMDAwMDAwMDAwICswMDAwCkBAIC0z
 NDcsNiArMzQ3LDcgQEAKIAkJc2xvdG5lZWRlZCA9IChzaXplb2Yoc3RydWN0
 IGRpcmVjdCkgLSBNQVhOQU1MRU4gKwogCQkJY25wLT5jbl9uYW1lbGVuICsg
 MykgJn4gMzsgKi8KIAl9CisJYm1hc2sgPSBWRlNUT0VYVDIodmRwLT52X21v
 dW50KS0+dW1fbW91bnRwLT5tbnRfc3RhdC5mX2lvc2l6ZSAtIDE7CiAKIAkv
 KgogCSAqIElmIHRoZXJlIGlzIGNhY2hlZCBpbmZvcm1hdGlvbiBvbiBhIHBy
 ZXZpb3VzIHNlYXJjaCBvZgpAQCAtMzU5LDcgKzM2MCw2IEBACiAJICogcHJv
 ZmlsaW5nIHRpbWUgYW5kIGhlbmNlIGhhcyBiZWVuIHJlbW92ZWQgaW4gdGhl
 IGludGVyZXN0CiAJICogb2Ygc2ltcGxpY2l0eS4KIAkgKi8KLQlibWFzayA9
 IFZGU1RPRVhUMih2ZHAtPnZfbW91bnQpLT51bV9tb3VudHAtPm1udF9zdGF0
 LmZfaW9zaXplIC0gMTsKIAlpZiAobmFtZWlvcCAhPSBMT09LVVAgfHwgaV9k
 aXJvZmYgPT0gMCB8fAogCSAgICBpX2Rpcm9mZiA+IGRwLT5pX3NpemUpIHsK
 IAkJZW50cnlvZmZzZXRpbmJsb2NrID0gMDsKZGlmZiAtcnUgZXh0MmZzLm9y
 aWcvZXh0Ml9zdWJyLmMgZXh0MmZzL2V4dDJfc3Vici5jCi0tLSBleHQyZnMu
 b3JpZy9leHQyX3N1YnIuYwkyMDExLTAxLTE4IDE1OjQwOjMyLjAwMDAwMDAw
 MCArMDAwMAorKysgZXh0MmZzL2V4dDJfc3Vici5jCTIwMTEtMDEtMTggMTU6
 NDI6NDUuMDAwMDAwMDAwICswMDAwCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlm
 b3IgKGVwID0gYnVmOyBlcCA8IGVicDsgZXArKykgewogCQlpZiAoZXAgPT0g
 YnAgfHwgKGVwLT5iX2ZsYWdzICYgQl9JTlZBTCkpCiAJCQljb250aW51ZTsK
 LQkJdnAgPSBpcC0+aV9kZXZ2cDsKKwkJdnAgPSBpcC0+aV91bXAtPnVtX2Rl
 dnZwOwogCQkvKiBsb29rIGZvciBvdmVybGFwICovCiAJCWlmIChlcC0+Yl9i
 Y291bnQgPT0gMCB8fCBlcC0+Yl9ibGtubyA+IGxhc3QgfHwKIAkJICAgIGVw
 LT5iX2Jsa25vICsgYnRvZGIoZXAtPmJfYmNvdW50KSA8PSBzdGFydCkKZGlm
 ZiAtcnUgZXh0MmZzLm9yaWcvZXh0Ml92ZnNvcHMuYyBleHQyZnMvZXh0Ml92
 ZnNvcHMuYwotLS0gZXh0MmZzLm9yaWcvZXh0Ml92ZnNvcHMuYwkyMDExLTAx
 LTE4IDE1OjQwOjMyLjAwMDAwMDAwMCArMDAwMAorKysgZXh0MmZzL2V4dDJf
 dmZzb3BzLmMJMjAxMS0wMS0xOCAxNTo0Mjo0NS4wMDAwMDAwMDAgKzAwMDAK
 QEAgLTk1LDkgKzk1LDkgQEAKIHN0YXRpYyBpbnQJY29tcHV0ZV9zYl9kYXRh
 KHN0cnVjdCB2bm9kZSAqIGRldnZwLAogCQkgICAgc3RydWN0IGV4dDJmcyAq
 IGVzLCBzdHJ1Y3QgbV9leHQyZnMgKiBmcyk7CiAKLXN0YXRpYyBjb25zdCBj
 aGFyICpleHQyX29wdHNbXSA9IHsgImZyb20iLCAiZXhwb3J0IiwgImFjbHMi
 LCAibm9leGVjIiwKLSAgICAibm9hdGltZSIsICJ1bmlvbiIsICJzdWlkZGly
 IiwgIm11bHRpbGFiZWwiLCAibm9zeW1mb2xsb3ciLAotICAgICJub2NsdXN0
 ZXJyIiwgIm5vY2x1c3RlcnciLCAiZm9yY2UiLCBOVUxMIH07CitzdGF0aWMg
 Y29uc3QgY2hhciAqZXh0Ml9vcHRzW10gPSB7ICJhY2xzIiwgImFzeW5jIiwg
 Im5vYXRpbWUiLCAibm9jbHVzdGVyciIsIAorICAgICJub2NsdXN0ZXJ3Iiwg
 Im5vZXhlYyIsICJleHBvcnQiLCAiZm9yY2UiLCAiZnJvbSIsICJtdWx0aWxh
 YmVsIiwKKyAgICAic3VpZGRpciIsICJub3N5bWZvbGxvdyIsICJzeW5jIiwg
 InVuaW9uIiwgTlVMTCB9OwogCiAvKgogICogVkZTIE9wZXJhdGlvbnMuCkBA
 IC05NDUsOSArOTQ1LDggQEAKIAl9CiAKIAkvKgotCSAqIEZpbmlzaCBpbm9k
 ZSBpbml0aWFsaXphdGlvbiBub3cgdGhhdCBhbGlhc2luZyBoYXMgYmVlbiBy
 ZXNvbHZlZC4KKwkgKiBGaW5pc2ggaW5vZGUgaW5pdGlhbGl6YXRpb24uCiAJ
 ICovCi0JaXAtPmlfZGV2dnAgPSB1bXAtPnVtX2RldnZwOwogCiAJLyoKIAkg
 KiBTZXQgdXAgYSBnZW5lcmF0aW9uIG51bWJlciBmb3IgdGhpcyBpbm9kZSBp
 ZiBpdCBkb2VzIG5vdApkaWZmIC1ydSBleHQyZnMub3JpZy9leHQyZnMuaCBl
 eHQyZnMvZXh0MmZzLmgKLS0tIGV4dDJmcy5vcmlnL2V4dDJmcy5oCTIwMTEt
 MDEtMTggMTU6NDA6MzIuMDAwMDAwMDAwICswMDAwCisrKyBleHQyZnMvZXh0
 MmZzLmgJMjAxMS0wMS0xOCAxNTo1NTozNC4wMDAwMDAwMDAgKzAwMDAKQEAg
 LTM5LDIyICszOSw2IEBACiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAot
 LyoKLSAqIFNwZWNpYWwgaW5vZGUgbnVtYmVycwotICovCi0jZGVmaW5lCUVY
 VDJfQkFEX0lOTwkJIDEJLyogQmFkIGJsb2NrcyBpbm9kZSAqLwotI2RlZmlu
 ZSBFWFQyX1JPT1RfSU5PCQkgMgkvKiBSb290IGlub2RlICovCi0jZGVmaW5l
 IEVYVDJfQk9PVF9MT0FERVJfSU5PCSA1CS8qIEJvb3QgbG9hZGVyIGlub2Rl
 ICovCi0jZGVmaW5lIEVYVDJfVU5ERUxfRElSX0lOTwkgNgkvKiBVbmRlbGV0
 ZSBkaXJlY3RvcnkgaW5vZGUgKi8KLQotLyogRmlyc3Qgbm9uLXJlc2VydmVk
 IGlub2RlIGZvciBvbGQgZXh0MiBmaWxlc3lzdGVtcyAqLwotI2RlZmluZSBF
 MkZTX1JFVjBfRklSU1RfSU5PCTExCi0KLS8qCi0gKiBUaGUgc2Vjb25kIGV4
 dGVuZGVkIGZpbGUgc3lzdGVtIG1hZ2ljIG51bWJlcgotICovCi0jZGVmaW5l
 IEUyRlNfTUFHSUMJCTB4RUY1MwotCiAjaWYgZGVmaW5lZChfS0VSTkVMKQog
 LyoKICAqIEZyZWVCU0QgcGFzc2VzIHRoZSBwb2ludGVyIHRvIHRoZSBpbi1j
 b3JlIHN0cnVjdCB3aXRoIHJlbGV2YW50CkBAIC0xNTMsOCArMTM3LDggQEAK
 IAl1aW50MzJfdCBlMmZzX2JzaGlmdDsgICAgIC8qIGNhbGMgb2YgbG9naWNh
 bCBibG9jayBubyAqLwogCWludDMyX3QgZTJmc19ibWFzazsgICAgICAgLyog
 Y2FsYyBvZiBibG9jayBvZmZzZXQgKi8KIAlpbnQzMl90IGUyZnNfYnBnOyAg
 ICAgICAgIC8qIE51bWJlciBvZiBibG9ja3MgcGVyIGdyb3VwICovCi0JaW50
 NjRfdCBlMmZzX3FibWFzazsgICAgICAgLyogPSBzX2Jsb2Nrc2l6ZSAtMSAq
 LwotCXVpbnQzMl90IGUyZnNfZnNidG9kYjsgICAgIC8qIFNoaWZ0IHRvIGdl
 dCBkaXNrIGJsb2NrICovCisJaW50NjRfdCBlMmZzX3FibWFzazsgICAgICAv
 KiA9IHNfYmxvY2tzaXplIC0xICovCisJdWludDMyX3QgZTJmc19mc2J0b2Ri
 OyAgICAvKiBTaGlmdCB0byBnZXQgZGlzayBibG9jayAqLwogCXVpbnQzMl90
 IGUyZnNfaXBnOyAgICAgICAgLyogTnVtYmVyIG9mIGlub2RlcyBwZXIgZ3Jv
 dXAgKi8KIAl1aW50MzJfdCBlMmZzX2lwYjsgICAgICAgIC8qIE51bWJlciBv
 ZiBpbm9kZXMgcGVyIGJsb2NrICovCiAJdWludDMyX3QgZTJmc19pdHBnOyAg
 ICAgICAvKiBOdW1iZXIgb2YgaW5vZGUgdGFibGUgcGVyIGdyb3VwICovCkBA
 IC0xNjksOCArMTUzLDggQEAKIAlpbnQzMl90ICBlMmZzX2lzaXplOyAgICAg
 IC8qIFNpemUgb2YgaW5vZGUgKi8KIAl1aW50MzJfdCBlMmZzX21vdW50X29w
 dDsKIAl1aW50MzJfdCBlMmZzX2Jsb2Nrc2l6ZV9iaXRzOworCXVpbnQ4X3QJ
 KmUyZnNfY29udGlnZGlyczsgLyogKHUpICMgb2YgY29udGlnLiBhbGxvY2F0
 ZWQgZGlycyAqLwogCXVpbnQzMl90IGUyZnNfdG90YWxfZGlyOyAgLyogVG90
 YWwgbnVtYmVyIG9mIGRpcmVjdG9yaWVzICovCi0JdWludDhfdAkqZTJmc19j
 b250aWdkaXJzOwogCWNoYXIgZTJmc193YXN2YWxpZDsgICAgICAgLyogdmFs
 aWQgYXQgbW91bnQgdGltZSAqLwogCW9mZl90IGUyZnNfbWF4ZmlsZXNpemU7
 CiAJc3RydWN0IGV4dDJfZ2QgKmUyZnNfZ2Q7IC8qIEdyb3VwIERlc2NyaXB0
 b3JzICovCkBAIC0xODIsNiArMTY2LDE0IEBACiAjZGVmaW5lIEUyRlNfREFU
 RQkJIjk1LzA4LzA5IgogI2RlZmluZSBFMkZTX1ZFUlNJT04JCSIwLjViIgog
 CisvKiBGaXJzdCBub24tcmVzZXJ2ZWQgaW5vZGUgZm9yIG9sZCBleHQyIGZp
 bGVzeXN0ZW1zICovCisjZGVmaW5lIEUyRlNfUkVWMF9GSVJTVF9JTk8JMTEK
 KworLyoKKyAqIFRoZSBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gbWFn
 aWMgbnVtYmVyCisgKi8KKyNkZWZpbmUgRTJGU19NQUdJQwkJMHhFRjUzCisK
 IC8qCiAgKiBSZXZpc2lvbiBsZXZlbHMKICAqLwpAQCAtMTk3LDYgKzE4OSw3
 IEBACiAgKiBjb21wYXRpYmxlL2luY29tcGF0aWJsZSBmZWF0dXJlcwogICov
 CiAjZGVmaW5lIEVYVDJGX0NPTVBBVF9QUkVBTExPQwkJMHgwMDAxCisjZGVm
 aW5lIEVYVDJGX0NPTVBBVF9IQVNKT1VSTkFMCQkweDAwMDQKICNkZWZpbmUg
 RVhUMkZfQ09NUEFUX1JFU0laRQkJMHgwMDEwCiAKICNkZWZpbmUgRVhUMkZf
 Uk9DT01QQVRfU1BBUlNFU1VQRVIJMHgwMDAxCkBAIC0zMjYsNCArMzE5LDQg
 QEAKIAogI2VuZGlmCiAKLSNlbmRpZgkvKiBfTElOVVhfRVhUMl9GU19IICov
 CisjZW5kaWYJLyogIV9GU19FWFQyRlNfRVhUMkZTX0ggKi8KT25seSBpbiBl
 eHQyZnM6IGV4dDJmcy5ofgpkaWZmIC1ydSBleHQyZnMub3JpZy9pbm9kZS5o
 IGV4dDJmcy9pbm9kZS5oCi0tLSBleHQyZnMub3JpZy9pbm9kZS5oCTIwMTEt
 MDEtMTggMTU6NDA6MzIuMDAwMDAwMDAwICswMDAwCisrKyBleHQyZnMvaW5v
 ZGUuaAkyMDExLTAxLTE4IDE1OjQyOjQ1LjAwMDAwMDAwMCArMDAwMApAQCAt
 NjIsNyArNjIsNiBAQAogICovCiBzdHJ1Y3QgaW5vZGUgewogCXN0cnVjdAl2
 bm9kZSAgKmlfdm5vZGU7LyogVm5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMg
 aW5vZGUuICovCi0Jc3RydWN0CXZub2RlICAqaV9kZXZ2cDsvKiBWbm9kZSBm
 b3IgYmxvY2sgSS9PLiAqLwogCXN0cnVjdAlleHQybW91bnQgKmlfdW1wOwog
 CXVfaW50MzJfdCBpX2ZsYWc7CS8qIGZsYWdzLCBzZWUgYmVsb3cgKi8KIAlp
 bm9fdAkgIGlfbnVtYmVyOwkvKiBUaGUgaWRlbnRpdHkgb2YgdGhlIGlub2Rl
 LiAqLwpAQCAtMTQzLDYgKzE0Miw5IEBACiAjZGVmaW5lCUlOX1NQQUNFQ09V
 TlRFRAkweDAwODAJCS8qIEJsb2NrcyB0byBiZSBmcmVlZCBpbiBmcmVlIGNv
 dW50LiAqLwogI2RlZmluZSBJTl9MQVpZQUNDRVNTICAgMHgwMTAwCQkvKiBQ
 cm9jZXNzIElOX0FDQ0VTUyBhZnRlciB0aGUKIAkJCQkJICAgIHN1c3BlbnNp
 b24gZmluaXNoZWQgKi8KKworI2RlZmluZSBpX2RldnZwIGlfdW1wLT51bV9k
 ZXZ2cAorCiAjaWZkZWYgX0tFUk5FTAogLyoKICAqIFN0cnVjdHVyZSB1c2Vk
 IHRvIHBhc3MgYXJvdW5kIGxvZ2ljYWwgYmxvY2sgcGF0aHMgZ2VuZXJhdGVk
 IGJ5Cg==
 
 --0-1498478816-1295385891=:52958--

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/153584: commit references a PR
Date: Fri, 21 Jan 2011 21:33:52 +0000 (UTC)

 Author: jhb
 Date: Fri Jan 21 21:33:46 2011
 New Revision: 217702
 URL: http://svn.freebsd.org/changeset/base/217702
 
 Log:
   Restore support for the 'async' and 'sync' mount options lost when
   switching to nmount(2).  While here, sort the options.
   
   PR:		kern/153584
   Submitted by:	Pedro F. Giffuni  giffunip at yahoo
   MFC after:	1 week
 
 Modified:
   head/sys/fs/ext2fs/ext2_vfsops.c
 
 Modified: head/sys/fs/ext2fs/ext2_vfsops.c
 ==============================================================================
 --- head/sys/fs/ext2fs/ext2_vfsops.c	Fri Jan 21 18:32:29 2011	(r217701)
 +++ head/sys/fs/ext2fs/ext2_vfsops.c	Fri Jan 21 21:33:46 2011	(r217702)
 @@ -95,9 +95,9 @@ static int	ext2_check_sb_compat(struct e
  static int	compute_sb_data(struct vnode * devvp,
  		    struct ext2fs * es, struct m_ext2fs * fs);
  
 -static const char *ext2_opts[] = { "from", "export", "acls", "noexec",
 -    "noatime", "union", "suiddir", "multilabel", "nosymfollow",
 -    "noclusterr", "noclusterw", "force", NULL };
 +static const char *ext2_opts[] = { "acls", "async", "noatime", "noclusterr", 
 +    "noclusterw", "noexec", "export", "force", "from", "multilabel",
 +    "suiddir", "nosymfollow", "sync", "union", NULL };
  
  /*
   * VFS Operations.
 _______________________________________________
 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"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/153584: commit references a PR
Date: Fri, 21 Jan 2011 22:00:47 +0000 (UTC)

 Author: jhb
 Date: Fri Jan 21 22:00:40 2011
 New Revision: 217703
 URL: http://svn.freebsd.org/changeset/base/217703
 
 Log:
   - Move special inode constants to ext2_dinode.h and rename them to match
     NetBSD.
   - Add a constant for the HASJOURNAL compat flag.
   
   PR:		kern/153584
   Submitted by:	Pedro F. Giffuni  giffunip at yahoo
 
 Modified:
   head/sys/fs/ext2fs/ext2_dinode.h
   head/sys/fs/ext2fs/ext2fs.h
 
 Modified: head/sys/fs/ext2fs/ext2_dinode.h
 ==============================================================================
 --- head/sys/fs/ext2fs/ext2_dinode.h	Fri Jan 21 21:33:46 2011	(r217702)
 +++ head/sys/fs/ext2fs/ext2_dinode.h	Fri Jan 21 22:00:40 2011	(r217703)
 @@ -32,6 +32,23 @@
  #define e2di_size_high	e2di_dacl
  
  /*
 + * Special inode numbers
 + * The root inode is the root of the file system.  Inode 0 can't be used for
 + * normal purposes and bad blocks are normally linked to inode 1, thus
 + * the root inode is 2.
 + * Inode 3 to 10 are reserved in ext2fs.
 + */
 +#define	EXT2_BADBLKINO		((ino_t)1)
 +#define	EXT2_ROOTINO		((ino_t)2)
 +#define	EXT2_ACLIDXINO		((ino_t)3)
 +#define	EXT2_ACLDATAINO		((ino_t)4)
 +#define	EXT2_BOOTLOADERINO	((ino_t)5)
 +#define	EXT2_UNDELDIRINO	((ino_t)6)
 +#define	EXT2_RESIZEINO		((ino_t)7)
 +#define	EXT2_JOURNALINO		((ino_t)8)
 +#define	EXT2_FIRSTINO		((ino_t)11)
 +
 +/*
   * Inode flags
   * The current implementation uses only EXT2_IMMUTABLE and EXT2_APPEND flags
   */
 
 Modified: head/sys/fs/ext2fs/ext2fs.h
 ==============================================================================
 --- head/sys/fs/ext2fs/ext2fs.h	Fri Jan 21 21:33:46 2011	(r217702)
 +++ head/sys/fs/ext2fs/ext2fs.h	Fri Jan 21 22:00:40 2011	(r217703)
 @@ -39,22 +39,6 @@
  
  #include <sys/types.h>
  
 -/*
 - * Special inode numbers
 - */
 -#define	EXT2_BAD_INO		 1	/* Bad blocks inode */
 -#define EXT2_ROOT_INO		 2	/* Root inode */
 -#define EXT2_BOOT_LOADER_INO	 5	/* Boot loader inode */
 -#define EXT2_UNDEL_DIR_INO	 6	/* Undelete directory inode */
 -
 -/* First non-reserved inode for old ext2 filesystems */
 -#define E2FS_REV0_FIRST_INO	11
 -
 -/*
 - * The second extended file system magic number
 - */
 -#define E2FS_MAGIC		0xEF53
 -
  #if defined(_KERNEL)
  /*
   * FreeBSD passes the pointer to the in-core struct with relevant
 @@ -170,7 +154,7 @@ struct m_ext2fs {
  	uint32_t e2fs_mount_opt;
  	uint32_t e2fs_blocksize_bits;
  	uint32_t e2fs_total_dir;  /* Total number of directories */
 -	uint8_t	*e2fs_contigdirs;
 +	uint8_t	*e2fs_contigdirs; /* (u) # of contig. allocated dirs */
  	char e2fs_wasvalid;       /* valid at mount time */
  	off_t e2fs_maxfilesize;
  	struct ext2_gd *e2fs_gd; /* Group Descriptors */
 @@ -182,6 +166,14 @@ struct m_ext2fs {
  #define E2FS_DATE		"95/08/09"
  #define E2FS_VERSION		"0.5b"
  
 +/* First non-reserved inode for old ext2 filesystems */
 +#define E2FS_REV0_FIRST_INO	11
 +
 +/*
 + * The second extended file system magic number
 + */
 +#define E2FS_MAGIC		0xEF53
 +
  /*
   * Revision levels
   */
 @@ -197,6 +189,7 @@ struct m_ext2fs {
   * compatible/incompatible features
   */
  #define EXT2F_COMPAT_PREALLOC		0x0001
 +#define EXT2F_COMPAT_HASJOURNAL		0x0004
  #define EXT2F_COMPAT_RESIZE		0x0010
  
  #define EXT2F_ROCOMPAT_SPARSESUPER	0x0001
 _______________________________________________
 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"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/153584: commit references a PR
Date: Tue,  1 Feb 2011 18:21:52 +0000 (UTC)

 Author: jhb
 Date: Tue Feb  1 18:21:45 2011
 New Revision: 218175
 URL: http://svn.freebsd.org/changeset/base/218175
 
 Log:
   - Set the next_alloc fields for an i-node after allocating a new block
     so that future allocations start with most recently allocated block
     rather than the beginning of the filesystem.
   - Fix ext2_alloccg() to properly scan for 8 block chunks that are not
     aligned on 8-bit boundaries.  Previously this was causing new blocks
     to be allocated in a highly fragmented fashion (block 0 of a file at
     lbn N, block 1 at lbn N + 8, block 2 at lbn N + 16, etc.).
   - Cosmetic tweaks to the currently-disabled fancy realloc sysctls.
   
   PR:		kern/153584
   Discussed with:	bde
   Tested by:	Pedro F. Giffuni  giffunip at yahoo, Zheng Liu (lz)
 
 Modified:
   head/sys/fs/ext2fs/ext2_alloc.c
 
 Modified: head/sys/fs/ext2fs/ext2_alloc.c
 ==============================================================================
 --- head/sys/fs/ext2fs/ext2_alloc.c	Tue Feb  1 17:42:57 2011	(r218174)
 +++ head/sys/fs/ext2fs/ext2_alloc.c	Tue Feb  1 18:21:45 2011	(r218175)
 @@ -59,6 +59,10 @@ static u_long	ext2_hashalloc(struct inod
  						int));
  static daddr_t	ext2_nodealloccg(struct inode *, int, daddr_t, int);
  static daddr_t  ext2_mapsearch(struct m_ext2fs *, char *, daddr_t);
 +#ifdef FANCY_REALLOC
 +static int	ext2_reallocblks(struct vop_reallocblks_args *);
 +#endif
 +
  /*
   * Allocate a block in the file system.
   *
 @@ -108,13 +112,17 @@ ext2_alloc(ip, lbn, bpref, size, cred, b
  		goto nospace;
  	if (bpref >= fs->e2fs->e2fs_bcount)
  		bpref = 0;
 -	 if (bpref == 0)
 +	if (bpref == 0)
                  cg = ino_to_cg(fs, ip->i_number);
          else
                  cg = dtog(fs, bpref);
          bno = (daddr_t)ext2_hashalloc(ip, cg, bpref, fs->e2fs_bsize,
                                                   ext2_alloccg);
          if (bno > 0) {
 +		/* set next_alloc fields as done in block_getblk */
 +		ip->i_next_alloc_block = lbn;
 +		ip->i_next_alloc_goal = bno;
 +
                  ip->i_blocks += btodb(fs->e2fs_bsize);
                  ip->i_flag |= IN_CHANGE | IN_UPDATE;
                  *bnp = bno;
 @@ -143,13 +151,14 @@ nospace:
   */
  
  #ifdef FANCY_REALLOC
 -#include <sys/sysctl.h>
 +SYSCTL_NODE(_vfs, OID_AUTO, ext2fs, CTLFLAG_RW, 0, "EXT2FS filesystem");
 +
  static int doasyncfree = 1;
 -static int doreallocblks = 1;
 +SYSCTL_INT(_vfs_ext2fs, OID_AUTO, doasyncfree, CTLFLAG_RW, &doasyncfree, 0,
 +    "Use asychronous writes to update block pointers when freeing blocks");
  
 -#ifdef	OPT_DEBUG
 -SYSCTL_INT(_debug, 14, doasyncfree, CTLFLAG_RW, &doasyncfree, 0, "");
 -#endif	/* OPT_DEBUG */
 +static int doreallocblks = 1;
 +SYSCTL_INT(_vfs_ext2fs, OID_AUTO, doreallocblks, CTLFLAG_RW, &doreallocblks, 0, "");
  #endif
  
  int
 @@ -624,7 +633,8 @@ ext2_alloccg(struct inode *ip, int cg, d
  	struct m_ext2fs *fs;
  	struct buf *bp;
  	struct ext2mount *ump;
 -	int error, bno, start, end, loc;
 +	daddr_t bno, runstart, runlen;
 +	int bit, loc, end, error, start;
  	char *bbp;
  	/* XXX ondisk32 */
  	fs = ip->i_e2fs;
 @@ -665,18 +675,52 @@ ext2_alloccg(struct inode *ip, int cg, d
  	else
  		start = 0;
  	end = howmany(fs->e2fs->e2fs_fpg, NBBY) - start;
 +retry:
 +	runlen = 0;
 +	runstart = 0;
  	for (loc = start; loc < end; loc++) {
 -		if (bbp[loc] == 0) {
 -			bno = loc * NBBY;
 -			goto gotit;
 +		if (bbp[loc] == (char)0xff) {
 +			runlen = 0;
 +			continue;
  		}
 -	}
 -	for (loc = 0; loc < start; loc++) {
 -		if (bbp[loc] == 0) {
 -			bno = loc * NBBY;
 +
 +		/* Start of a run, find the number of high clear bits. */
 +		if (runlen == 0) {
 +			bit = fls(bbp[loc]);
 +			runlen = NBBY - bit;
 +			runstart = loc * NBBY + bit;
 +		} else if (bbp[loc] == 0) {
 +			/* Continue a run. */
 +			runlen += NBBY;
 +		} else {
 +			/*
 +			 * Finish the current run.  If it isn't long
 +			 * enough, start a new one.
 +			 */
 +			bit = ffs(bbp[loc]) - 1;
 +			runlen += bit;
 +			if (runlen >= 8) {
 +				bno = runstart;
 +				goto gotit;
 +			}
 +
 +			/* Run was too short, start a new one. */
 +			bit = fls(bbp[loc]);
 +			runlen = NBBY - bit;
 +			runstart = loc * NBBY + bit;
 +		}
 +
 +		/* If the current run is long enough, use it. */
 +		if (runlen >= 8) {
 +			bno = runstart;
  			goto gotit;
  		}
  	}
 +	if (start != 0) {
 +		end = start;
 +		start = 0;
 +		goto retry;
 +	}
  
  	bno = ext2_mapsearch(fs, bbp, bpref);
  	if (bno < 0){
 _______________________________________________
 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->closed 
State-Changed-By: jhb 
State-Changed-When: Tue Feb 1 19:37:42 UTC 2011 
State-Changed-Why:  
Various patches applied to HEAD.  Closed at submitter's request. 

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