<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/fs/nfs/client.c, branch linux-3.5.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.5.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.5.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2012-06-18T12:45:16Z</updated>
<entry>
<title>NFSv4.1: Fix umount when filelayout DS is also the MDS</title>
<updated>2012-06-18T12:45:16Z</updated>
<author>
<name>Trond Myklebust</name>
</author>
<published>2012-06-14T17:08:38Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=2a4c8994eeef50796015f8a2005e4a75c1929166'/>
<id>urn:sha1:2a4c8994eeef50796015f8a2005e4a75c1929166</id>
<content type='text'>
Currently there is a 'chicken and egg' issue when the DS is also the mounted
MDS. The nfs_match_client() reference from nfs4_set_ds_client bumps the
cl_count, the nfs_client is not freed at umount, and nfs4_deviceid_purge_client
is not called to dereference the MDS usage of a deviceid which holds a
reference to the DS nfs_client.  The result is the umount program returns,
but the nfs_client is not freed, and the cl_session hearbeat continues.

The MDS (and all other nfs mounts) lose their last nfs_client reference in
nfs_free_server when the last nfs_server (fsid) is umounted.
The file layout DS lose their last nfs_client reference in destroy_ds
when the last deviceid referencing the data server is put and destroy_ds is
called. This is triggered by a call to nfs4_deviceid_purge_client which
removes references to a pNFS deviceid used by an MDS mount.

The fix is to track how many pnfs enabled filesystems are mounted from
this server, and then to purge the device id cache once that count reaches
zero.

Reported-by: Jorge Mora &lt;Jorge.Mora@netapp.com&gt;
Reported-by: Andy Adamson &lt;andros@netapp.com&gt;
Signed-off-by: Trond Myklebust &lt;Trond.Myklebust@netapp.com&gt;
</content>
</entry>
<entry>
<title>NFS: Remove incorrect BUG_ON in nfs_found_client</title>
<updated>2012-06-07T14:21:03Z</updated>
<author>
<name>Trond Myklebust</name>
</author>
<published>2012-06-07T14:21:03Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f07936f2c446bd5310e669c8e6eab3f812ea665a'/>
<id>urn:sha1:f07936f2c446bd5310e669c8e6eab3f812ea665a</id>
<content type='text'>
It is perfectly valid for nfs_get_client() to return a nfs_client that
is in the process of setting up the NFSv4.1 session.

Signed-off-by: Trond Myklebust &lt;Trond.Myklebust@netapp.com&gt;
</content>
</entry>
<entry>
<title>NFSv4.1: Add DESTROY_CLIENTID</title>
<updated>2012-05-26T18:17:30Z</updated>
<author>
<name>Trond Myklebust</name>
</author>
<published>2012-05-25T21:18:09Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=662455391040a783b89d0232e743c27c23617dbd'/>
<id>urn:sha1:662455391040a783b89d0232e743c27c23617dbd</id>
<content type='text'>
Ensure that we destroy our lease on last unmount

Signed-off-by: Trond Myklebust &lt;Trond.Myklebust@netapp.com&gt;
</content>
</entry>
<entry>
<title>NFS: Add memory barriers to the nfs_client-&gt;cl_cons_state initialisation</title>
<updated>2012-05-23T19:24:59Z</updated>
<author>
<name>Trond Myklebust</name>
</author>
<published>2012-05-23T17:26:10Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=54ac471c83aff6b1e068eb8029c797dc68a76e89'/>
<id>urn:sha1:54ac471c83aff6b1e068eb8029c797dc68a76e89</id>
<content type='text'>
Ensure that a process that uses the nfs_client-&gt;cl_cons_state test
for whether the initialisation process is finished does not read
stale data.

Signed-off-by: Trond Myklebust &lt;Trond.Myklebust@netapp.com&gt;
</content>
</entry>
<entry>
<title>NFSv4: Fix a race in the net namespace mount notification</title>
<updated>2012-05-23T19:21:13Z</updated>
<author>
<name>Trond Myklebust</name>
</author>
<published>2012-05-23T17:24:36Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=4697bd5e9419348ef9fa9b55cefe4355ad9d3d01'/>
<id>urn:sha1:4697bd5e9419348ef9fa9b55cefe4355ad9d3d01</id>
<content type='text'>
Since the struct nfs_client gets added to the global nfs_client_list
before it is initialised, it is possible that rpc_pipefs_event can
end up trying to create idmapper entries on such a thing.

The solution is to have the mount notification wait for the
initialisation of each nfs_client to complete, and then to
skip any entries for which the it failed.

