Re: [f2fs-dev] [RFC PATCH 3/9] f2fs: support regular file buffered writes on large folios

Nanzhe Zhao via Linux-f2fs-devel <[email protected]>
Newsgroups net.sourceforge.lists.linux-f2fs-devel
Message-ID <[email protected]>
> > Both the error path and the normal path will eventually reach the out label path,
> > and out will call f2fs_put_dnode(&dn) if get_dn is true.
> > Or am I missing something?
>
> For above case: both head and tail has partial updated data, then we call
> f2fs_get_dnode_of_data() twice, but call f2fs_put_dnode() once?

I think f2fs_put_dnode() will be called twice in that case.

The out label is still inside the while loop body. For each block returned by
f2fs_find_next_need_read_block(), get_dn is reset to false first. If
f2fs_get_dnode_of_data() succeeds, get_dn is set to true, and the same
iteration will fall through/goto out and call f2fs_put_dnode(&dn).

So for head and tail, the flow should be:

head: get dnode -> read/zero -> out -> put dnode
tail: get dnode -> read/zero -> out -> put dnode

If head and tail are the same block, the first iteration marks it uptodate,
so the next f2fs_find_next_need_read_block() will not return it again.

Hmmm, if the current control flow is so easy to misread, would you like me
to change it a bit to make the per-iteration dnode lifetime more obvious?

Thanks,



_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.