2003-02-15 07:03:40

by Andrew Morton

[permalink] [raw]
Subject: 2.5.61-mm1


http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.5/2.5.61/2.5.61-mm1/

. Jens has fixed the request queue aliasing problem and we are no longer
able to break the IO scheduler. This was preventing the OSDL team from
running dbt2 against recent kernels, so hopefully that is all fixed up now.

. The anticipatory scheduler is performing well. I've included that now.

. Also included the CFQ I/O scheduler. The kernel defaults to using the
deadline/anticipatory scheduler. Select CFQ by adding "elevator=cfq" to
the kernel command line. Do "dmesg|grep elevator" to see which one you
are using.

. There is an updated version of the reiserfs_file_write patch here. This
patch addresses CPU efficiency when performing appending writes (ie: the
usual sort).

To do this, it requires that userspace pass "large" amounts of data into
the write() system call. So the filesystem returns a value of 128k in the
stat.st_blksize field from the stat(2) system call. In the hope that some
applications are using that kernel-provided hint.

Turns out that some parts of KDE (kmail, at least) were indeed using this
hint, and it triggers a nasty bug in (at least) kmail: it is reading the
same 128k of the file again and again and again. It runs like a dog.
Ed Tomlinson upgraded his KDE/kmail version and this problem went away.

So that is something for reiserfs users to keep an eye on.



Changes since 2.5.60-mm2:


-smctr-fix.patch

Merged

+deadline-alias-3.patch

Fix an elevator aliasing bug (was causing direct-io lockups and oopses)

+linear-gcc-workaround.patch

Work around a gcc-2.95.3 ICE in drivers/md/linear.c

+flush_tlb_all-preempt-safety.patch

Make flush_tlb_all preempt+SMP-safe

-reiserfs_file_write.patch
+reiserfs_file_write-3.patch

Updated

+tcp-wakeups.patch

Resurrect this patch which uses faster wakeups in ipv4. Worth 2% in a
famous web serving benchmark on an 8-way.

-deadline-hash-fix.patch

Obsoleted.

-cciss-2.patch
-cciss-3.patch
-cciss-5.patch
-cciss-6.patch
-cciss-7.patch
-cciss-8.patch
-cciss-9.patch
-cciss-10.patch
-cciss-11.patch

Merged into ciss-1.patch

+cciss-overrun-fix.patch

Fix a cciss_scsi bug

+ext3_debug-fix.patch

Fix ext3 build when EXT3_DEBUG is defined

+visws-1.patch
+visws-2.patch
+visws-3.patch
+visws-4.patch
+visws-5.patch
+visws-6.patch
+visws-7.patch
+visws-8.patch
+visws-9.patch
+visws-10.patch
+visws-11.patch
+visws-12.patch
+visws-13.patch

Resurrect visws support

+profiling-cleanup.patch

Consolidate kernel profiling code

+remove-unused-congestion-stuff.patch

Hugh keeps deleting all my lovely code.

+fix-Wundef.patch

Clean up the build with -Wundef

+scsi-fix-NCR53C9x.patch

Build fix

+radix_tree_maxindex-cleanup.patch

radix-tree simplification and cleanup

+tty-module-refcounting.patch

New module refcounting for the tty layer

+anticipatory_io_scheduling.patch
-ant-sched-9feb.patch
-ant-sched-12feb.patch

Rolled-up anticipatory scheduler diff

+cfq-2.patch

Complete Fair Queueing for the disk scheduler

+elevator-selection.patch

Allow CFQ to be selected with "elevator=cfq" on the kernel boot
commandline.



All 78 patches:

kgdb.patch

deadline-alias-3.patch

ppc64-reloc_hide.patch

ppc64-time-warning.patch
kill ppc64 unused var warning

xfs-warning-fixes.patch

xfs-cli-fix.patch
xfs interrupt flags fix

ppc64-smp_prepare_cpus-warning.patch
ppc64: fix warning

report-lost-ticks.patch
make lost-tick detection more informative

devfs-fix.patch

ptrace-flush.patch
Subject: [PATCH] ptrace on 2.5.44

buffer-debug.patch
buffer.c debugging

warn-null-wakeup.patch

jfs-build-fix.patch
JFS build fix with gcc-2.95.3

