Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Apr 2015 17:57:01 -0400 (EDT)
From:      Rick Macklem <rmacklem@uoguelph.ca>
To:        FreeBSD Filesystems <freebsd-fs@freebsd.org>
Subject:   bugfix for nfsd commit for ZFS
Message-ID:  <1831222043.18160009.1428962221426.JavaMail.root@uoguelph.ca>
In-Reply-To: <935099613.18159086.1428962088350.JavaMail.root@uoguelph.ca>

next in thread | previous in thread | raw e-mail | index | archive | help
------=_Part_18160007_1810024754.1428962221422
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

Hi,

mav@ identified a fairly serious problem with the NFS server
when ZFS volumes are exported. After a series of Unstable Write RPCs,
the NFS client will do a Commit RPC to ensure the data is safely on
stable storage.

The NFS server implementation did this with a loop running through the
buffer cache blocks for smaller commit sizes. This obviously doesn't
work for ZFS, since it doesn't use the buffer cache. To fix this, ZFS
must always call VOP_FSYNC() instead of doing this loop.

After discussion with mav@ and kib@, it seemed that the preferred solution
is to have file systems that use the buffer cache set MNTK_USES_BCACHE,
so that the NFS server's commit will always use VOP_FSYNC() for file
systems that don't set this.
Old file system modules that do not set the flag should be ok, since
always calling VOP_FSYNC() may be suboptimal, but will still be correct.
"unionfs" never sets this flag, since it would be incorrect if one of
the file systems has it set and the other not set. (Since unionfs mounts
cannot be exported for NFS, I think this is ok.)

If anyone has comments w.r.t. this or would like to review the patch
(already reviewed by kib@), I've attached the current patch.

rick

------=_Part_18160007_1810024754.1428962221422
Content-Type: text/x-patch; name=commit.patch
Content-Disposition: attachment; filename=commit.patch
Content-Transfer-Encoding: base64

