The patch for bug 218718 makes it so that nfs_symlink() allocates a page destined for pagecache and uses that to hold the name to which the symlink points. It allocates it using this: page = alloc_page(GFP_KERNEL); ...but most pagecache pages are allocated using GFP_HIGHUSER. There's no reason to use normal zone memory for this. I pushed a patch upstream recently to change this to use GFP_HIGHUSER, but it's not shown up in Trond's tree or mainline yet. I'd like this to go upstream for a bit to make sure there are no issues, but eventually we should consider pulling this back for RHEL5 (maybe for 5.2).
This request was evaluated by Red Hat Product Management for inclusion in a Red Hat Enterprise Linux maintenance release. Product Management has requested further review of this request by Red Hat Engineering, for potential inclusion in a Red Hat Enterprise Linux Update release for currently deployed products. This request is not yet committed for inclusion in an Update release.
Not sure how best to QA this... It'll probably come down to installing a 32 bit machine with a large amount of memory (>1G or so), writing script that creates a ton of symlinks on a NFS mount, and watching memory statistics as it runs. Without this patch, normal zone memory should drop much more quickly, while with this patch, more of these pages should come out of highmem.
in 2.6.18-60.el5 You can download this test kernel from http://people.redhat.com/dzickus/el5
An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on the solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHBA-2008-0314.html