From: Bart Trojanowski <bart@jukie.net>
To: git@vger.kernel.org
Subject: [PATCH] Don't call fstat() on stdin in index-pack.
Date: Thu, 18 Jan 2007 21:44:36 -0500 [thread overview]
Message-ID: <20070119024436.GQ8624@jukie.net> (raw)
In-Reply-To: <20070118212615.GO8624@jukie.net>
* Bart Trojanowski <bart@jukie.net> [070118 16:26]:
> $ git push origin
> updating 'refs/heads/my-ocf+fsm_v2.6.18'
> from 0000000000000000000000000000000000000000
> to 380541e91358d7a5e2fe37c81c520c92a3094951
> Generating pack...
> Done counting 727 objects.
> Result has 708 objects.
> Deltifying 708 objects.
> 100% (708/708) done
> Writing 708 objects.
> 100% (708/708) done
> Total 708 (delta 535), reused 275 (delta 218)
> fatal: cannot fstat packfile: Value too large for defined data type
I had a look at the code in index-pack.c and noticed that this error is
printed input_fd is set to 0 in open_pack_file().
| if (fstat(input_fd, &st))
| die("cannot fstat packfile: %s", strerror(errno));
| if (S_ISREG(st.st_mode) && st.st_size != consumed_bytes)
| die("pack has junk at the end");
It seems strange to me to call fstat on fd 0 to get st_size info.
Granted, st_mode should tell us that it's not a regular file, but
already know it's not a regular file.
So I removed it. And now it works (I verified that the git-diff output
on both sides matches).
-Bart
----
>From fcd359655e12a4b6424f989b7c01cbbb8a551287 Mon Sep 17 00:00:00 2001
From: Bart Trojanowski <bart@jukie.net>
Date: Fri, 19 Jan 2007 02:39:27 +0000
Subject: [PATCH] Don't call fstat() on stdin in index-pack.
This fixes a issues with a large git-push with a
32bit git on a 64bit kernel.
Signed-off-by: Bart Trojanowski <bart@jukie.net>
---
index-pack.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/index-pack.c b/index-pack.c
index 72e0962..e7870a9 100644
--- a/index-pack.c
+++ b/index-pack.c
@@ -455,10 +455,12 @@ static void parse_pack_objects(unsigned char *sha1)
use(20);
/* If input_fd is a file, we should have reached its end now. */
- if (fstat(input_fd, &st))
- die("cannot fstat packfile: %s", strerror(errno));
- if (S_ISREG(st.st_mode) && st.st_size != consumed_bytes)
- die("pack has junk at the end");
+ if (input_fd) {
+ if (fstat(input_fd, &st))
+ die("cannot fstat packfile: %s", strerror(errno));
+ if (S_ISREG(st.st_mode) && st.st_size != consumed_bytes)
+ die("pack has junk at the end");
+ }
if (!nr_deltas)
return;
--
1.5.0.rc1.gdf1b-dirty
next prev parent reply other threads:[~2007-01-19 2:44 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-18 21:26 git push problem with v1.5.0-rc1 Bart Trojanowski
2007-01-19 2:44 ` Bart Trojanowski [this message]
2007-01-19 3:02 ` [PATCH] Don't call fstat() on stdin in index-pack Simon 'corecode' Schubert
2007-01-20 15:35 ` Sergey Vlasov
2007-01-20 18:00 ` Simon 'corecode' Schubert
2007-01-19 3:16 ` git push problem with v1.5.0-rc1 Bart Trojanowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070119024436.GQ8624@jukie.net \
--to=bart@jukie.net \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).