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

Re: [PATCH v2 9/9] pack-objects: improve partial packfile reuse

From
Philip Oakley <philipoakley@iee.email>
Date
Oct 20, 2019, 11:26 UTC
Message-ID
<ac89d8ed-5a57-6297-5fc2-cf562c8da812@iee.email>
In-Reply-To
<20191019232322.GB32408@sigill.intra.peff.net>
On 20/10/2019 00:23, Jeff King wrote:
Show 32 quoted lines
> On Sat, Oct 19, 2019 at 09:20:11PM +0200, Christian Couder wrote:
>
>>>> +static void write_reused_pack_one(size_t pos, struct hashfile *out,
>>>> +                               struct pack_window **w_curs)
>>>> +{
>>>> +     off_t offset, next, cur;
>>>> +     enum object_type type;
>>>> +     unsigned long size;
>>> Is this a mem_sized size or a counter for less that 4GiB items?
>> What I can see is that `&size` is passed as the last argument to
>> unpack_object_header() below. And unpack_object_header() is defined in
>> packfile.h like this:
>>
>> int unpack_object_header(struct packed_git *, struct pack_window **,
>> off_t *, unsigned long *);
>>
>> since at least 336226c259 (packfile.h: drop extern from function
>> declarations, 2019-04-05)
>>
>> So fixing this, if it needs to be fixed, should probably be part of a
>> separate topic fixing unpack_object_header().
> Yeah, this one definitely should be moved to whatever we used to
> represent object sizes in the future (size_t, or I guess off_t if we
> really want to handle huge objects on 32-bit systems too). But
> definitely it shouldn't happen in this series, and I don't think anybody
> interested in the other topic (converting the integer type for object
> sizes) needs to keep tabs on it. When they convert
> unpack_object_header(), the compiler will complain because of passing
> it as a pointer (the more insidious ones will be where we return an
> unsigned long to represent an object type, and somebody will have to
> look into every caller).
>

Thanks, I'll add that one to my list of size values that I should check when rebasing my current series.

If I understand correctly gcc is no longer detecting those size conversions, but clang has -Wshorten-64-to-32 but I've still to check if it catches some of these conversion issues (esp when int (32) is extended to 64 bit size_t, rather than being 64 bit in the first place)

Philip
Previous: Jeff KingNext: Jonathan Tan
Message 20 of 22 in “Rewrite packfile reuse code”
  1. 0/9 Rewrite packfile reuse codeChristian Couder, Oct 19, 2019
  2. 1/9 builtin/pack-objects: report reused packfile objectsChristian Couder, Oct 19, 2019
  3. 2/9 packfile: expose get_delta_base()Christian Couder, Oct 19, 2019
  4. 3/9 ewah/bitmap: introduce bitmap_word_alloc()Christian Couder, Oct 19, 2019
  5. Jonathan TanOct 22, 2019
  6. Christian CouderOct 26, 2019
  7. 4/9 pack-bitmap: don't rely on bitmap_git->reuse_objectsChristian Couder, Oct 19, 2019
  8. 5/9 pack-bitmap: introduce bitmap_walk_contains()Christian Couder, Oct 19, 2019
  9. Philip OakleyOct 19, 2019
  10. Christian CouderOct 19, 2019
  11. Philip OakleyOct 19, 2019
  12. Jeff KingOct 19, 2019
  13. 6/9 csum-file: introduce hashfile_total()Christian Couder, Oct 19, 2019
  14. 7/9 pack-objects: introduce pack.allowPackReuseChristian Couder, Oct 19, 2019
  15. 8/9 builtin/pack-objects: introduce obj_is_packed()Christian Couder, Oct 19, 2019
  16. 9/9 pack-objects: improve partial packfile reuseChristian Couder, Oct 19, 2019
  17. Philip OakleyOct 19, 2019
  18. Christian CouderOct 19, 2019
  19. Jeff KingOct 19, 2019
  20. Philip OakleyOct 20, 2019
  21. Jonathan TanOct 22, 2019
  22. Christian CouderOct 26, 2019

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.