--- ureadahead-0.100.0.orig/conf/ureadahead-other.conf
+++ ureadahead-0.100.0/conf/ureadahead-other.conf
@@ -6,7 +6,7 @@
 
 description	"Read required files in advance (for other mountpoints)"
 
-start on mount DEVICE=[/UL]* MOUNTPOINT=/?*
+start on mounted DEVICE=[/UL]* MOUNTPOINT=/?*
 
 # Forks into the background both when reading from disk and when profiling
 # (HDD mode won't fork, but that's ok because we'll wait for it in spawned).
--- ureadahead-0.100.0.orig/man/ureadahead.8
+++ ureadahead-0.100.0/man/ureadahead.8
@@ -49,7 +49,7 @@
 has been enabled.
 
 This is ignored when reading on rotational hard drives, since it's
-important for performance reasons not to content with other processes
+important for performance reasons not to contend with other processes
 for I/O.
 .\"
 .TP
@@ -115,7 +115,7 @@
 .\"
 .SH BUGS
 Report bugs at 
-.RB < https://launchpad.net/ureadahead/+bugs >
+.RB < https://launchpad.net/ubuntu/+source/ureadahead/+bugs >
 .\"
 .SH COPYRIGHT
 Copyright \(co 2009 Canonical Ltd.
--- ureadahead-0.100.0.orig/src/Makefile.am
+++ ureadahead-0.100.0/src/Makefile.am
@@ -22,6 +22,7 @@
 	file.c file.h \
 	errors.h
 ureadahead_LDADD = \
+	-lrt \
 	$(NIH_LIBS) \
 	$(BLKID_LIBS) \
 	$(EXT2FS_LIBS) \
--- ureadahead-0.100.0.orig/src/trace.c
+++ ureadahead-0.100.0/src/trace.c
@@ -117,17 +117,20 @@
        int timeout)
 {
 	int                 dfd;
+	FILE                *fp;
 	int                 unmount = FALSE;
 	int                 old_sys_open_enabled = 0;
 	int                 old_open_exec_enabled = 0;
 	int                 old_uselib_enabled = 0;
 	int                 old_tracing_enabled = 0;
+	int                 old_buffer_size_kb = 0;
 	struct sigaction    act;
 	struct sigaction    old_sigterm;
 	struct sigaction    old_sigint;
 	struct timeval      tv;
 	nih_local PackFile *files = NULL;
 	size_t              num_files = 0;
+	size_t              num_cpus = 0;
 
 	/* Mount debugfs if not already mounted */
 	dfd = open (PATH_DEBUGFS "/tracing", O_RDONLY | O_NOATIME);
@@ -148,6 +151,28 @@
 		unmount = TRUE;
 	}
 
+	/*
+	 * Count the number of CPUs, default to 1 on error. 
+	 */
+	fp = fopen("/proc/cpuinfo", "r");
+	if (fp) {
+		int line_size=1024;
+		char *processor="processor";
+		char *line = malloc(line_size);
+		if (line) {
+			num_cpus = 0;
+			while (fgets(line,line_size,fp) != NULL) {
+				if (!strncmp(line,processor,strlen(processor)))
+					num_cpus++;
+			}
+			free(line);
+			nih_message("Counted %d CPUs\n",num_cpus);
+		}
+		fclose(fp);
+	}
+	if (!num_cpus)
+		num_cpus = 1;
+
 	/* Enable tracing of open() syscalls */
 	if (set_value (dfd, "events/fs/do_sys_open/enable",
 		       TRUE, &old_sys_open_enabled) < 0)
@@ -165,7 +190,7 @@
 
 		old_uselib_enabled = -1;
 	}
-	if (set_value (dfd, "buffer_size_kb", 128000, NULL) < 0)
+	if (set_value (dfd, "buffer_size_kb", 8192/num_cpus, &old_buffer_size_kb) < 0)
 		goto error;
 	if (set_value (dfd, "tracing_enabled",
 		       TRUE, &old_tracing_enabled) < 0)
@@ -226,6 +251,13 @@
 	if (read_trace (NULL, dfd, "trace", &files, &num_files) < 0)
 		goto error;
 
