<feed xmlns='http://www.w3.org/2005/Atom'>
<title>src/sys/nfsclient, branch upstream/10.1.0</title>
<subtitle>FreeBSD source tree</subtitle>
<id>https://cgit-dev.freebsd.org/src/atom?h=upstream%2F10.1.0</id>
<link rel='self' href='https://cgit-dev.freebsd.org/src/atom?h=upstream%2F10.1.0'/>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/'/>
<updated>2013-12-30T21:17:20Z</updated>
<entry>
<title>MFC: r259084</title>
<updated>2013-12-30T21:17:20Z</updated>
<author>
<name>Rick Macklem</name>
<email>rmacklem@FreeBSD.org</email>
</author>
<published>2013-12-30T21:17:20Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=a2e3a3e3ebc4c128859ab940b3e57532a4bddbca'/>
<id>urn:sha1:a2e3a3e3ebc4c128859ab940b3e57532a4bddbca</id>
<content type='text'>
For software builds, the NFS client does many small
synchronous (with FILE_SYNC) writes because non-contiguous
byte ranges in the same buffer cache block are being
written. This patch adds a new mount option "noncontigwr"
which allows the non-contiguous byte ranges to be combined,
with the dirty byte range becoming the superset of the bytes
that are dirty, if the file has not been file locked.
This reduces the number of writes significantly for software
builds. The only case where this change might break existing
applications is where an application is writing
non-overlapping byte ranges within the same buffer cache block
of a file from multiple clients concurrently.
Since such an application would normally do file locking on
the file, avoiding the byte range merge for files that have
been file locked should be sufficient for most (maybe all?) cases.
</content>
</entry>
<entry>
<title>A problem with the old NFS client where large writes to large files</title>
<updated>2013-07-04T00:54:23Z</updated>
<author>
<name>Rick Macklem</name>
<email>rmacklem@FreeBSD.org</email>
</author>
<published>2013-07-04T00:54:23Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=913df8fd72b732f1a8c64e5ddbd4de73c7be5d78'/>
<id>urn:sha1:913df8fd72b732f1a8c64e5ddbd4de73c7be5d78</id>
<content type='text'>
would sometimes result in a corrupted file was reported via email.
This problem appears to have been caused by r251719 (reverting
r251719 fixed the problem). Although I have not been able to
reproduce this problem, I suspect it is caused by another thread
increasing np-&gt;n_size after the mtx_unlock(&amp;np-&gt;n_mtx) but before
the vnode_pager_setsize() call. Since the np-&gt;n_mtx mutex serializes
updates to np-&gt;n_size, doing the vnode_pager_setsize() with the
mutex locked appears to avoid the problem.
Unfortunately, vnode_pager_setsize() where the new size is smaller,
cannot be called with a mutex held.
This patch returns the semantics to be close to pre-r251719 such that the
call to the vnode_pager_setsize() is only delayed until after the mutex is
unlocked when np-&gt;n_size is shrinking. Since the file is growing
when being written, I believe this will fix the corruption.

Reported by:	David G. Lawrence (dg@dglawrence.com)
Tested by:	David G. Lawrence (pending, to happen soon)
Reviewed by:	kib
MFC after:	1 week
</content>
</entry>
<entry>
<title>A recent version of the oldnfs NFS client in head/current</title>
<updated>2013-07-01T21:16:19Z</updated>
<author>
<name>Rick Macklem</name>
<email>rmacklem@FreeBSD.org</email>
</author>
<published>2013-07-01T21:16:19Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=28be5427f11582d9c643dc872ef45325bd96e0e5'/>
<id>urn:sha1:28be5427f11582d9c643dc872ef45325bd96e0e5</id>
<content type='text'>
will crash when doing a large write, since m_get2() would
return NULL. This patch fixes the problem, since nfsm_uiotombuf()
will allocate additional mbufs, as required.

Reported by:	sbruno
Tested by:	sbruno
Discussed with:	glebius
</content>
</entry>
<entry>
<title> - Convert the bufobj lock to rwlock.</title>
<updated>2013-05-31T00:43:41Z</updated>
<author>
<name>Jeff Roberson</name>
<email>jeff@FreeBSD.org</email>
</author>
<published>2013-05-31T00:43:41Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=22a722605d723aab89d510c7a77d6508fb995785'/>
<id>urn:sha1:22a722605d723aab89d510c7a77d6508fb995785</id>
<content type='text'>
 - Use a shared bufobj lock in getblk() and inmem().
 - Convert softdep's lk to rwlock to match the bufobj lock.
 - Move INFREECNT to b_flags and protect it with the buf lock.
 - Remove unnecessary locking around bremfree() and BKGRDINPROG.

