From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS53758 23.128.96.0/24 X-Spam-Status: No, score=-4.2 required=3.0 tests=AWL,BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by dcvr.yhbt.net (Postfix) with ESMTP id D18B31F5AE for ; Wed, 2 Jun 2021 20:35:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229623AbhFBUgx convert rfc822-to-8bit (ORCPT ); Wed, 2 Jun 2021 16:36:53 -0400 Received: from elephants.elehost.com ([216.66.27.132]:54622 "EHLO elephants.elehost.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229576AbhFBUgw (ORCPT ); Wed, 2 Jun 2021 16:36:52 -0400 X-Virus-Scanned: amavisd-new at elehost.com Received: from gnash (cpe00fc8d49d843-cm00fc8d49d840.cpe.net.cable.rogers.com [173.33.197.34]) (authenticated bits=0) by elephants.elehost.com (8.15.2/8.15.2) with ESMTPSA id 152KYvUw044326 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 2 Jun 2021 16:34:58 -0400 (EDT) (envelope-from rsbecker@nexbridge.com) From: "Randall S. Becker" To: "'Jeff King'" , "'Eric Wong'" Cc: "'Taylor Blau'" , "'Junio C Hamano'" , References: <002701d757d8$1a8d9dc0$4fa8d940$@nexbridge.com> <20210602201150.GA29388@dcvr> In-Reply-To: Subject: RE: [ANNOUNCE] Git v2.32.0-rc3 - t5300 Still Broken on NonStop ia64/x86 Date: Wed, 2 Jun 2021 16:34:51 -0400 Message-ID: <003c01d757ee$c0664600$4132d200$@nexbridge.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8BIT X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQJ7fmH3rhE7hkXT/heyzvk47BFclgE1aUB7AUaXbccCdnI+uAIP+0KbqYDK+OA= Content-Language: en-ca Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org On June 2, 2021 4:14 PM, Peff wrote: >Subject: Re: [ANNOUNCE] Git v2.32.0-rc3 - t5300 Still Broken on NonStop ia64/x86 >On Wed, Jun 02, 2021 at 08:11:50PM +0000, Eric Wong wrote: > >> Jeff King wrote: >> > And so when he gets this error: >> > >> > fatal: fsync error on '.git/objects/pack/tmp_pack_NkPgqN': >> > Interrupted system call >> > >> > presumably we were in fsync() when the signal arrived, and unlike >> > most other platforms, the call needs to be restarted manually (even >> > though we set up the signal with SA_RESTART). I'm not sure if this >> > violates POSIX or not (I couldn't find a definitive answer to the >> > set of interruptible functions in the standard). But either way, the >> > workaround is probably something like: >> >> "man 3posix fsync" says EINTR is allowed ("manpages-posix-dev" >> package in Debian non-free). > >Ah, thanks. Linux's fsync(3) doesn't mention it, and nor does it appear in the discussion of interruptible calls in signals(7). So I was looking >for a POSIX equivalent of that signals manpage but couldn't find one. :) > >> > #ifdef FSYNC_NEEDS_RESTART >> >> The wrapper should apply to all platforms. NFS (and presumably other >> network FSes) can be mounted with interrupts enabled. > >I don't mind that, as the wrapper is pretty low-cost (and one less Makefile knob is nice). If it's widespread, though, I find it curious that >nobody has run into it before now. I suspect this is because of the way the file system on NonStop behaves. It is a multi-processor platform, with multi-cores, so anything can happen. If the file system is delayed for any reason, like a signal coming from a different core (EINTR has high priority), then fsync() will be interrupted. EINTR is allowed on NonStop for fsync(). So it would be really great if the patch included a modification to config.mak.uname to include that. This would be a timing-only issue on most other systems, probably something that would hit NFS. The patch for the config is: diff --git a/config.mak.uname b/config.mak.uname index cb443b4e02..ac3e3ca2c5 100644 --- a/config.mak.uname +++ b/config.mak.uname @@ -566,6 +566,7 @@ ifeq ($(uname_S),NONSTOP_KERNEL) NO_REGEX = NeedsStartEnd NO_PTHREADS = UnfortunatelyYes FREAD_READS_DIRECTORIES = UnfortunatelyYes + FSYNC_NEEDS_RESTART = YesPlease # Not detected (nor checked for) by './configure'.