Reported-by: Stanislav Kinsbursky &lt;skinsbursky@parallels.com&gt;
Signed-off-by: Trond Myklebust &lt;Trond.Myklebust@netapp.com&gt;
Acked-by: Stanislav Kinsbursky &lt;skinsbursky@parallels.com&gt;
</content>
</entry>
<entry>
<title>NFSv4.1: Fix session initialisation races</title>
<updated>2012-05-23T19:20:57Z</updated>
<author>
<name>Trond Myklebust</name>
</author>
<published>2012-05-23T17:23:31Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=7b38c3682c5cab4f98751d5fe57b78a59020653d'/>
<id>urn:sha1:7b38c3682c5cab4f98751d5fe57b78a59020653d</id>
<content type='text'>
Session initialisation is not complete until the lease manager
has run. We need to ensure that both nfs4_init_session and
nfs4_init_ds_session do so, and that they check for any resulting
errors in clp-&gt;cl_cons_state.

Only after this is done, can nfs4_ds_connect check the contents
of clp-&gt;cl_exchange_flags.

Signed-off-by: Trond Myklebust &lt;Trond.Myklebust@netapp.com&gt;
Cc: Andy Adamson &lt;andros@netapp.com&gt;
</content>
</entry>
<entry>
<title>NFS: EXCHANGE_ID should save the server major and minor ID</title>
<updated>2012-05-22T20:45:48Z</updated>
<author>
<name>Chuck Lever</name>
</author>
<published>2012-05-22T02:46:16Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=acdeb69d9c5934a678a732b4e24770326bf9471e'/>
<id>urn:sha1:acdeb69d9c5934a678a732b4e24770326bf9471e</id>
<content type='text'>
Save the server major and minor ID results from EXCHANGE_ID, as they
are needed for detecting server trunking.

Signed-off-by: Chuck Lever &lt;chuck.lever@oracle.com&gt;
Signed-off-by: Trond Myklebust &lt;Trond.Myklebust@netapp.com&gt;
</content>
</entry>
<entry>
<title>NFS: Add nfs_client behavior flags</title>
<updated>2012-05-22T20:45:47Z</updated>
<author>
<name>Chuck Lever</name>
</author>
<published>2012-05-22T02:46:07Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=4bf590e08f6db3395c181618a4c14f1c39b7c4af'/>
<id>urn:sha1:4bf590e08f6db3395c181618a4c14f1c39b7c4af</id>
<content type='text'>
"noresvport" and "discrtry" can be passed to nfs_create_rpc_client()
by setting flags in the passed-in nfs_client.  This change makes it
easy to add new flags.

Note that these settings are now "sticky" over the lifetime of a
struct nfs_client, and may even be copied when an nfs_client is
cloned.

Signed-off-by: Chuck Lever &lt;chuck.lever@oracle.com&gt;
Signed-off-by: Trond Myklebust &lt;Trond.Myklebust@netapp.com&gt;
</content>
</entry>
<entry>
<title>NFS: Refactor nfs_get_client(): initialize nfs_client</title>
<updated>2012-05-22T20:45:47Z</updated>
<author>
<name>Chuck Lever</name>
</author>
<published>2012-05-22T02:45:59Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=8cab4c390b43fe34c07bd33799c1bc24be648122'/>
<id>urn:sha1:8cab4c390b43fe34c07bd33799c1bc24be648122</id>
<content type='text'>
Clean up: Continue to rationalize the locking in nfs_get_client() by
moving the logic that handles the case where a matching server IP
address is not found.

When we support server trunking detection, client initialization may
return a different nfs_client struct than was passed to it.  Change
the synopsis of the init_client methods to return an nfs_client.

The client initialization logic in nfs_get_client() is not much more
than a wrapper around -&gt;init_client.  It's simpler to keep the little
bits of error handling in the version-specific init_client methods.

No behavior change is expected.

Signed-off-by: Chuck Lever &lt;chuck.lever@oracle.com&gt;
Signed-off-by: Trond Myklebust &lt;Trond.Myklebust@netapp.com&gt;
</content>
</entry>
<entry>
<title>NFS: Refactor nfs_get_client(): add nfs_found_client()</title>
<updated>2012-05-22T20:45:46Z</updated>
<author>
<name>Chuck Lever</name>
</author>
<published>2012-05-22T02:45:50Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f411703adc762a92b72f8a93c6464050d66cb87b'/>
<id>urn:sha1:f411703adc762a92b72f8a93c6464050d66cb87b</id>
<content type='text'>
Clean up: Code that takes and releases nfs_client_lock remains in
nfs_get_client().  Logic that handles a pre-existing nfs_client is
moved to a separate function.

No behavior change is expected.

Signed-off-by: Chuck Lever &lt;chuck.lever@oracle.com&gt;
Signed-off-by: Trond Myklebust &lt;Trond.Myklebust@netapp.com&gt;
</content>
</entry>
</feed>
