vnode_pager_generic_getpages() called asynchronously must run iodone
once over every requested page; the wrappers call it only on an error.
On the no-I/O success paths (a hole, no VOP_BMAP(), a sub-page block)
it returned VM_PAGER_OK without running iodone, and a run ending on an
already-valid page ran it one page short, so an async caller's I/O
count never reached zero and a page stayed xbusy. Run iodone on each
no-I/O success path, and keep the whole run when the last page is
valid.
Details
Details
found by CBMC
Diff Detail
Diff Detail
- Lint
Lint Skipped - Unit
Tests Skipped
Event Timeline
| vm/vnode_pager.c | ||
|---|---|---|
| 926 | I do not understand this change. Isn't it a reverse of what you state as the reason for the patch? | |
Comment Actions
You’ve right!
I’ve totally inverted the logic here.
I need to study a lot more this complex part of code.
Comment Actions
I only asked about one chunk from three. I still think that the other two chunks are good.