ext3-truncate-ordered-pages.patch
ext3: explicitly free truncated pages

linear-gcc-workaround.patch
work around gcc-2.95.3 internal compler error in linear.c

flush_tlb_all-preempt-safety.patch
Subject: [PATCH][2.5] flush_tlb_all is not preempt safe.

mandlock-fix.patch
Fix mandatory locking

fault_in_pages-move.patch
move fault_in_pages_readable/writeable to header

generic_write_checks.patch
separate checks from generic_file_aio_write

reiserfs_file_write-3.patch

ext3-eio-fix.patch
fix ext3 BUG due to race with truncate

tcp-wakeups.patch
Use fast wakeups in TCP/IPV4

deadline-np-42.patch
(undescribed patch)

deadline-np-43.patch
(undescribed patch)

batch-tuning.patch
I/O scheduler tuning

starvation-by-read-fix.patch
fix starvation-by-readers in the IO scheduler

crc32-speedup.patch
crc32 improvements for 2.5

scheduler-tunables.patch
scheduler tunables

sched-f3.patch
scheduler F3-updated

rml-scheduler-bits.patch
scheduler bits

lockd-lockup-fix.patch
Subject: Re: Fw: Re: 2.4.20 NFS server lock-up (SMP)

rcu-stats.patch
RCU statistics reporting

dcache_rcu-fast_walk-revert.patch
dcache_rcu: revert fast_walk code

dcache_rcu-main.patch
dcache_rcu

smalldevfs.patch
smalldevfs

ext3-journalled-data-assertion-fix.patch
Remove incorrect assertion from ext3

nfs-speedup.patch

nfs-oom-fix.patch
nfs oom fix

sk-allocation.patch
Subject: Re: nfs oom

nfs-more-oom-fix.patch

nfs-sendfile.patch
Implement sendfile() for NFS

rpciod-atomic-allocations.patch
Make rcpiod use atomic allocations

put_page-speedup.patch
hugetlb put_page speedup

kernel_lock_bug2.patch

ext2_ext3_listxattr-bug.patch
xattr: listxattr fix

xattr-flags.patch
xattr: infrastructure for permission overrides

xattr-flags-policy.patch
xattr: allow kernel code to override EA permissions

xattr-trusted.patch
xattr: trusted extended attributes

balance_dirty_pages-lockup-fix.patch
blk_congestion_wait tuning and lockup fix

cciss-1.patch
make cciss driver compile

cciss-overrun-fix.patch
Subject: [PATCH] 2.5.60, cciss, fix array bounds overrun

direct-io-retval-fix.patch
direct-io return value fix

dio-eof-read.patch
direct-io: allow reading of the part-filled EOF block

linux-isp.patch

linux-isp-update.patch

ext3_debug-fix.patch
Fix ext3 build when EXT#_DEBUG is defined

visws-1.patch
visws: allow SMP kernel build without io_apic.c (1/13)

visws-2.patch
visws: export some functions from i8259.c (2/13)

visws-3.patch
visws: make startup_32 kernel entry point (3/13)

visws-4.patch
visws: export boottime gdt descriptor (4/13)

visws-5.patch
visws: boot changes (5/13)

visws-6.patch
Subject: [PATCH] visws: move header file into asm/arch-visws (6/13)

visws-7.patch
visws: add missing mach_apic.h file (7/13)

visws-8.patch
visws: pci support (8/13)

visws-9.patch
visws: core (9/13)

visws-10.patch
visws: framebuffer driver update (10/13)

visws-11.patch
visws: sound update (11/13)

visws-12.patch
visws: MAINTAINERS file update (12/13)

visws-13.patch
visws: i386/KConfig update (13/13)

profiling-cleanup.patch
Subject: [PATCH]: consolidate and cleanup profiling code.

remove-unused-congestion-stuff.patch
Subject: [PATCH] remove unused congestion stuff

fix-Wundef.patch
Make the world safe for -Wundef

scsi-fix-NCR53C9x.patch
fix compile breakage on drivers/scsi/NCR53C9x.c

radix_tree_maxindex-cleanup.patch
Use table lookup for radix_tree_maxindex()

tty-module-refcounting.patch
TYT module refcounting fix

anticipatory_io_scheduling.patch
Subject: [PATCH] 2.5.59-mm3 antic io sched

