Messages in this thread | | | Date | Tue, 29 Oct 2019 13:10:13 +0900 | Subject | Re: [PATCH] squashfs: Migrate from ll_rw_block usage to BIO | From | Philippe Liard <> |
| |
> > I don't see why you still need buffer_heads at all. Basically if > > you replace each of your allocated buffer heads with a simple page > > allocation the code will be much simpler (this version adds more > > than 100 lines of code!) and probaby still a bit faster as you > > don't need the squashfs_bio_request allocation either. > > Thanks Christoph for taking a look. I like the idea of simplifying > this if possible. I think I understand your suggestion in principle > but I'm not seeing a way to apply it here. Would it be possible for > you to be a little more specific? Let me try to explain this below. > > My admittedly limited understanding is that using BIO indirectly > requires buffer_head or an alternative including some > synchronization mechanism at least. > It's true that the bio_{alloc,add_page,submit}() functions don't > require passing a buffer_head. However because bio_submit() is > asynchronous AFAICT the client needs to use a synchronization > mechanism to wait for and notify the completion of the request which > buffer heads provide. This is achieved respectively by > wait_on_buffer() and {set,clear}_buffer_uptodate(). > > Another dependency on buffer heads is the fact that > squashfs_read_data() calls into other squashfs functions operating > on buffer heads outside this file. For example squashfs_decompress() > operates on a buffer_head array. > > Given that bio_submit() is asynchronous I'm also not seeing how the > squashfs_bio_request allocation can be removed? There can be > multiple BIO requests in flight each needing to carry some context > used on completion of the request.
Christoph, do you still think this could be simplified as you suggested?
| |