git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: bug: git-repack -a -d produces broken pack on NFS

From
Linus Torvalds <torvalds@osdl.org>
Date
Apr 27, 2006, 22:11 UTC
Message-ID
<Pine.LNX.4.64.0604271500500.3701@g5.osdl.org>
In-Reply-To
<20060427213207.GA6709@steel.home>
On Thu, 27 Apr 2006, Alex Riesen wrote:
>
> NFS server: 2.6.15
> Client: 2.6.17-rc2
> mount options: tigra:/home /net/home nfs rw,nosuid,nodev,noatime,vers=3,rsize=8192,wsize=32768,hard,intr,proto=udp,timeo=7,retrans=3,addr=tigra 0 0
It's repeatable? Can you check if it goes away if your remove "intr"?

That said, the pack-file should all be written with the "sha1write()" interface, which is very careful indeed.

I wonder if the _pack-file_ itself might be ok, and the problem is an index file corruption. For some reason we check the index file first, which is insane. We should check that the pack-file matches its _own_ SHA1 first, and check the index file second.

So the appended patch would be sensible: before we bother to look at the index file at all, we should check the pack-file itself.

If it's just the index file that is corrupt, you may even have a chance to recover the data.

The index file is also written with sha1write(), though, so I really don't see where it would break. Unless you just simply literally have data corruption on the server for some strange reason.

		Linus
---
diff --git a/pack-check.c b/pack-check.c
index 84ed90d..e575879 100644
--- a/pack-check.c
+++ b/pack-check.c
@@ -29,12 +29,12 @@ static int verify_packfile(struct packed
 	pack_base = p->pack_base;
 	SHA1_Update(&ctx, pack_base, pack_size - 20);
 	SHA1_Final(sha1, &ctx);
-	if (memcmp(sha1, index_base + index_size - 40, 20))
-		return error("Packfile %s SHA1 mismatch with idx",
-			     p->pack_name);
 	if (memcmp(sha1, pack_base + pack_size - 20, 20))
 		return error("Packfile %s SHA1 mismatch with itself",
 			     p->pack_name);
+	if (memcmp(sha1, index_base + index_size - 40, 20))
+		return error("Packfile %s SHA1 mismatch with idx",
+			     p->pack_name);
 
 	/* Make sure everything reachable from idx is valid.  Since we
 	 * have verified that nr_objects matches between idx and pack,
Previous: Alex RiesenNext: Junio C Hamano
Message 2 of 9 in “bug: git-repack -a -d produces broken pack on NFS”
  1. Alex RiesenApr 27, 2006
  2. Linus TorvaldsApr 27, 2006
  3. Junio C HamanoApr 27, 2006
  4. Linus TorvaldsApr 27, 2006
  5. Junio C HamanoApr 27, 2006
  6. Linus TorvaldsApr 27, 2006
  7. Alex RiesenApr 28, 2006
  8. Linus TorvaldsApr 28, 2006
  9. Linus TorvaldsApr 27, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.