Hello community,

here is the log from the commit of package quota for openSUSE:Factory checked 
in at 2018-08-18 00:02:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/quota (Old)
 and      /work/SRC/openSUSE:Factory/.quota.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "quota"

Sat Aug 18 00:02:31 2018 rev:53 rq:629380 version:4.04

Changes:
--------
--- /work/SRC/openSUSE:Factory/quota/quota.changes      2018-03-13 
10:24:03.041744283 +0100
+++ /work/SRC/openSUSE:Factory/.quota.new/quota.changes 2018-08-18 
00:02:58.278872537 +0200
@@ -1,0 +2,6 @@
+Wed Aug 15 10:57:33 UTC 2018 - tchva...@suse.com
+
+- Add patch to fix high cpu load bsc#1104898:
+  * quota-4.04-Listen-on-a-TCP-socket.patch
+
+-------------------------------------------------------------------

New:
----
  quota-4.04-Listen-on-a-TCP-socket.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ quota.spec ++++++
--- /var/tmp/diff_new_pack.uDatGq/_old  2018-08-18 00:02:58.966874592 +0200
+++ /var/tmp/diff_new_pack.uDatGq/_new  2018-08-18 00:02:58.986874652 +0200
@@ -31,6 +31,7 @@
 Source1:        sysconfig.nfs-quota
 Source2:        quotad.service
 Source3:        quotad_env.sh
+Patch1:         quota-4.04-Listen-on-a-TCP-socket.patch
 Patch2:         %{name}-4.01-warnquota.patch
 BuildRequires:  e2fsprogs-devel
 BuildRequires:  openldap2-devel
@@ -65,6 +66,7 @@
 
 %prep
 %setup -q
+%patch1 -p1
 %patch2
 
 %build

++++++ quota-4.04-Listen-on-a-TCP-socket.patch ++++++
>From 31ecd29b3b3f51145fd78f63087c10e9fcadf999 Mon Sep 17 00:00:00 2001
From: Steve Dickson <ste...@redhat.com>
Date: Tue, 22 May 2018 12:41:59 +0200
Subject: [PATCH] Listen on a TCP socket
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

rpc.rquotad spins in libtirpc's rendezvous_request() on accepting TCP
connections because the polled TCP socket is not listening:

poll([{fd=4, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}, {fd=5,
  events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}, {fd=6,
  events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}, {fd=7,
  events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 4, -1) = 2 ([{fd=5,
  revents=POLLHUP}, {fd=7, revents=POLLHUP}])
accept(5, 0x7ffe61698700, [128])        = -1 EINVAL (Invalid argument)
accept(7, 0x7ffe61698700, [128])        = -1 EINVAL (Invalid argument)

The polled descriptors are:

rpc.rquot 21981 root    4u  IPv4 80449159      0t0      UDP *:rquotad
rpc.rquot 21981 root    5u  sock      0,9      0t0 80449162 protocol: TCP
rpc.rquot 21981 root    6u  IPv6 80449165      0t0      UDP *:rquotad
rpc.rquot 21981 root    7u  sock      0,9      0t0 80449168 protocol: TCPv6

That results into a high CPU usage just after staring rpc.rquotad
process.

This patch adds a listen() call to svc_create_sock()
routine which is needed with libtirpc version of svc_tli_create()
as well as a needed IPv6 setsockopt().

Signed-off-by: Petr Písař <ppi...@redhat.com>
---
 svc_socket.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/svc_socket.c b/svc_socket.c
index 8a44604..d2e3abf 100644
--- a/svc_socket.c
+++ b/svc_socket.c
@@ -118,6 +118,15 @@ static int svc_create_sock(struct addrinfo *ai)
                return -1;
        }
 
+       if (ai->ai_family == AF_INET6) {
+               if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY,
+                               &optval, sizeof(optval)) < 0) {
+                       errstr(_("Cannot set IPv6 socket options: %s\n"), 
strerror(errno));
+                       close(fd);
+                       return -1;
+               }
+       }
+
        if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 
0) {
                errstr(_("Cannot set socket options: %s\n"), strerror(errno));
                close(fd);
@@ -129,6 +138,15 @@ static int svc_create_sock(struct addrinfo *ai)
                close(fd);
                return -1;
        }
+
+       if (ai->ai_protocol == IPPROTO_TCP) {
+               if (listen(fd, SOMAXCONN) < 0) {
+                       errstr(_("Cannot listen to address: %s\n"), 
strerror(errno));
+                       close(fd);
+                       return -1;
+               }
+       }
+
        return fd;
 }
 
-- 
2.14.3


Reply via email to