Christian Holtje <docwhat@xxxxxxxxx> 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. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html