cfq-2.patch
CFQ scheduler, #2

elevator-selection.patch
boot-time selection of disk elevator type



2003-02-15 07:15:25

by Nick Piggin

[permalink] [raw]
Subject: Re: 2.5.61-mm1

Andrew Morton wrote:

>http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.5/2.5.61/2.5.61-mm1/
>
>. Jens has fixed the request queue aliasing problem and we are no longer
> able to break the IO scheduler. This was preventing the OSDL team from
> running dbt2 against recent kernels, so hopefully that is all fixed up now.
>
>. The anticipatory scheduler is performing well. I've included that now.
>
And for those interested, if you find unusual IO performance,
please try disabling AS and reporting results. Thanks.

echo 0 > /sys/block/?/iosched/antic_expire

This value defaults to 10 (ms). More than around 20 might do
funny though not harmful stuff due to a fragile bitshift.

Nick


2003-02-15 11:17:15

by Con Kolivas

[permalink] [raw]
Subject: Re: 2.5.61-mm1

I'm getting the same problem as 2.5.60-mm2 during boot:

bad: scheduling while atomic!
Call Trace:
[<c0112ab1>] do_schedule+0x3d/0x2f4
[<c0112fb5>] wait_for_completion+0x8d/0xd0
[<c0112dac>] default_wake_function+0x0/0x1c
[<c0112dac>] default_wake_function+0x0/0x1c
[<c0122219>] create_workqueue+0x125/0x178
[<c010508e>] init+0x2a/0x17c
[<c0105064>] init+0x0/0x17c
[<c0106e5d>] kernel_thread_helper+0x5/0xc

aio_setup: sizeof(struct page) = 40
Journalled Block Device driver loaded
bad: scheduling while atomic!
Call Trace:
[<c0112ab1>] do_schedule+0x3d/0x2f4
[<c0112fb5>] wait_for_completion+0x8d/0xd0
[<c0112dac>] default_wake_function+0x0/0x1c
[<c0112dac>] default_wake_function+0x0/0x1c
[<c010508e>] init+0x2a/0x17c
[<c0105064>] init+0x0/0x17c
[<c0106e5d>] kernel_thread_helper+0x5/0xc

bad: scheduling while atomic!
Call Trace:
[<c0112ab1>] do_schedule+0x3d/0x2f4
[<c0112fb5>] wait_for_completion+0x8d/0xd0
[<c0112dac>] default_wake_function+0x0/0x1c
[<c0112dac>] default_wake_function+0x0/0x1c
[<c010508e>] init+0x2a/0x17c
[<c0105064>] init+0x0/0x17c
[<c0106e5d>] kernel_thread_helper+0x5/0xc

bad: scheduling while atomic!
Call Trace:
[<c0112ab1>] do_schedule+0x3d/0x2f4
[<c0112fb5>] wait_for_completion+0x8d/0xd0
[<c0112dac>] default_wake_function+0x0/0x1c
[<c0112dac>] default_wake_function+0x0/0x1c
[<c010508e>] init+0x2a/0x17c
[<c0105064>] init+0x0/0x17c
[<c0106e5d>] kernel_thread_helper+0x5/0xc

SGI XFS for Linux 2.5.61-mm1 with no debug enabled
bad: scheduling while atomic!
Call Trace:
[<c0112ab1>] do_schedule+0x3d/0x2f4
[<c0112fb5>] wait_for_completion+0x8d/0xd0
[<c0112dac>] default_wake_function+0x0/0x1c
[<c0112dac>] default_wake_function+0x0/0x1c
[<c0122219>] create_workqueue+0x125/0x178
[<c021711f>] pagebuf_daemon_start+0xb/0x4c
[<c0161a4a>] create_proc_entry+0x9a/0xb4
[<c0151d2b>] register_filesystem+0x3b/0x70
[<c010508e>] init+0x2a/0x17c
[<c0105064>] init+0x0/0x17c
[<c0106e5d>] kernel_thread_helper+0x5/0xc

Serial: 8250/16550 driver $Revision: 1.90 $ IRQ sharing enabled
tts/0 at I/O 0x3f8 (irq = 4) is a 16550A
tts/1 at I/O 0x2f8 (irq = 3) is a 16550A
pty: 256 Unix98 ptys configured
Real Time Clock Driver v1.11
Non-volatile memory driver v1.2
using deadline elevator
Intel(R) PRO/100 Network Driver - version 2.1.29-k4
Copyright (c) 2002 Intel Corporation

