On Wed, 2020-11-11 at 13:44 +0100, Pavel Machek wrote:
Hi!
Thankfully it's handled by the only caller, btree_write_cache_pages(), as later write_one_eb() call will trigger submit_one_bio(). So there shouldn't be any problem.
This explains there should not be any problem in _the mainline_. AFAICT this talks about this code. Mainline version is:
prev_eb = eb; ret = lock_extent_buffer_for_io(eb, &epd); if (!ret) { free_extent_buffer(eb); continue; } else if (ret < 0) { done = 1; free_extent_buffer(eb); break; }
But 4.19 has:
ret = lock_extent_buffer_for_io(eb, fs_info, &epd); if (!ret) { free_extent_buffer(eb); continue; }
That was changed in mainline two releases after this commit, though.
IOW missing the code mentioned in the changelog. Is 0607eb1d452d4 prerequisite for this patch?
I think it's a separate fix, but probably worth picking too.
Ben.
Best regards, Pavel
+/*
- Lock eb pages and flush the bio if we can't the locks
- Return 0 if nothing went wrong
- Return >0 is same as 0, except bio is not submitted
- Return <0 if something went wrong, no page is locked
- */