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

Re: [PATCH 1/4] shallow.c: make paint_alloc slightly more robust

From
Jeff King <peff@peff.net>
Date
Dec 3, 2016, 05:14 UTC
Message-ID
<20161203051454.vp772xtto5ddxe7g@sigill.intra.peff.net>
In-Reply-To
<1480710664-26290-1-git-send-email-rv@rasmusvillemoes.dk>
On Fri, Dec 02, 2016 at 09:31:01PM +0100, Rasmus Villemoes wrote:
Show 5 quoted lines
> I have no idea if this is a real issue, but it's not obvious to me that
> paint_alloc cannot be called with info->nr_bits greater than about
> 4M (\approx 8*COMMIT_SLAB_SIZE). In that case the new slab would be too
> small. So just round up the allocation to the maximum of
> COMMIT_SLAB_SIZE and size.

I had trouble understanding what the problem is from this description, but I think i figured it out from the code.

Let me try to restate it to make sure I understand.

The paint_alloc() may be asked to allocate a certain number of bits, which it does across a series of independently allocated slabs. Each slab holds a fixed size, but we only allocate a single slab. If the number we need to allocate is larger than fits in a single slab, then at the end we'll have under-allocated.

Your solution is to make the slab we allocate bigger. But that seems odd to me. Usually when we are using COMMIT_SLAB_SIZE, we are allocating a series of slabs that make up a virtual array, and we know that each slab has the same size. So if you need to find the k-th item, and each slab has length n, then you'd look at slab (k / n), and then at item (k % n) within that slab.

In other words, I think the solution isn't to make the one slab bigger, but to allocate slabs until we have enough of them to meet the request.

But I don't really know how this code is used, or why it is using COMMIT_SLAB_SIZE in the first place. That's generally supposed to be an internal detail of the commit-slab.h infrastructure. Why is it being used directly, instead of just using the functions that commit-slab defines?

-Peff
Previous: Duy NguyenNext: Duy Nguyen
Message 9 of 20 in “shallow.c: make paint_alloc slightly more robust”
  1. 1/4 shallow.c: make paint_alloc slightly more robustRasmus Villemoes, Dec 2, 2016
  2. 2/4 shallow.c: avoid theoretical pointer wrap-aroundRasmus Villemoes, Dec 2, 2016
  3. Jeff KingDec 3, 2016
  4. 3/4 shallow.c: bit manipulation tweaksRasmus Villemoes, Dec 2, 2016
  5. Jeff KingDec 3, 2016
  6. 4/4 shallow.c: remove useless testRasmus Villemoes, Dec 2, 2016
  7. Jeff KingDec 3, 2016
  8. Duy NguyenDec 5, 2016
  9. Jeff KingDec 3, 2016
  10. Duy NguyenDec 5, 2016
  11. 0/6 shallow.c improvementsNguyễn Thái Ngọc Duy, Dec 6, 2016
  12. 1/6 shallow.c: rename fields in paint_info to better express their purposesNguyễn Thái Ngọc Duy, Dec 6, 2016
  13. 5/6 shallow.c: bit manipulation tweaksNguyễn Thái Ngọc Duy, Dec 6, 2016
  14. 4/6 shallow.c: avoid theoretical pointer wrap-aroundNguyễn Thái Ngọc Duy, Dec 6, 2016
  15. 6/6 shallow.c: remove useless codeNguyễn Thái Ngọc Duy, Dec 6, 2016
  16. 3/6 shallow.c: make paint_alloc slightly more robustNguyễn Thái Ngọc Duy, Dec 6, 2016
  17. 2/6 shallow.c: stop abusing COMMIT_SLAB_SIZE for paint_info's memory poolsNguyễn Thái Ngọc Duy, Dec 6, 2016
  18. Jeff KingDec 6, 2016
  19. Duy NguyenDec 6, 2016
  20. Junio C HamanoDec 7, 2016

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.