PCI: Found IRQ 11 for device 00:04.0
bad: scheduling while atomic!
Call Trace:
[<c0112ab1>] do_schedule+0x3d/0x2f4
[<c011b977>] add_timer+0x11b/0x120
[<c011c4e8>] schedule_timeout+0x84/0xac
[<c011c458>] process_timeout+0x0/0xc
[<c024e944>] e100_selftest+0x58/0xb0
[<c02297d9>] pci_device_probe+0x41/0x5c
[<c02302b3>] bus_match+0x37/0x60
[<c0230374>] driver_attach+0x3c/0x5c
[<c0230602>] bus_add_driver+0xa6/0xd8
[<c023093c>] driver_register+0x34/0x38
[<c02298d2>] pci_register_driver+0x42/0x54
[<c010508e>] init+0x2a/0x17c
[<c0105064>] init+0x0/0x17c
[<c0106e5d>] kernel_thread_helper+0x5/0xc

bad: scheduling while atomic!
Call Trace:
[<c0112ab1>] do_schedule+0x3d/0x2f4
[<c011b977>] add_timer+0x11b/0x120
[<c011c4e8>] schedule_timeout+0x84/0xac
[<c011c458>] process_timeout+0x0/0xc
[<c02297d9>] pci_device_probe+0x41/0x5c
[<c02302b3>] bus_match+0x37/0x60
[<c0230374>] driver_attach+0x3c/0x5c
[<c0230602>] bus_add_driver+0xa6/0xd8
[<c023093c>] driver_register+0x34/0x38
[<c02298d2>] pci_register_driver+0x42/0x54
[<c010508e>] init+0x2a/0x17c
[<c0105064>] init+0x0/0x17c
[<c0106e5d>] kernel_thread_helper+0x5/0xc

Freeing alive device c13a6000, eth%d
alloc_skb called nonatomically from interrupt c027a74c
------------[ cut here ]------------
kernel BUG at net/core/skbuff.c:178!
invalid operand: 0000
CPU: 0
EIP: 0060:[<c0271823>] Not tainted
EFLAGS: 00010246
EIP is at alloc_skb+0x43/0x1a4
eax: 0000003a ebx: c038adc0 ecx: c02f5308 edx: 00000296
esi: c13a6000 edi: 000000d0 ebp: c13a6000 esp: c129feac
ds: 007b es: 007b ss: 0068
Process swapper (pid: 1, threadinfo=c129e000 task=c129c040)
Stack: c02ea8c0 c027a74c c038adc0 c13a6000 00000005 c027a74c 00000f60 000000d0
c038adc0 c027abfe 00000010 c13a6000 ffffffff c011f9fa c038adc0 00000005
c13a6000 c129e000 c03888e1 c0388908 c0276470 c04111c4 00000005 c13a6000
Call Trace:
[<c027a74c>] rtmsg_ifinfo+0x10/0x78
[<c027a74c>] rtmsg_ifinfo+0x10/0x78
[<c027abfe>] rtnetlink_event+0x36/0x3c
[<c011f9fa>] notifier_call_chain+0x1e/0x38
[<c0276470>] register_netdevice+0x168/0x174
[<c0255c0e>] register_netdev+0x5e/0x70
[<c02297d9>] pci_device_probe+0x41/0x5c
[<c02302b3>] bus_match+0x37/0x60
[<c0230374>] driver_attach+0x3c/0x5c
[<c0230602>] bus_add_driver+0xa6/0xd8
[<c023093c>] driver_register+0x34/0x38
[<c02298d2>] pci_register_driver+0x42/0x54
[<c010508e>] init+0x2a/0x17c
[<c0105064>] init+0x0/0x17c
[<c0106e5d>] kernel_thread_helper+0x5/0xc

Code: 0f 0b b2 00 63 a8 2e c0 83 c4 08 83 e7 ef 31 c0 9c 59 fa be
<0>Kernel panic: Aiee, killing interrupt handler!
In interrupt handler - not syncing

Con

2003-02-15 14:20:05

by Ed Tomlinson

[permalink] [raw]
Subject: Re: 2.5.61-mm1

