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>