+	/*
+	 * Restore the trace buffer size (which has just been read) and free
+	 * a bunch of memory.
+	 */
+	if (set_value (dfd, "buffer_size_kb", old_buffer_size_kb, NULL) < 0)
+		goto error;
+
 	/* Unmount the temporary debugfs mount if we mounted it */
 	if (close (dfd)) {
 		nih_error_raise_system ();
--- ureadahead-0.100.0.orig/src/Makefile.in
+++ ureadahead-0.100.0/src/Makefile.in
@@ -295,6 +295,7 @@
 	errors.h
 
 ureadahead_LDADD = \
+	-lrt \
 	$(NIH_LIBS) \
 	$(BLKID_LIBS) \
 	$(EXT2FS_LIBS) \
--- ureadahead-0.100.0.orig/src/pack.c
+++ ureadahead-0.100.0/src/pack.c
@@ -163,6 +163,7 @@
 		unsigned int maj;
 		unsigned int min;
 		char *       mount;
+		struct stat  statbuf;
 
 		/* mount ID */
 		ptr = strtok_r (line, " \t\n", &saveptr);
@@ -185,14 +186,6 @@
 			continue;
 		}
 
-		/* Check whether this is the right device */
-		if ((sscanf (device, "%d:%d", &maj, &min) < 2)
-		    || (maj != major (dev))
-		    || (min != minor (dev))) {
-			nih_free (line);
-			continue;
-		}
-
 		/* root */
 		ptr = strtok_r (NULL, " \t\n", &saveptr);
 		if (! ptr) {
@@ -206,6 +199,12 @@
 			nih_free (line);
 			continue;
 		}
+
+		/* Check whether this is the right device */
+		if (stat (mount, &statbuf) || statbuf.st_dev != dev) {
+			nih_free (line);
+			continue;
+		}
 
 		/* Done, convert the mountpoint to a pack filename */
 		if (fclose (fp) < 0)
--- ureadahead-0.100.0.orig/src/values.c
+++ ureadahead-0.100.0/src/values.c
@@ -57,7 +57,7 @@
 	if (fd < 0)
 		nih_return_system_error (-1);
 