On February 15, 2003 02:13 am, Andrew Morton wrote:
> Turns out that some parts of KDE (kmail, at least) were indeed using this
> hint, and it triggers a nasty bug in (at least) kmail: it is reading the
> same 128k of the file again and again and again. It runs like a dog.
> Ed Tomlinson upgraded his KDE/kmail version and this problem went away.

The versions of kmail involved were 3.04, which manifests the bug when switching
between folders with lots of entries (10,000+). The kmail in kde 3.1 does not
have this problem.

Ed Tomlinson

2003-02-15 23:31:25

by Andrew Morton

[permalink] [raw]
Subject: Re: 2.5.61-mm1

Con Kolivas <[email protected]> wrote:
>
> I'm getting the same problem as 2.5.60-mm2 during boot:
>
> bad: scheduling while atomic!
> Call Trace:
> [<c0112ab1>] do_schedule+0x3d/0x2f4
> [<c0112fb5>] wait_for_completion+0x8d/0xd0
> [<c0112dac>] default_wake_function+0x0/0x1c
> [<c0112dac>] default_wake_function+0x0/0x1c
> [<c0122219>] create_workqueue+0x125/0x178
> [<c010508e>] init+0x2a/0x17c
> [<c0105064>] init+0x0/0x17c
> [<c0106e5d>] kernel_thread_helper+0x5/0xc

This appears to be due to smalldevfs disagreeing with dcache_rcu over
dcache_lock conventions.

I'll drop out smalldevfs until Adam returns, and has time to look at it,
Thanks.

2003-02-16 00:02:28

by James Cloos

[permalink] [raw]
Subject: Re: 2.5.61-mm1

I just tried 2.5.61 and 2.5.61-mm1 on a dell inspiron 8100.

2.5.61 is working OK, but -mm1 hung as soon as it tried to exec init.
init=/bin/bash showed the same failure.

init(8) was able to print out it's first line, announcing its version
but then stopped. with init=/bin/bash bash did not output anything.

-JimC



2003-02-16 00:18:34

by Andrew Morton

[permalink] [raw]
Subject: Re: 2.5.61-mm1

"James H. Cloos Jr." <[email protected]> wrote:
>
> I just tried 2.5.61 and 2.5.61-mm1 on a dell inspiron 8100.
>
> 2.5.61 is working OK, but -mm1 hung as soon as it tried to exec init.
> init=/bin/bash showed the same failure.
>
> init(8) was able to print out it's first line, announcing its version
> but then stopped. with init=/bin/bash bash did not output anything.
>

If you are using devfs then yes, there is a locking problem.

If you are not using devfs then please send me your .config.

Thanks.

2003-02-16 00:53:38

by Con Kolivas

[permalink] [raw]
Subject: Re: 2.5.61-mm1

On Sun, 16 Feb 2003 10:41 am, Andrew Morton wrote:
> Con Kolivas <[email protected]> wrote:
> > I'm getting the same problem as 2.5.60-mm2 during boot:
> >
> > bad: scheduling while atomic!
> > Call Trace:
> > [<c0112ab1>] do_schedule+0x3d/0x2f4
> > [<c0112fb5>] wait_for_completion+0x8d/0xd0
> > [<c0112dac>] default_wake_function+0x0/0x1c
> > [<c0112dac>] default_wake_function+0x0/0x1c
> > [<c0122219>] create_workqueue+0x125/0x178
> > [<c010508e>] init+0x2a/0x17c
> > [<c0105064>] init+0x0/0x17c
> > [<c0106e5d>] kernel_thread_helper+0x5/0xc
>
> This appears to be due to smalldevfs disagreeing with dcache_rcu over
> dcache_lock conventions.
>
> I'll drop out smalldevfs until Adam returns, and has time to look at it,

Backing out that patch fixes it thanks.

Con

2003-02-17 11:15:22

by Maneesh Soni

[permalink] [raw]
Subject: Re: 2.5.61-mm1

