* Re: [nfs-utils] [PATCH 1/3] rpc.mountd: set nonblocking mode if no libtirpc [not found] <d6437a$6ag12u@dgate10u.abg.fsc.net> @ 2014-11-05 21:52 ` NeilBrown 0 siblings, 0 replies; 2+ messages in thread From: NeilBrown @ 2014-11-05 21:52 UTC (permalink / raw) To: bstroesser; +Cc: linux-nfs, bfields [-- Attachment #1: Type: text/plain, Size: 4606 bytes --] On 05 Nov 2014 21:22:56 +0100 bstroesser@ts.fujitsu.com wrote: > From: Bodo Stroesser <bstroesser@ts.fujitsu.com> > Date: Thu, 09 Oct 2014 13:06:19 +0200 > Subject: [nfs-utils] [PATCH 1/3] rpc.mountd: set nonblocking mode if no libtirpc > > If mountd is built without libtirpc and it is started using "-p XXX" option, > the tcp listeners and the sockets waiting for UDP messages are not in > non-blocking mode. Thus if running with multiple threads (-t XX), > all threads will wake up from select on a connection request or a UDP message, > but only one thread will succeed. All others will wait on accept() or read() > for the next event. > > Signed-off-by: Bodo Stroesser <bstroesser@ts.fujitsu.com> > --- Reviewed-by: NeilBrown <neilb@suse.de> This is just taking the code that already applies in svc_socket() when no explicit port number is requested, and applying it also in makesock() which is used when an explicit port number *is* requested. Thanks, NeilBrown > > --- nfs-utils-1.3.1/support/include/nfslib.h 2014-10-09 12:52:30.000000000 +0200 > +++ nfs-utils-1.3.1/support/include/nfslib.h 2014-10-09 12:53:37.000000000 +0200 > @@ -174,6 +174,7 @@ void closeall(int min); > > int svctcp_socket (u_long __number, int __reuse); > int svcudp_socket (u_long __number); > +int svcsock_nonblock (int __sock); > > /* Misc shared code prototypes */ > size_t strlcat(char *, const char *, size_t); > --- nfs-utils-1.3.1/support/nfs/svc_socket.c 2014-10-09 12:56:14.000000000 +0200 > +++ nfs-utils-1.3.1/support/nfs/svc_socket.c 2014-10-09 13:10:44.000000000 +0200 > @@ -76,6 +76,39 @@ int getservport(u_long number, const cha > return 0; > } > > +int > +svcsock_nonblock(int sock) > +{ > + int flags; > + > + if (sock < 0) > + return sock; > + > + /* This socket might be shared among multiple processes > + * if mountd is run multi-threaded. So it is safest to > + * make it non-blocking, else all threads might wake > + * one will get the data, and the others will block > + * indefinitely. > + * In all cases, transaction on this socket are atomic > + * (accept for TCP, packet-read and packet-write for UDP) > + * so O_NONBLOCK will not confuse unprepared code causing > + * it to corrupt messages. > + * It generally safest to have O_NONBLOCK when doing an accept > + * as if we get a RST after the SYN and before accept runs, > + * we can block despite being told there was an acceptable > + * connection. > + */ > + if ((flags = fcntl(sock, F_GETFL)) < 0) > + perror(_("svc_socket: can't get socket flags")); > + else if (fcntl(sock, F_SETFL, flags|O_NONBLOCK) < 0) > + perror(_("svc_socket: can't set socket flags")); > + else > + return sock; > + > + (void) __close(sock); > + return -1; > +} > + > static int > svc_socket (u_long number, int type, int protocol, int reuse) > { > @@ -113,38 +146,7 @@ svc_socket (u_long number, int type, int > sock = -1; > } > > - if (sock >= 0) > - { > - /* This socket might be shared among multiple processes > - * if mountd is run multi-threaded. So it is safest to > - * make it non-blocking, else all threads might wake > - * one will get the data, and the others will block > - * indefinitely. > - * In all cases, transaction on this socket are atomic > - * (accept for TCP, packet-read and packet-write for UDP) > - * so O_NONBLOCK will not confuse unprepared code causing > - * it to corrupt messages. > - * It generally safest to have O_NONBLOCK when doing an accept > - * as if we get a RST after the SYN and before accept runs, > - * we can block despite being told there was an acceptable > - * connection. > - */ > - int flags; > - if ((flags = fcntl(sock, F_GETFL)) < 0) > - { > - perror (_("svc_socket: can't get socket flags")); > - (void) __close (sock); > - sock = -1; > - } > - else if (fcntl(sock, F_SETFL, flags|O_NONBLOCK) < 0) > - { > - perror (_("svc_socket: can't set socket flags")); > - (void) __close (sock); > - sock = -1; > - } > - } > - > - return sock; > + return svcsock_nonblock(sock); > } > > /* > --- nfs-utils-1.3.1/support/nfs/rpcmisc.c 2014-10-08 21:22:04.000000000 +0200 > +++ nfs-utils-1.3.1/support/nfs/rpcmisc.c 2014-10-08 21:22:36.000000000 +0200 > @@ -104,7 +104,7 @@ makesock(int port, int proto) > return -1; > } > > - return sock; > + return svcsock_nonblock(sock); > } > > void [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 811 bytes --] ^ permalink raw reply [flat|nested] 2+ messages in thread
* [nfs-utils] [PATCH 1/3] rpc.mountd: set nonblocking mode if no libtirpc @ 2014-11-05 20:22 bstroesser 0 siblings, 0 replies; 2+ messages in thread From: bstroesser @ 2014-11-05 20:22 UTC (permalink / raw) To: neilb, linux-nfs; +Cc: bfields, bstroesser RnJvbTogQm9kbyBTdHJvZXNzZXIgPGJzdHJvZXNzZXJAdHMuZnVqaXRzdS5jb20+CkRhdGU6 IFRodSwgMDkgT2N0IDIwMTQgMTM6MDY6MTkgKzAyMDAKU3ViamVjdDogW25mcy11dGlsc10g W1BBVENIIDEvM10gcnBjLm1vdW50ZDogc2V0IG5vbmJsb2NraW5nIG1vZGUgaWYgbm8gbGli dGlycGMKCklmIG1vdW50ZCBpcyBidWlsdCB3aXRob3V0IGxpYnRpcnBjIGFuZCBpdCBpcyBz dGFydGVkIHVzaW5nICItcCBYWFgiIG9wdGlvbiwKdGhlIHRjcCBsaXN0ZW5lcnMgYW5kIHRo ZSBzb2NrZXRzIHdhaXRpbmcgZm9yIFVEUCBtZXNzYWdlcyBhcmUgbm90IGluCm5vbi1ibG9j a2luZyBtb2RlLiBUaHVzIGlmIHJ1bm5pbmcgd2l0aCBtdWx0aXBsZSB0aHJlYWRzICgtdCBY WCksCmFsbCB0aHJlYWRzIHdpbGwgd2FrZSB1cCBmcm9tIHNlbGVjdCBvbiBhIGNvbm5lY3Rp b24gcmVxdWVzdCBvciBhIFVEUCBtZXNzYWdlLApidXQgb25seSBvbmUgdGhyZWFkIHdpbGwg c3VjY2VlZC4gQWxsIG90aGVycyB3aWxsIHdhaXQgb24gYWNjZXB0KCkgb3IgcmVhZCgpCmZv ciB0aGUgbmV4dCBldmVudC4KClNpZ25lZC1vZmYtYnk6IEJvZG8gU3Ryb2Vzc2VyIDxic3Ry b2Vzc2VyQHRzLmZ1aml0c3UuY29tPgotLS0KCi0tLSBuZnMtdXRpbHMtMS4zLjEvc3VwcG9y dC9pbmNsdWRlL25mc2xpYi5oCTIwMTQtMTAtMDkgMTI6NTI6MzAuMDAwMDAwMDAwICswMjAw CisrKyBuZnMtdXRpbHMtMS4zLjEvc3VwcG9ydC9pbmNsdWRlL25mc2xpYi5oCTIwMTQtMTAt MDkgMTI6NTM6MzcuMDAwMDAwMDAwICswMjAwCkBAIC0xNzQsNiArMTc0LDcgQEAgdm9pZCBj bG9zZWFsbChpbnQgbWluKTsKIAogaW50CQkJc3ZjdGNwX3NvY2tldCAodV9sb25nIF9fbnVt YmVyLCBpbnQgX19yZXVzZSk7CiBpbnQJCQlzdmN1ZHBfc29ja2V0ICh1X2xvbmcgX19udW1i ZXIpOworaW50CQkJc3Zjc29ja19ub25ibG9jayAoaW50IF9fc29jayk7CiAKIC8qIE1pc2Mg c2hhcmVkIGNvZGUgcHJvdG90eXBlcyAqLwogc2l6ZV90ICBzdHJsY2F0KGNoYXIgKiwgY29u c3QgY2hhciAqLCBzaXplX3QpOwotLS0gbmZzLXV0aWxzLTEuMy4xL3N1cHBvcnQvbmZzL3N2 Y19zb2NrZXQuYwkyMDE0LTEwLTA5IDEyOjU2OjE0LjAwMDAwMDAwMCArMDIwMAorKysgbmZz LXV0aWxzLTEuMy4xL3N1cHBvcnQvbmZzL3N2Y19zb2NrZXQuYwkyMDE0LTEwLTA5IDEzOjEw OjQ0LjAwMDAwMDAwMCArMDIwMApAQCAtNzYsNiArNzYsMzkgQEAgaW50IGdldHNlcnZwb3J0 KHVfbG9uZyBudW1iZXIsIGNvbnN0IGNoYQogCXJldHVybiAwOwogfQogCitpbnQKK3N2Y3Nv Y2tfbm9uYmxvY2soaW50IHNvY2spCit7CisJaW50IGZsYWdzOworCisJaWYgKHNvY2sgPCAw KQorCQlyZXR1cm4gc29jazsKKworCS8qIFRoaXMgc29ja2V0IG1pZ2h0IGJlIHNoYXJlZCBh bW9uZyBtdWx0aXBsZSBwcm9jZXNzZXMKKwkgKiBpZiBtb3VudGQgaXMgcnVuIG11bHRpLXRo cmVhZGVkLiAgU28gaXQgaXMgc2FmZXN0IHRvCisJICogbWFrZSBpdCBub24tYmxvY2tpbmcs IGVsc2UgYWxsIHRocmVhZHMgbWlnaHQgd2FrZQorCSAqIG9uZSB3aWxsIGdldCB0aGUgZGF0 YSwgYW5kIHRoZSBvdGhlcnMgd2lsbCBibG9jaworCSAqIGluZGVmaW5pdGVseS4KKwkgKiBJ biBhbGwgY2FzZXMsIHRyYW5zYWN0aW9uIG9uIHRoaXMgc29ja2V0IGFyZSBhdG9taWMKKwkg KiAoYWNjZXB0IGZvciBUQ1AsIHBhY2tldC1yZWFkIGFuZCBwYWNrZXQtd3JpdGUgZm9yIFVE UCkKKwkgKiBzbyBPX05PTkJMT0NLIHdpbGwgbm90IGNvbmZ1c2UgdW5wcmVwYXJlZCBjb2Rl IGNhdXNpbmcKKwkgKiBpdCB0byBjb3JydXB0IG1lc3NhZ2VzLgorCSAqIEl0IGdlbmVyYWxs eSBzYWZlc3QgdG8gaGF2ZSBPX05PTkJMT0NLIHdoZW4gZG9pbmcgYW4gYWNjZXB0CisJICog YXMgaWYgd2UgZ2V0IGEgUlNUIGFmdGVyIHRoZSBTWU4gYW5kIGJlZm9yZSBhY2NlcHQgcnVu cywKKwkgKiB3ZSBjYW4gYmxvY2sgZGVzcGl0ZSBiZWluZyB0b2xkIHRoZXJlIHdhcyBhbiBh Y2NlcHRhYmxlCisJICogY29ubmVjdGlvbi4KKwkgKi8KKwlpZiAoKGZsYWdzID0gZmNudGwo c29jaywgRl9HRVRGTCkpIDwgMCkKKwkJcGVycm9yKF8oInN2Y19zb2NrZXQ6IGNhbid0IGdl dCBzb2NrZXQgZmxhZ3MiKSk7CisJZWxzZSBpZiAoZmNudGwoc29jaywgRl9TRVRGTCwgZmxh Z3N8T19OT05CTE9DSykgPCAwKQorCQlwZXJyb3IoXygic3ZjX3NvY2tldDogY2FuJ3Qgc2V0 IHNvY2tldCBmbGFncyIpKTsKKwllbHNlCisJCXJldHVybiBzb2NrOworCisJKHZvaWQpIF9f Y2xvc2Uoc29jayk7CisJcmV0dXJuIC0xOworfQorCiBzdGF0aWMgaW50CiBzdmNfc29ja2V0 ICh1X2xvbmcgbnVtYmVyLCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQgcmV1c2UpCiB7 CkBAIC0xMTMsMzggKzE0Niw3IEBAIHN2Y19zb2NrZXQgKHVfbG9uZyBudW1iZXIsIGludCB0 eXBlLCBpbnQKICAgICAgIHNvY2sgPSAtMTsKICAgICB9CiAKLSAgaWYgKHNvY2sgPj0gMCkK LSAgICB7Ci0JICAgIC8qIFRoaXMgc29ja2V0IG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBtdWx0 aXBsZSBwcm9jZXNzZXMKLQkgICAgICogaWYgbW91bnRkIGlzIHJ1biBtdWx0aS10aHJlYWRl ZC4gIFNvIGl0IGlzIHNhZmVzdCB0bwotCSAgICAgKiBtYWtlIGl0IG5vbi1ibG9ja2luZywg ZWxzZSBhbGwgdGhyZWFkcyBtaWdodCB3YWtlCi0JICAgICAqIG9uZSB3aWxsIGdldCB0aGUg ZGF0YSwgYW5kIHRoZSBvdGhlcnMgd2lsbCBibG9jawotCSAgICAgKiBpbmRlZmluaXRlbHku Ci0JICAgICAqIEluIGFsbCBjYXNlcywgdHJhbnNhY3Rpb24gb24gdGhpcyBzb2NrZXQgYXJl IGF0b21pYwotCSAgICAgKiAoYWNjZXB0IGZvciBUQ1AsIHBhY2tldC1yZWFkIGFuZCBwYWNr ZXQtd3JpdGUgZm9yIFVEUCkKLQkgICAgICogc28gT19OT05CTE9DSyB3aWxsIG5vdCBjb25m dXNlIHVucHJlcGFyZWQgY29kZSBjYXVzaW5nCi0JICAgICAqIGl0IHRvIGNvcnJ1cHQgbWVz c2FnZXMuCi0JICAgICAqIEl0IGdlbmVyYWxseSBzYWZlc3QgdG8gaGF2ZSBPX05PTkJMT0NL IHdoZW4gZG9pbmcgYW4gYWNjZXB0Ci0JICAgICAqIGFzIGlmIHdlIGdldCBhIFJTVCBhZnRl ciB0aGUgU1lOIGFuZCBiZWZvcmUgYWNjZXB0IHJ1bnMsCi0JICAgICAqIHdlIGNhbiBibG9j ayBkZXNwaXRlIGJlaW5nIHRvbGQgdGhlcmUgd2FzIGFuIGFjY2VwdGFibGUKLQkgICAgICog Y29ubmVjdGlvbi4KLQkgICAgICovCi0JaW50IGZsYWdzOwotCWlmICgoZmxhZ3MgPSBmY250 bChzb2NrLCBGX0dFVEZMKSkgPCAwKQotCSAgewotCSAgICAgIHBlcnJvciAoXygic3ZjX3Nv Y2tldDogY2FuJ3QgZ2V0IHNvY2tldCBmbGFncyIpKTsKLQkgICAgICAodm9pZCkgX19jbG9z ZSAoc29jayk7Ci0JICAgICAgc29jayA9IC0xOwotCSAgfQotCWVsc2UgaWYgKGZjbnRsKHNv Y2ssIEZfU0VURkwsIGZsYWdzfE9fTk9OQkxPQ0spIDwgMCkKLQkgIHsKLQkgICAgICBwZXJy b3IgKF8oInN2Y19zb2NrZXQ6IGNhbid0IHNldCBzb2NrZXQgZmxhZ3MiKSk7Ci0JICAgICAg KHZvaWQpIF9fY2xvc2UgKHNvY2spOwotCSAgICAgIHNvY2sgPSAtMTsKLQkgIH0KLSAgICB9 Ci0KLSAgcmV0dXJuIHNvY2s7CisgIHJldHVybiBzdmNzb2NrX25vbmJsb2NrKHNvY2spOwog fQogCiAvKgotLS0gbmZzLXV0aWxzLTEuMy4xL3N1cHBvcnQvbmZzL3JwY21pc2MuYwkyMDE0 LTEwLTA4IDIxOjIyOjA0LjAwMDAwMDAwMCArMDIwMAorKysgbmZzLXV0aWxzLTEuMy4xL3N1 cHBvcnQvbmZzL3JwY21pc2MuYwkyMDE0LTEwLTA4IDIxOjIyOjM2LjAwMDAwMDAwMCArMDIw MApAQCAtMTA0LDcgKzEwNCw3IEBAIG1ha2Vzb2NrKGludCBwb3J0LCBpbnQgcHJvdG8pCiAJ CXJldHVybiAtMTsKIAl9CiAKLQlyZXR1cm4gc29jazsKKwlyZXR1cm4gc3Zjc29ja19ub25i bG9jayhzb2NrKTsKIH0KIAogdm9pZAo= ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-11-05 21:52 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <d6437a$6ag12u@dgate10u.abg.fsc.net>
2014-11-05 21:52 ` [nfs-utils] [PATCH 1/3] rpc.mountd: set nonblocking mode if no libtirpc NeilBrown
2014-11-05 20:22 bstroesser
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox