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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.