Release Notes for 2.6.9-a patchset

Release Notes for cel's 2.6.9-a patchset

Mon Feb 21 22:43:52 EST 2005

Introduction

This patchset provides a stable source base for continued development of advanced transport technologies, including NFS/RDMA, NFS sessions, and NFS on IPv6. It combines patches from several sources to provide an RPC client transport switch facility suitable for advanced transport development.

To keep transport developers' lives simple, there will be no API changes or new features in subsequent patchsets in this series (9-b, 9-c, and so on); only bug fixes and changes for stability. Later series against future kernels may contain changes to the API and new features.

Note Well: This jumbo patch trio has been tested only minimally. See below for supplemental patches that may address significant problems found in this patchset. Please report problems to Chuck Lever.

Outstanding issues and a brief to-do list is here.

Installation

The patchset is based on the final release of the 2.6.9 Linux kernel, which can be downloaded from here. After downloading and unpacking the kernel source, apply these three patches (in this order):

  1. 01-trond-NFS_ALL.patch
  2. 02-CITI-NFS4_ALL.patch
  3. CEL-NFS_ALL.patch

The first patch is the final 2.6.9 patchset from Trond, with the addition of an extra patch that is missing from that patchset. Trond's patches are destined for integration into the upstream kernel. The second patch is CITI's 2.6.9-rc3 NFS4_ALL patch, adjusted to fit over Trond's final 2.6.9 patchset. We expect that most of this patchset will eventually be integrated into the upstream kernel.

The third patch is the latest RPC transport switch patchset. Note that some of the patches in this patchset have not been completely reviewed by community developers, meaning that the implementation and APIs are still subject to some churn and further development. In addition there are some known problems with this work, listed in the section below. The patches in this patchset are also available individually on this page.

Supplemental changes and fixes

These changes will be integrated in the next release of this patchset. They are included here as separate diffs against the 9-a patchset so that it is easy to apply them to existing source trees based on the 9-a patchset. Please apply all of these patches in order after applying the three patches listed above.

  1. supplemental1.patch fixes an oops in the transport setup function when mounting an NFS file system if sunrpc and the socket transport are built as kernel modules. It also contains a number of minor dprintk cleanups.
  2. supplemental2.patch allows the xprtsock module to be unloaded if there are no NFS mounts currently using socket-based transports.
  3. supplemental3.patch reverts part of patch 60 to prevent requests from being added to the backlog queue out of order, and to prevent more than max_reqs RPC requests from being started at once. It also updates the RPC transport switch design document to the current API, and cleans up some printks in the mount logic.
  4. supplemental4.patch fixes a small performance problem in the UDP send_requests function in the xprtsock transport implementation, and introduces better on-the-wire TCP behavior by pushing whole RPC requests at once in a separate segment rather than allowing small requests to run together (usually introducing extra per-op latency). Finally, force NFS directory search logic to reschedule only if it is needed.
  5. supplemental5.patch adds experimental support for UDP and TCP over IPv6.
  6. supplemental6.patch fixes a bug in the portmapper that causes RPC tasks to hang after a rebind. It also makes support for IPv6 in the RPC client conditional on whether IPv6 support is compiled into the kernel. Finally, it removes rpc_register6, as it is unneeded.