Re: [f2fs-dev] [PATCH v4] f2fs: introduce fragment allocation mode mount option

From: Chao Yu
Date: Sat Sep 11 2021 - 06:42:15 EST

On 2021/9/10 23:24, Daeho Jeong wrote:
On Fri, Sep 10, 2021 at 7:34 AM Daeho Jeong <daeho43@xxxxxxxxx> wrote:

On Thu, Sep 9, 2021 at 4:50 PM Chao Yu <chao@xxxxxxxxxx> wrote:

On 2021/9/8 2:12, Daeho Jeong wrote:
On Fri, Sep 3, 2021 at 11:45 PM Chao Yu <chao@xxxxxxxxxx> wrote:

On 2021/9/4 12:40, Daeho Jeong wrote:
As a per curseg field.

Maybe, we run into the same race condition issue you told before for
Could you clarify this more?


fragment_chunk_size = 384
fragment_hole_size = 384

When creating hole:

- f2fs_allocate_data_block
- __refresh_next_blkoff
chunk locates in [0, 383] of current segment
seg->next_blkoff = 384
sbi->fragment_remained_chunk = 0
then we will reset sbi->fragment_remained_chunk to 384
and move seg->next_blkoff forward to 768 (384 + 384)
- __has_curseg_space() returns false
- allocate_segment() allocates new current segment

So, for such case that hole may cross two segments, hole size may be truncated
to left size of previous segment.

First, sbi->fragment_remained_chunk should be seg->fragment_remained_chunk.

Oh, correct.

I understand what you mean, so you mean we need to take the leftover
"hole" size over to the next segment?
In the example, the leftover hole size will be (384 - (512-384)). Do
you want to take this over to the next segment?

Yes, the left 256 block-sized hole should be created before next chunk
in next opened segment.


Do you have any decent idea to pass the left hole size to the next
segment which will be allocated?


I guess we can record left hole size in seg->fragment_remained_hole.

I understand we need a new fragment_remained_hole variable in segment structure.
But, I mean.. How can we pass over the left hole size from the
previous segment to the next segment?

I mean we don't know which segment will be the next segment, do we?

Yeah, that's why I prefer to let __get_next_segno() return zero in fixed_block
fragment mode, then log header may have chance to allocate hole in contiguous