From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.web.de (mout.web.de [212.227.17.11]) by sourceware.org (Postfix) with ESMTPS id B8D023874C1D for ; Mon, 15 Feb 2021 08:33:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org B8D023874C1D X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from [192.168.2.103] ([84.143.151.159]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0MI6C2-1l9vxX1ala-003tlw; Mon, 15 Feb 2021 09:33:29 +0100 Subject: Re: (stat(...) == -1 || faccessat(...) == -1) && errno == EINTR ?!?? From: Tobias Bading To: libc-help@sourceware.org References: <000830b6-1cf0-6349-5667-a5af6894ac1b@web.de> Message-ID: <1be061bd-7d45-eaeb-479a-b4e7aed65525@web.de> Date: Mon, 15 Feb 2021 09:33:28 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------51A78F4D6E2F256DBDF8B598" Content-Language: en-US X-Provags-ID: V03:K1:Arz/TG7RBXmCqXo6c4u6u1CO0x7XXgy1+8H6z5EeCDLNgXDQ1yt ogy1PL+dCMedv14+iig0tefV35BoE8sJXUUrXVZi3plsEagJS/wdUyMyrrbajmk/kvkrK4P k/ZS9A8dWC09MShPizZtzfKhdZSg8tJQsPs/kp0fChq1CwBsgwk6LiK13gzTOaQJ7u+U1wh YBG1NSX3fmZbEWo+2vV/g== X-UI-Out-Filterresults: notjunk:1;V03:K0:aTaLJMHWq3U=:QXH4gQVTHTfdQdrGM9gqXt jBJiSlgJyAXuObynh3xObp0nfk2zjiExus1PBhT8BGc+xwJ7ynbv8tDiL8M83/IqAx+VjQ9wL DiAP+wI/oVHDKdxybl0gq4untMTEpRUxrf4ZX6iMj6p34mHJbEfEd+ZHHELmEdRuwMZ3KwZMV ZcAaHD/98Ab1XpBHqEJSjo1y0QH7kbx2QSya6cILRgHkqFaJdAS0hqW88HuadpiyqCCNdAWzS mH0Tg3xMqYLnNQi7u3yoAoCVgaGurtvLQMFJKdTioMdqFR48BXiiKKx9nxO9/BYBHoRvaGZwH JW5FHJIt/iQLgIsTzoFjhX4PrJkW13g8u+ftjNTvQdyGJtP/yqYghAvlhDN4GPkMBGRRDRvBt InHKc0z0eY+iRBRgeuNb8r4kvFuft8+aqv5en3FXLLiNrfoFfHRCbLza4RLKgCqQnxdcQMIii sDt2M0a3UEaT7mTxoLB98ui0BPWkK9IbKRCne8kvHCvRkXcQP+FutnwVHo26KXg390KoLthju +6uSK/UUfFIPWQ3Qzb/rybRpwwRwA/dQ1G+JAlZvKnLfFGKE8Y8vltV2AxqT0uL/2bC+r36Mj E0sw8Z969bGMCJ/2YKB5l4LbmJXKFwQ5xbtdOGoR0DBL7HkzedgpMC9QSdQGLOWYB/7Itoi8x vD0nZqvbA/Q0b2S1g9/00uq4bvOeZrc3REUIa1D5J8OfmQGNZ8u6GbCxCaup8XgTpuQ0Z1Tav 8HOph5AkMA95I9juARBdKWewWkRfhuMr7TbKaTwyJItnkAfJkpHoZDRm/7I2f4VcScdBgZwLy VAC/iC7+pX65fHlkzcUreCwKYfaUk92igUVib1YDddpWdNuSUAK+bvD74QSBg2JSCeNU3sTrI N3t6nnWycn/1FxWJRMYw== X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, NICE_REPLY_A, PLING_QUERY, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-help@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-help mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Feb 2021 08:33:33 -0000 This is a multi-part message in MIME format. --------------51A78F4D6E2F256DBDF8B598 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Update: I've pimped the test program a bit and ran it against a local CIFS share like Konstantin did. Output of some of my test runs: $ ./its-raining-signals /mnt/shared 100 100 signals during 747470 loop iterations 100 signals during 752470 loop iterations 100 signals during 733729 loop iterations 100 signals during 754084 loop iterations 100 signals during 746603 loop iterations stat() failed: Interrupted system call $ ./its-raining-signals /mnt/shared 1000 1000 signals during 746063 loop iterations stat() failed: Interrupted system call $ ./its-raining-signals /mnt/shared 10000 stat() failed: Interrupted system call $ ./its-raining-signals /mnt/shared 1000 r 1000 signals during 724637 loop iterations 1000 signals during 749337 loop iterations 1000 signals during 747301 loop iterations [... keeps on going, no errors ...] $ ./its-raining-signals /mnt/shared 10000 r [no output, hangs] These are the two CIFS-related kernel patches I've found so far: - cifs: handle -EINTR in cifs_setattr https://github.com/torvalds/linux/commit/c6cc4c5a72505a0ecefc9b413f16bec51= 2f38078 =C2=A0 (earliest linux-stable tag including the patch: v5.10-rc1) - cifs: do not fail __smb_send_rqst if non-fatal signals are pending =C2=A0 (already mentioned by Godmar) https://github.com/torvalds/linux/commit/214a5ea081e77346e4963dd6d20c5539f= f8b6ae6 =C2=A0 (earliest linux-stable tag including the patch: v5.11-rc5) If I checked the Ubuntu focal git repo correctly, both commits aren't in there, so apparently no backports yet in Ubuntu. I'll check how much effort it is to install a newer mainline kernel (including the kernel modules like cifs.ko) in Ubuntu focal. Tobias --------------51A78F4D6E2F256DBDF8B598 Content-Type: text/x-csrc; charset=UTF-8; name="its-raining-signals.c" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="its-raining-signals.c" #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include static long handler_calls, loop_iterations; #define TEST_STAT stat (path, &st) #define TEST_FACCESSAT faccessat (AT_FDCWD, path, R_OK, 0) void handler (int signum) { ++handler_calls; } int main (int argc, char *argv[]) { const char *path; long signals_per_second; int retry = 0; struct stat st; struct sigaction action; struct itimerval timer; if (argc < 3) { printf ("usage: %s PATH-TO-SHARE SIGNALS-PER-SECOND [r]\n" " SIGNALS-PER-SECOND between 2 and 1 million\n" " r repeats a call when errno is EINTR\n", argv[0]); return 1; } path = argv[1]; signals_per_second = strtol (argv[2], NULL, 0); if (argc >= 4 && !strcmp (argv[3], "r")) retry = 1; memset (&action, 0, sizeof action); action.sa_handler = handler; action.sa_flags = SA_RESTART; if (sigaction (SIGALRM, &action, NULL)) { perror ("sigaction() failed"); return 1; } timer.it_value.tv_sec = timer.it_interval.tv_sec = 0; timer.it_value.tv_usec = timer.it_interval.tv_usec = 1000000 / signals_per_second; if (setitimer (ITIMER_REAL, &timer, NULL)) { perror ("setitimer() failed"); return 1; } for (;;) { if (retry ? TEMP_FAILURE_RETRY (TEST_STAT) : TEST_STAT) { perror ("stat() failed"); return 1; } if (retry ? TEMP_FAILURE_RETRY (TEST_FACCESSAT) : TEST_FACCESSAT) { perror ("faccessat() failed"); return 1; } ++loop_iterations; if (handler_calls >= signals_per_second) { printf ("%ld signals during %ld loop iterations\n", handler_calls, loop_iterations); handler_calls = loop_iterations = 0; } } return 0; } --------------51A78F4D6E2F256DBDF8B598--