LS0tIGtlcm4vdmZzX3N1YnIuYy5zYXZjb21taXQJMjAxNS0wNC0xMSAyMDowNjo0Ny4wMDAwMDAw
MDAgLTA0MDAKKysrIGtlcm4vdmZzX3N1YnIuYwkyMDE1LTA0LTExIDIwOjE0OjA2LjAwMDAwMDAw
MCAtMDQwMApAQCAtMzEzNCw2ICszMTM0LDcgQEAgREJfU0hPV19DT01NQU5EKG1vdW50LCBkYl9z
aG93X21vdW50KQogCU1OVF9LRVJOX0ZMQUcoTU5US19WR09ORV9XQUlURVIpOwogCU1OVF9LRVJO
X0ZMQUcoTU5US19MT09LVVBfRVhDTF9ET1RET1QpOwogCU1OVF9LRVJOX0ZMQUcoTU5US19NQVJL
RVIpOworCU1OVF9LRVJOX0ZMQUcoTU5US19VU0VTX0JDQUNIRSk7CiAJTU5UX0tFUk5fRkxBRyhN
TlRLX05PQVNZTkMpOwogCU1OVF9LRVJOX0ZMQUcoTU5US19VTk1PVU5UKTsKIAlNTlRfS0VSTl9G
TEFHKE1OVEtfTVdBSVQpOwotLS0gZnMvZnVzZS9mdXNlX3Zmc29wcy5jLnNhdmNvbW1pdAkyMDE1
LTA0LTEyIDE1OjU5OjIzLjAwMDAwMDAwMCAtMDQwMAorKysgZnMvZnVzZS9mdXNlX3Zmc29wcy5j
CTIwMTUtMDQtMTIgMTY6MDU6MzQuMDAwMDAwMDAwIC0wNDAwCkBAIC0zMzcsNiArMzM3LDcgQEAg
ZnVzZV92ZnNvcF9tb3VudChzdHJ1Y3QgbW91bnQgKm1wKQogCU1OVF9JTE9DSyhtcCk7CiAJbXAt
Pm1udF9kYXRhID0gZGF0YTsKIAltcC0+bW50X2ZsYWcgfD0gTU5UX0xPQ0FMOworCW1wLT5tbnRf
a2Vybl9mbGFnIHw9IE1OVEtfVVNFU19CQ0FDSEU7CiAJTU5UX0lVTkxPQ0sobXApOwogCS8qIFdl
IG5lZWQgdGhpcyBoZXJlIGFzIHRoaXMgc2xvdCBpcyB1c2VkIGJ5IGdldG5ld3Zub2RlKCkgKi8K
IAltcC0+bW50X3N0YXQuZl9pb3NpemUgPSBQQUdFX1NJWkU7Ci0tLSBmcy9udWxsZnMvbnVsbF92
ZnNvcHMuYy5zYXZjb21taXQJMjAxNS0wNC0xMSAyMDo0MDowMS4wMDAwMDAwMDAgLTA0MDAKKysr
IGZzL251bGxmcy9udWxsX3Zmc29wcy5jCTIwMTUtMDQtMTEgMjA6NDQ6MzYuMDAwMDAwMDAwIC0w
NDAwCkBAIC0xOTksNyArMTk5LDcgQEAgbnVsbGZzX21vdW50KHN0cnVjdCBtb3VudCAqbXApCiAJ
fQogCW1wLT5tbnRfa2Vybl9mbGFnIHw9IE1OVEtfTE9PS1VQX0VYQ0xfRE9URE9UOwogCW1wLT5t
bnRfa2Vybl9mbGFnIHw9IGxvd2Vycm9vdHZwLT52X21vdW50LT5tbnRfa2Vybl9mbGFnICYKLQkg
ICAgTU5US19TVVNQRU5EQUJMRTsKKwkgICAgKE1OVEtfU1VTUEVOREFCTEUgfCBNTlRLX1VTRVNf
QkNBQ0hFKTsKIAlNTlRfSVVOTE9DSyhtcCk7CiAJbXAtPm1udF9kYXRhID0geG1wOwogCXZmc19n
ZXRuZXdmc2lkKG1wKTsKLS0tIGZzL25hbmRmcy9uYW5kZnNfdmZzb3BzLmMuc2F2Y29tbWl0CTIw
MTUtMDQtMTIgMTY6MDc6NDkuMDAwMDAwMDAwIC0wNDAwCisrKyBmcy9uYW5kZnMvbmFuZGZzX3Zm
c29wcy5jCTIwMTUtMDQtMTIgMTY6MTA6MDguMDAwMDAwMDAwIC0wNDAwCkBAIC0xMzkxLDYgKzEz
OTEsNyBAQCBuYW5kZnNfbW91bnRmcyhzdHJ1Y3Qgdm5vZGUgKmRldnZwLCBzdHJ1CiAJbm1wLT5u
bV9yb25seSA9IHJvbmx5OwogCU1OVF9JTE9DSyhtcCk7CiAJbXAtPm1udF9mbGFnIHw9IE1OVF9M
T0NBTDsKKwltcC0+bW50X2tlcm5fZmxhZyB8PSBNTlRLX1VTRVNfQkNBQ0hFOwogCU1OVF9JVU5M
T0NLKG1wKTsKIAlubXAtPm5tX25hbmRmc2RldiA9IG5hbmRmc2RldjsKIAkvKiBBZGQgb3VyIG1v
dW50cG9pbnQgKi8KLS0tIGZzL2V4dDJmcy9leHQyX3Zmc29wcy5jLnNhdmNvbW1pdAkyMDE1LTA0
LTEyIDE2OjE2OjE0LjAwMDAwMDAwMCAtMDQwMAorKysgZnMvZXh0MmZzL2V4dDJfdmZzb3BzLmMJ
MjAxNS0wNC0xMiAxNjoxNjo0OS4wMDAwMDAwMDAgLTA0MDAKQEAgLTY3NCw3ICs2NzQsOCBAQCBl
eHQyX21vdW50ZnMoc3RydWN0IHZub2RlICpkZXZ2cCwgc3RydWN0CiAJICogSW5pdGlhbGl6ZSBm
aWxlc3lzdGVtIHN0YXQgaW5mb3JtYXRpb24gaW4gbW91bnQgc3RydWN0LgogCSAqLwogCU1OVF9J
TE9DSyhtcCk7Ci0JbXAtPm1udF9rZXJuX2ZsYWcgfD0gTU5US19MT09LVVBfU0hBUkVEIHwgTU5U
S19FWFRFTkRFRF9TSEFSRUQ7CisJbXAtPm1udF9rZXJuX2ZsYWcgfD0gTU5US19MT09LVVBfU0hB
UkVEIHwgTU5US19FWFRFTkRFRF9TSEFSRUQgfAorCSAgICBNTlRLX1VTRVNfQkNBQ0hFOwogCU1O
VF9JVU5MT0NLKG1wKTsKIAlyZXR1cm4gKDApOwogb3V0OgotLS0gZnMvbmZzc2VydmVyL25mc19u
ZnNkcG9ydC5jLnNhdmNvbW1pdAkyMDE1LTA0LTExIDIwOjAxOjE5LjAwMDAwMDAwMCAtMDQwMAor
KysgZnMvbmZzc2VydmVyL25mc19uZnNkcG9ydC5jCTIwMTUtMDQtMTIgMTc6MDA6MjguMDAwMDAw
MDAwIC0wNDAwCkBAIC0xMjc0LDcgKzEyNzQsOCBAQCBuZnN2bm9fZnN5bmMoc3RydWN0IHZub2Rl
ICp2cCwgdV9pbnQ2NF90CiAJICogYnl0ZSBjb3VudCBwYXJhbWV0ZXJzIHNvIGNhbGwgVk9QX0ZT
WU5DIHRoZSB3aG9sZSBmaWxlIGZvciBub3cuCiAJICogVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgTkZT
djQ6IFJGQyAzNTMwIFNlYy4gMTQuMi4zLgogCSAqLwotCWlmIChjbnQgPT0gMCB8fCBjbnQgPiBN
QVhfQ09NTUlUX0NPVU5UKSB7CisJaWYgKGNudCA9PSAwIHx8IGNudCA+IE1BWF9DT01NSVRfQ09V
TlQgfHwKKwkgICAgKHZwLT52X21vdW50LT5tbnRfa2Vybl9mbGFnICYgTU5US19VU0VTX0JDQUNI
RSkgPT0gMCkgewogCQkvKgogCQkgKiBHaXZlIHVwIGFuZCBkbyB0aGUgd2hvbGUgdGhpbmcKIAkJ
ICovCi0tLSBmcy9tc2Rvc2ZzL21zZG9zZnNfdmZzb3BzLmMuc2F2Y29tbWl0CTIwMTUtMDQtMTIg
MTY6MTg6MzkuMDAwMDAwMDAwIC0wNDAwCisrKyBmcy9tc2Rvc2ZzL21zZG9zZnNfdmZzb3BzLmMJ
MjAxNS0wNC0xMyAwODo0Njo1MC4wMDAwMDAwMDAgLTA0MDAKQEAgLTc1OSw2ICs3NTksNyBAQCBt
b3VudG1zZG9zZnMoc3RydWN0IHZub2RlICpkZXZ2cCwgc3RydWN0CiAJbXAtPm1udF9zdGF0LmZf
ZnNpZC52YWxbMV0gPSBtcC0+bW50X3ZmYy0+dmZjX3R5cGVudW07CiAJTU5UX0lMT0NLKG1wKTsK
IAltcC0+bW50X2ZsYWcgfD0gTU5UX0xPQ0FMOworCW1wLT5tbnRfa2Vybl9mbGFnIHw9IE1OVEtf
VVNFU19CQ0FDSEU7CiAJTU5UX0lVTkxPQ0sobXApOwogCiAJaWYgKHBtcC0+cG1fZmxhZ3MgJiBN
U0RPU0ZTX0xBUkdFRlMpCi0tLSBmcy9uZnNjbGllbnQvbmZzX2NsdmZzb3BzLmMuc2F2Y29tbWl0
CTIwMTUtMDQtMTIgMTY6MjM6MTcuMDAwMDAwMDAwIC0wNDAwCisrKyBmcy9uZnNjbGllbnQvbmZz
X2NsdmZzb3BzLmMJMjAxNS0wNC0xMiAxNjoyMzo1NC4wMDAwMDAwMDAgLTA0MDAKQEAgLTExOTgs
NyArMTE5OCw4IEBAIG5mc19tb3VudChzdHJ1Y3QgbW91bnQgKm1wKQogb3V0OgogCWlmICghZXJy
b3IpIHsKIAkJTU5UX0lMT0NLKG1wKTsKLQkJbXAtPm1udF9rZXJuX2ZsYWcgfD0gTU5US19MT09L
VVBfU0hBUkVEIHwgTU5US19OT19JT1BGOworCQltcC0+bW50X2tlcm5fZmxhZyB8PSBNTlRLX0xP
T0tVUF9TSEFSRUQgfCBNTlRLX05PX0lPUEYgfAorCQkgICAgTU5US19VU0VTX0JDQUNIRTsKIAkJ
TU5UX0lVTkxPQ0sobXApOwogCX0KIAlyZXR1cm4gKGVycm9yKTsKLS0tIHN5cy9tb3VudC5oLnNh
dmNvbW1pdAkyMDE1LTA0LTExIDIwOjAzOjMwLjAwMDAwMDAwMCAtMDQwMAorKysgc3lzL21vdW50
LmgJMjAxNS0wNC0xMSAyMDoxMjozNS4wMDAwMDAwMDAgLTA0MDAKQEAgLTM1NSw2ICszNTUsNyBA
QCB2b2lkICAgICAgICAgIF9fbW50X3Zub2RlX21hcmtlcmZyZWVfYWN0CiAjZGVmaW5lCU1OVEtf
TE9PS1VQX0VYQ0xfRE9URE9UCTB4MDAwMDA4MDAKICNkZWZpbmUJTU5US19NQVJLRVIJCTB4MDAw
MDEwMDAKICNkZWZpbmUJTU5US19VTk1BUFBFRF9CVUZTCTB4MDAwMDIwMDAKKyNkZWZpbmUJTU5U
S19VU0VTX0JDQUNIRQkweDAwMDA0MDAwIC8qIEZTIHVzZXMgdGhlIGJ1ZmZlciBjYWNoZS4gKi8K
ICNkZWZpbmUgTU5US19OT0FTWU5DCTB4MDA4MDAwMDAJLyogZGlzYWJsZSBhc3luYyAqLwogI2Rl
ZmluZSBNTlRLX1VOTU9VTlQJMHgwMTAwMDAwMAkvKiB1bm1vdW50IGluIHByb2dyZXNzICovCiAj
ZGVmaW5lCU1OVEtfTVdBSVQJMHgwMjAwMDAwMAkvKiB3YWl0aW5nIGZvciB1bm1vdW50IHRvIGZp
bmlzaCAqLwotLS0gdWZzL2Zmcy9mZnNfdmZzb3BzLmMuc2F2Y29tbWl0CTIwMTUtMDQtMTEgMjA6
MTU6MDEuMDAwMDAwMDAwIC0wNDAwCisrKyB1ZnMvZmZzL2Zmc192ZnNvcHMuYwkyMDE1LTA0LTEx
IDIwOjE2OjA3LjAwMDAwMDAwMCAtMDQwMApAQCAtMTA1NSw3ICsxMDU1LDggQEAgZmZzX21vdW50
ZnMoZGV2dnAsIG1wLCB0ZCkKIAkgKi8KIAlNTlRfSUxPQ0sobXApOwogCW1wLT5tbnRfa2Vybl9m
bGFnIHw9IE1OVEtfTE9PS1VQX1NIQVJFRCB8IE1OVEtfRVhURU5ERURfU0hBUkVEIHwKLQkgICAg
TU5US19OT19JT1BGIHwgTU5US19VTk1BUFBFRF9CVUZTIHwgTU5US19TVVNQRU5EQUJMRTsKKwkg
ICAgTU5US19OT19JT1BGIHwgTU5US19VTk1BUFBFRF9CVUZTIHwgTU5US19TVVNQRU5EQUJMRSB8
CisJICAgIE1OVEtfVVNFU19CQ0FDSEU7CiAJTU5UX0lVTkxPQ0sobXApOwogI2lmZGVmIFVGU19F
WFRBVFRSCiAjaWZkZWYgVUZTX0VYVEFUVFJfQVVUT1NUQVJUCg==
------=_Part_18160007_1810024754.1428962221422--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1831222043.18160009.1428962221426.JavaMail.root>