public inbox for linux-nfs@vger.kernel.org
 help / color / mirror / Atom feed
* [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

* 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

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 --
2014-11-05 20:22 [nfs-utils] [PATCH 1/3] rpc.mountd: set nonblocking mode if no libtirpc bstroesser
     [not found] <d6437a$6ag12u@dgate10u.abg.fsc.net>
2014-11-05 21:52 ` NeilBrown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox