From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Shawn O. Pearce" Subject: Re: pread() over NFS (again) [1.5.5.4] Date: Thu, 26 Jun 2008 16:46:06 -0400 Message-ID: <20080626204606.GX11793@spearce.org> References: <6F25C1B4-85DE-4559-9471-BCD453FEB174@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Cc: git@vger.kernel.org To: Christian Holtje X-From: git-owner@vger.kernel.org Thu Jun 26 22:47:43 2008 Return-path: Envelope-to: gcvg-git-2@gmane.org Received: from vger.kernel.org ([209.132.176.167]) by lo.gmane.org with esmtp (Exim 4.50) id 1KByNJ-00029g-Lk for gcvg-git-2@gmane.org; Thu, 26 Jun 2008 22:47:26 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757367AbYFZUqP (ORCPT ); Thu, 26 Jun 2008 16:46:15 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756794AbYFZUqN (ORCPT ); Thu, 26 Jun 2008 16:46:13 -0400 Received: from corvette.plexpod.net ([64.38.20.226]:59810 "EHLO corvette.plexpod.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756179AbYFZUqK (ORCPT ); Thu, 26 Jun 2008 16:46:10 -0400 Received: from cpe-74-70-48-173.nycap.res.rr.com ([74.70.48.173] helo=asimov.home.spearce.org) by corvette.plexpod.net with esmtpa (Exim 4.69) (envelope-from ) id 1KByLv-0002Ht-Jd; Thu, 26 Jun 2008 16:45:59 -0400 Received: by asimov.home.spearce.org (Postfix, from userid 1000) id 088D720FBAE; Thu, 26 Jun 2008 16:46:07 -0400 (EDT) Content-Disposition: inline In-Reply-To: <6F25C1B4-85DE-4559-9471-BCD453FEB174@gmail.com> User-Agent: Mutt/1.5.11 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - corvette.plexpod.net X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - spearce.org Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: Christian Holtje wrote: > I have read all the threads on git having trouble with pread() and I > didn't see anything to help. ... > Receiving objects: 100% (253/253), 5.27 MiB | 9136 KiB/s, done. > fatal: cannot pread pack file: No such file or directory > fatal: index-pack failed > > The end of the strace looks like so: > pread(3, "", 205, 1373) = 0 > write(2, "fatal: cannot pread pack file: N"..., 57) = 57 Hmmph. So pread for a length of 205 can return 0 on NFS? Is this a transient error? If so, perhaps a patch like this might help: diff --git a/index-pack.c b/index-pack.c index 5ac91ba..737f757 100644 --- a/index-pack.c +++ b/index-pack.c @@ -309,14 +309,19 @@ static void *get_data_from_pack(struct object_entry *obj) unsigned char *src, *data; z_stream stream; int st; + int attempts = 0; src = xmalloc(len); data = src; do { ssize_t n = pread(pack_fd, data + rdy, len - rdy, from + rdy); - if (n <= 0) + if (n <= 0) { + if (n == 0 && ++attempts < 10) + continue; die("cannot pread pack file: %s", strerror(errno)); + } rdy += n; + attempts = 0; } while (rdy < len); data = xmalloc(obj->size); memset(&stream, 0, sizeof(stream)); The file shouldn't be short unless someone truncated it, or there is a bug in index-pack. Neither is very likely, but I don't think we would want to retry pread'ing the same block forever. -- Shawn.