On Sun, Feb 16, 2003 at 12:31:31AM +0000, Andrew Morton wrote:
> "James H. Cloos Jr." <[email protected]> wrote:
> >
> > I just tried 2.5.61 and 2.5.61-mm1 on a dell inspiron 8100.
> >
> > 2.5.61 is working OK, but -mm1 hung as soon as it tried to exec init.
> > init=/bin/bash showed the same failure.
> >
> > init(8) was able to print out it's first line, announcing its version
> > but then stopped. with init=/bin/bash bash did not output anything.
> >
>
> If you are using devfs then yes, there is a locking problem.
>
> If you are not using devfs then please send me your .config.
>
> Thanks.

Hello Andrew,

The following patch should enable smalldevfs to work with dcache_rcu. The
locking problem is because smalldevfs is written keeping fastwalk
in mind where as dcache_rcu backs out fastwalk code to 2.5.10 level.

Patch is based on 2.5.61-mm1.

Regards,
Maneesh

dcache_rcu-smalldevfs.patch

diff -urN linux-2.5.61-mm1/fs/devfs/base.c linux-2.5.61-mm1-smalldevfs-dcache_rcu/fs/devfs/base.c
--- linux-2.5.61-mm1/fs/devfs/base.c 2003-02-17 12:04:54.000000000 +0530
+++ linux-2.5.61-mm1-smalldevfs-dcache_rcu/fs/devfs/base.c 2003-02-17 12:29:46.000000000 +0530
@@ -60,8 +60,7 @@
memcpy(buf, *path, len);
buf[len] = '\0';

- spin_lock(&dcache_lock);
- err = link_path_walk(buf, nd); /* releases dcache_lock */
+ err = link_path_walk(buf, nd);

if (err)
return err;
@@ -101,14 +100,13 @@

memset(&nd, 0, sizeof(nd));
nd.flags = LOOKUP_PARENT;
- nd.mnt = devfs_vfsmount;
- nd.dentry = dir;
+ nd.mnt = mntget(devfs_vfsmount);
+ nd.dentry = dget(dir);

err = walk_parents_mkdir(&name, &nd, is_dir);
if (err)
return err;

- spin_lock(&dcache_lock);
err = link_path_walk(name, &nd);
if (err)
return err;
@@ -247,10 +245,9 @@
buf[sizeof(buf)-1] = '\0';

memset(&nd, 0, sizeof(nd));
- nd.mnt = devfs_vfsmount;
- nd.dentry = devfs_vfsmount->mnt_sb->s_root;
+ nd.mnt = mntget(devfs_vfsmount);
+ nd.dentry = dget(devfs_vfsmount->mnt_sb->s_root);

- spin_lock(&dcache_lock);
err = link_path_walk(buf, &nd);
if (!err) {
devfs_unregister(nd.dentry);


--
Maneesh Soni
IBM Linux Technology Center,
IBM India Software Lab, Bangalore.
Phone: +91-80-5044999 email: [email protected]
http://lse.sourceforge.net/

2003-02-17 11:18:37

by Andrew Morton

[permalink] [raw]
Subject: Re: 2.5.61-mm1

Maneesh Soni <[email protected]> wrote:
>
> The following patch should enable smalldevfs to work with dcache_rcu.

I suspected this might happen ;) Many thanks.

2003-02-17 22:34:05

by Cliff White

[permalink] [raw]
Subject: Re: 2.5.61-mm1

>
> http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.5/2.5.61/2.5.61-mm1/
>
> . Jens has fixed the request queue aliasing problem and we are no longer
> able to break the IO scheduler. This was preventing the OSDL team from
> running dbt2 against recent kernels, so hopefully that is all fixed up now.
>
Thanks again for doing all this, really appreciate it.
Well, we're closer....
The showstopper for us is still the flock() issue. We have Mathew Wilcox's patch from
2.5.52, which we have been applying to all recent kernels. The patch is in PLM as patch id
# 1061. The issue is in BugMe as bug #94 .
Without proper flock() we cannot stop and restart the database, which means we can't run the test.
We've tried applying Wilcox's flock patch to -mm1, but it's doesn't go clean, and frankly we're not smart enough
to do the merge by hand - lock code scares us.

We just tested 2.5.61 vanilla, and 2.5.61-mm1.

The patch applies cleanly to stock 2.5.61, and we can cycle the database.
We can't run dbt2 on stock 2.5.61, because of the scheduler bug.
We believe the scheduler fix in -mm1 will be the ticket, but we can't try
it because of the flock() issue. So we're wedged.
Can someone smarter than us maybe do a merge?

thanks,
cliffw