Sponsored by:	EMC / Isilon Storage Division
Discussed with:	mckusick, kib, mdf
</content>
</entry>
<entry>
<title>Add a patch analygous to r248567, r248581, r251079 to the</title>
<updated>2013-05-29T00:32:49Z</updated>
<author>
<name>Rick Macklem</name>
<email>rmacklem@FreeBSD.org</email>
</author>
<published>2013-05-29T00:32:49Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=456219935079760ca57c79870450d04f296e8e0f'/>
<id>urn:sha1:456219935079760ca57c79870450d04f296e8e0f</id>
<content type='text'>
old NFS client to avoid the panic reported in the PR by
doing the vnode_pager_setsize() call after unlocking the mutex.

PR:		177335
MFC after:	2 weeks
</content>
</entry>
<entry>
<title>When an NFS unmount occurs, once vflush() writes the last dirty</title>
<updated>2013-04-18T23:20:16Z</updated>
<author>
<name>Rick Macklem</name>
<email>rmacklem@FreeBSD.org</email>
</author>
<published>2013-04-18T23:20:16Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=64a0e848abbc491831a2969e72ecfb6a0ae9716c'/>
<id>urn:sha1:64a0e848abbc491831a2969e72ecfb6a0ae9716c</id>
<content type='text'>
buffer for the last vnode on the mount back to the server, it
returns. At that point, the code continues with the unmount,
including freeing up the nfs specific part of the mount structure.
It is possible that an nfsiod thread will try to check for an
empty I/O queue in the nfs specific part of the mount structure
after it has been free'd by the unmount. This patch avoids this problem by
setting the iodmount entries for the mount back to NULL while holding the
mutex in the unmount and checking the appropriate entry is non-NULL after
acquiring the mutex in the nfsiod thread.

Reported and tested by:	pho
Reviewed by:	kib
MFC after:	2 weeks
</content>
</entry>
<entry>
<title>Both NFS clients can deadlock when using the "rdirplus" mount</title>
<updated>2013-04-18T13:09:04Z</updated>
<author>
<name>Rick Macklem</name>
<email>rmacklem@FreeBSD.org</email>
</author>
<published>2013-04-18T13:09:04Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=175b3f31d328545a5bca42b0f6ac6de344e0eb4a'/>
<id>urn:sha1:175b3f31d328545a5bca42b0f6ac6de344e0eb4a</id>
<content type='text'>
option. This can occur when an nfsiod thread that already holds
a buffer lock attempts to acquire a vnode lock on an entry in
the directory (a LOR) when another thread holding the vnode lock
is waiting on an nfsiod thread. This patch avoids the deadlock by disabling
readahead for this case, so the nfsiod threads never do readdirplus.
Since readaheads for directories need the directory offset cookie
from the previous read, they cannot normally happen in parallel.
As such, testing by jhb@ and myself didn't find any performance
degredation when this patch is applied. If there is a case where
this results in a significant performance degradation, mounting
without the "rdirplus" option can be done to re-enable readahead
for directories.

Reported and tested by:	jhb
Reviewed by:	jhb
MFC after:	2 weeks
</content>
</entry>
<entry>
<title>Fix remainder calculation when biosize is not a power of 2</title>
<updated>2013-03-19T13:06:11Z</updated>
<author>
<name>Ed Maste</name>
<email>emaste@FreeBSD.org</email>
</author>
<published>2013-03-19T13:06:11Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=96ecfd9813e28e4063dda8fe1e7377adf7f25c8d'/>
<id>urn:sha1:96ecfd9813e28e4063dda8fe1e7377adf7f25c8d</id>
<content type='text'>
In common configurations biosize is a power of two, but is not required to
be so.  Thanks to markj@ for spotting an additional case beyond my original
patch.

Reviewed by: rmacklem@
</content>
</entry>
<entry>
<title>Revert 195703 and 195821 as this special stop handling in NFS is now</title>
<updated>2013-03-13T21:06:03Z</updated>
<author>
<name>John Baldwin</name>
<email>jhb@FreeBSD.org</email>
</author>
<published>2013-03-13T21:06:03Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=3b14c753ff70b86b5ca129bfb62b516ed53054a7'/>
<id>urn:sha1:3b14c753ff70b86b5ca129bfb62b516ed53054a7</id>
<content type='text'>
implemented via VFCF_SBDRY rather than passing PBDRY to individual
sleep calls.
</content>
</entry>
<entry>
<title>Functions m_getm2() and m_get2() have different order of arguments,</title>
<updated>2013-03-12T13:42:47Z</updated>
<author>
<name>Gleb Smirnoff</name>
<email>glebius@FreeBSD.org</email>
</author>
<published>2013-03-12T13:42:47Z</published>
<link rel='alternate' type='text/html' href='https://cgit-dev.freebsd.org/src/commit/?id=41a7572b26da5acade4565f8cf943b13ac6fedb5'/>
<id>urn:sha1:41a7572b26da5acade4565f8cf943b13ac6fedb5</id>
<content type='text'>
and that can drive someone crazy. While m_get2() is young and not
documented yet, change its order of arguments to match m_getm2().

Sorry for churn, but better now than later.
</content>
</entry>
</feed>