-	len = read (fd, buf, sizeof buf);
+	len = read (fd, buf, sizeof(buf) - 1);
 	if (len < 0) {
 		nih_error_raise_system ();
 		close (fd);
@@ -90,7 +90,7 @@
 		nih_return_system_error (-1);
 
 	if (oldvalue) {
-		len = read (fd, buf, sizeof buf);
+		len = read (fd, buf, sizeof(buf) - 1);
 		if (len < 0) {
 			nih_error_raise_system ();
 			close (fd);
--- ureadahead-0.100.0.orig/debian/copyright
+++ ureadahead-0.100.0/debian/copyright
@@ -0,0 +1,17 @@
+This is the Ubuntu package of ureadahead.
+
+Copyright © 2009 Canonical Ltd.
+
+Licence:
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License version 2, as
+published by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+On Ubuntu systems, the complete text of the GNU General Public License
+can be found in ‘/usr/share/common-licenses/GPL-2’.
--- ureadahead-0.100.0.orig/debian/compat
+++ ureadahead-0.100.0/debian/compat
@@ -0,0 +1 @@
+7
--- ureadahead-0.100.0.orig/debian/ureadahead.postrm
+++ ureadahead-0.100.0/debian/ureadahead.postrm
@@ -0,0 +1,61 @@
+#!/bin/sh -e
+# This script can be called in the following ways:
+#
+# After the package was removed:
+#	<postrm> remove
+#
+# After the package was purged:
+#	<postrm> purge
+#
+# After the package was upgraded:
+#	<old-postrm> upgrade <new-version>
+# if that fails:
+#	<new-postrm> failed-upgrade <old-version>
+#
+#
+# After all of the packages files have been replaced:
+#	<postrm> disappear <overwriting-package> <version>
+#
+#
+# If preinst fails during install:
+#	<new-postrm> abort-install
+#
+# If preinst fails during upgrade of removed package:
+#	<new-postrm> abort-install <old-version>
+#
+# If preinst fails during upgrade:
+#	<new-postrm> abort-upgrade <old-version>
+
+
+# Remove pack file
+purge_files()
+{
+    if [ -f /var/lib/ureadahead/pack ]; then
+	rm -f /var/lib/ureadahead/pack /var/lib/ureadahead/*.pack || true
+	rmdir /var/lib/ureadahead || true
+    fi
+}
+
+
+case "$1" in
+    remove)
+	;;
+
+    purge)
+	purge_files
+	;;
+
+    upgrade|failed-upgrade|disappear)
+	;;
+
+    abort-install|abort-upgrade)
+	;;
+
+    *)
+	echo "$0 called with unknown argument \`$1'" 1>&2
+	exit 1
+	;;
+esac
+
+#DEBHELPER#
+exit 0
--- ureadahead-0.100.0.orig/debian/ureadahead.dirs
+++ ureadahead-0.100.0/debian/ureadahead.dirs
@@ -0,0 +1,3 @@
+usr/share/apport/package-hooks
+var/lib/ureadahead
+var/lib/ureadahead/debugfs
--- ureadahead-0.100.0.orig/debian/control
+++ ureadahead-0.100.0/debian/control
@@ -0,0 +1,24 @@
+Source: ureadahead
+Section: admin
+Priority: required
+Maintainer: Scott James Remnant <scott@ubuntu.com>
+Standards-Version: 3.9.1
+Build-Depends: debhelper (>= 7.3.15ubuntu3), pkg-config (>= 0.22), libnih-dev (>= 1.0.0), libblkid-dev (>= 2.16), e2fslibs-dev (>= 1.41)
+
+Package: ureadahead
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, upstart (>= 0.6.0)
+Conflicts: readahead
+Provides: readahead
+Replaces: readahead
+Description: Read required files in advance
+ über-readahead is used during boot to read files in advance of when
+ they are needed such that they are already in the page cache,
+ improving boot performance.
+ .
+ Its data files are regenerated on the first boot after install, and
+ either monthly thereafter or when packages with init scripts or
+ configs are installed or updated.
+ .
+ ureadahead requires a kernel patch included in the Ubuntu kernel.
+
--- ureadahead-0.100.0.orig/debian/ureadahead.postinst
+++ ureadahead-0.100.0/debian/ureadahead.postinst
@@ -0,0 +1,44 @@
+#!/bin/sh -e
+# This script can be called in the following ways:
+#
+# After the package was installed:
+#	<postinst> configure <old-version>
+#
+# After a trigger is activated:
+#       <postinst> triggered <trigger-name>...
+#
+#
+# If prerm fails during upgrade or fails on failed upgrade:
+#	<old-postinst> abort-upgrade <new-version>
+#
+# If prerm fails during deconfiguration of a package:
+#	<postinst> abort-deconfigure in-favour <new-package> <version>
+#	           removing <old-package> <version>
+#
+# If prerm fails during replacement due to conflict:
+#	<postinst> abort-remove in-favour <new-package> <version>
+
+
+case "$1" in
+    configure)
+	;;
+
+    triggered)
+	# Force a reprofile
+	if [ -f /var/lib/ureadahead/pack ]; then
+	    echo "ureadahead will be reprofiled on next reboot"
+	    rm -f /var/lib/ureadahead/pack /var/lib/ureadahead/*.pack
+	fi
+	;;
+
+    abort-upgrade|abort-deconfigure|abort-remove)
+	;;
+
+    *)
+	echo "$0 called with unknown argument \`$1'" 1>&2
+	exit 1
+	;;
+esac
+
+#DEBHELPER#
+exit 0
--- ureadahead-0.100.0.orig/debian/rules
+++ ureadahead-0.100.0/debian/rules
@@ -0,0 +1,28 @@
+#!/usr/bin/make -f
+%:
+	dh $@
+
+
+CFLAGS = -Wall -g -fstack-protector -fPIE
+LDFLAGS = -Wl,-z,relro -Wl,-z,now -pie
+
+# Disable optimisations if noopt found in $DEB_BUILD_OPTIONS
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+	CFLAGS += -O0
+	LDFLAGS += -Wl,-O0
+else
+	CFLAGS += -Os
+	LDFLAGS += -Wl,-O1
+endif
+
+override_dh_auto_configure:
+	dh_auto_configure -- CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
+		--exec-prefix=
+
+
+override_dh_install:
+	dh_install
+	install -m 644 debian/ureadahead.apport \
+		debian/ureadahead/usr/share/apport/package-hooks/ureadahead.py
+
+version := $(shell sed -e '1{;s|^ureadahead (\(.*\))\ .*|\1|;q;}' debian/changelog)
--- ureadahead-0.100.0.orig/debian/ureadahead.triggers
+++ ureadahead-0.100.0/debian/ureadahead.triggers
@@ -0,0 +1,2 @@
+interest /etc/init
+interest /etc/init.d
--- ureadahead-0.100.0.orig/debian/changelog
+++ ureadahead-0.100.0/debian/changelog
@@ -0,0 +1,177 @@
+ureadahead (0.100.0-11) natty; urgency=low
+
+  * src/trace.c: leave room for string termination on reads (LP: #485194).
+  * man/ureadahead.8: fix typo and update bug reporting URL (LP: #697770).
+  * debian/rules: don't bother with /var/lib/ureadahead mode.
+
+ -- Kees Cook <kees@ubuntu.com>  Wed, 16 Mar 2011 17:19:01 -0700
+
+ureadahead (0.100.0-10) natty; urgency=low
+
+  * Install /var/lib/ureadahead mode 0700 so other users cannot see
+    the debugfs mount point.
+
+ -- Kees Cook <kees@ubuntu.com>  Tue, 22 Feb 2011 12:13:22 -0800
+
+ureadahead (0.100.0-9) natty; urgency=low
+
+  [ Bilal Akhtar ]
+  * Removed sreadahead transitional package and its postinst, postrm,
+    preinst and install files. (LP: #545596)
+  * Passed --sourcedir argument to dh_install
+  * Removed dh_gencontrol calls for package sreadahead.
+
+  [ Martin Pitt ]
+  * src/Makefile.{am,in}: Add missing -lrt, as pack.c uses clock_gettime.
+    Fixes building with gcc 4.5.
+  * debian/rules: Revert --sourcedir passing, it's not necessary.
+  * debian/rules: Don't install apport hook as executable.
+  * debian/copyright: Point to versioned GPL-2 file.
+  * debian/control: Bump Standards-Version to 3.9.1.
+
+ -- Martin Pitt <martin.pitt@ubuntu.com>  Fri, 26 Nov 2010 12:29:40 +0100
+
+ureadahead (0.100.0-8) maverick; urgency=low
+
+  * Decrease the buffer size to just 8MB, after much testing we don't
+    need much more than this since it will be limited by the size of the
+    page cache anyway.
+
+    This is in lieu of a new version of ureadahead for Maverick, which
+    while work is ongoing, isn't ready for shipping at this time.
+    LP: #600359.
+
+ -- Scott James Remnant <scott@ubuntu.com>  Mon, 20 Sep 2010 18:34:31 +0100
+
+ureadahead (0.100.0-7) maverick; urgency=low
+
+  * Count the number of CPUs and divide buffer_size_kb by the number of CPUs.
+    Users should watch for instances of "mmiotrace has lost events" in dmesg to make
+    sure the trace buffers are not too small. The original value for
+    buffer_size_kb was chosen somewhat arbitrarily. Empirical testing
+    has shown that its large enough, so we don't actually know where the lower
+    boundary lies.
+    -LP: #491943
+
+ -- Tim Gardner <tim.gardner@canonical.com>  Fri, 20 Aug 2010 12:19:31 -0600
+
+ureadahead (0.100.0-6) maverick; urgency=low
+
+  * Restore buffer_size_kb upon exit, but do it _after_
+    the trace buffer has been read. This frees the memory
+    consumed by the trace operation (which can be a lot).
+    -LP: #501715
+
+ -- Tim Gardner <tim.gardner@canonical.com>  Thu, 22 Jul 2010 04:04:36 -0600
+
+ureadahead (0.100.0-5) maverick; urgency=low
+
+  * src/pack.c: Amend mount point detection logic to stat the mount point
+    instead of just comparing major/minor versions with /proc/self/mountinfo
+    (LP: #570014).
+
+ -- Chow Loong Jin <hyperair@ubuntu.com>  Fri, 25 Jun 2010 13:14:54 +0100
+
+ureadahead (0.100.0-4.1) lucid; urgency=low
+
+  * Revert previous upload; had forgotten that the sreadahead package
+    contains all the clean-up stuff so we want to keep it for the
+    release upgrade after all.
+
+ -- Scott James Remnant <scott@ubuntu.com>  Wed, 17 Feb 2010 12:57:00 +0000
+
+ureadahead (0.100.0-4) lucid; urgency=low
+
+  * debian/control: drop sreadahead migration package; dist-upgrade users
+    will have ureadahead installed by the standard meta-packages. 
+
+ -- Scott James Remnant <scott@ubuntu.com>  Wed, 17 Feb 2010 12:14:09 +0000
+
+ureadahead (0.100.0-3) lucid; urgency=low
+
+  * conf/ureadahead-other.conf: Change from "on mount" to "on mounted",
+    the former didn't work anyway. 
+
+ -- Scott James Remnant <scott@ubuntu.com>  Mon, 21 Dec 2009 23:20:02 +0000
+
+ureadahead (0.100.0-2) lucid; urgency=low
+
+  * Put an all-important "--" in the dh_auto_configure invocation so that
+    ureadahead is installed into the right path (/sbin)
+
+ -- Scott James Remnant <scott@ubuntu.com>  Tue, 01 Dec 2009 02:25:50 +0000
+
+ureadahead (0.100.0-1) lucid; urgency=low
+
+  * New upstream release:
+    - Use external libnih
+
+  * debian/control: Add build-dependency on libnih-dev
+  * debian/rules: Fix installation of apport hook.
+
+ -- Scott James Remnant <scott@ubuntu.com>  Sun, 29 Nov 2009 15:24:15 +0000
+
+ureadahead (0.90.3-2) karmic-proposed; urgency=low
+
+  * über-readahead is a replacement for sreadahead that should
+    significantly improve boot performance on rotational hard drives,
+    especially those that had regressed in performance from jaunty to
+    karmic.
+
+    It does this by pre-loading such things as ext2/3/4 inodes and opening
+    files in as logical order as possible before loading all blocks in one
+    pass across the disk.
+
+    On SSD, this behaves much as sreadahead used to, replacing that package
+    with slightly improved tracing code.
+
+    This requires the kernel package also found in karmic-proposed.
+
+    LP: #432089.
+
+ -- Scott James Remnant <scott@ubuntu.com>  Mon, 09 Nov 2009 18:38:51 +0000
+
+ureadahead (0.90.3-1) karmic; urgency=low
+
+  * New upstream release:
+    - Move ext2fs inode group lookup into the tracing stage, storing the
+      groups to preload in the pack, rather than spending time on normal
+      boots working it out.
+    - Open files in order of inode group (or inode number on non-ext2fs),
+      which seems to give a benefit in load time and certainly produces
+      better blktrace output.
+    - Increase the "too old" check from a month to a year.
+    - Fix dump of zero-byte files to not claim a single page.
+    - Fix unhandled error output when given an unknown pack file.
+    - Don't call ureadhead for the root filesystem twice on boot (the second
+      time should only take a few ms, but that's still time)
+    - Consider exit status 4 (no pack file for given mount point) normal.
+    - Make uselib tracing optional.
+
+ -- Scott James Remnant <scott@ubuntu.com>  Thu, 05 Nov 2009 15:10:06 +0000
+
+ureadahead (0.90.2-1) karmic; urgency=low
+
+  * New upstream release:
+    - improved SSD mode
+    - inode group preload threshold configurable by environment variable
+    - default inode group preload threshold changed to 16, because random
+      stabbing in the dark suggested it was a good number
+    - add a job that profiles extra mountpoints
+
+  * Remove /etc/cron.monthly/sreadahead too.
+  * Add an apport hook to attach a dump of the packs.
+
+ -- Scott James Remnant <scott@ubuntu.com>  Thu, 29 Oct 2009 18:14:51 +0000
+
+ureadahead (0.90.1-1) karmic; urgency=low
+
+  * Bug fixes.
+
+ -- Scott James Remnant <scott@ubuntu.com>  Thu, 29 Oct 2009 02:13:38 +0000
+
+ureadahead (0.90.0-1) karmic; urgency=low
+
+  * Initial release to ubuntu-boot PPA.
+
+ -- Scott James Remnant <scott@ubuntu.com>  Thu, 29 Oct 2009 01:01:42 +0000
--- ureadahead-0.100.0.orig/debian/ureadahead.apport
+++ ureadahead-0.100.0/debian/ureadahead.apport
@@ -0,0 +1,15 @@
+'''apport package hook for ureadahead
+
+(c) 2009 Canonical Ltd.
+Author: Scott James Remnant <scott@ubuntu.com>
+'''
+
+import os
+import apport.hookutils
+
+def add_info(report):
+    for f in os.listdir('/var/lib/ureadahead'):
+        if f == 'pack':
+            report['PackDump'] = apport.hookutils.command_output(['ureadahead', '--dump'])
+        elif f.endswith('.pack'):
+            report['PackDump'+f[:-5].title()] = apport.hookutils.command_output(['ureadahead', '--dump'])
