It would be unfair to Peter to keep guessing solutions for this problem and letting him try them out. Does anyone listening know what I've got wrong here?
- Queries
- All Stories
- Search
- Advanced Search
- Transactions
- Transaction Logs
Advanced Search
Jul 14 2019
Jul 13 2019
Add an assertion. Use vm_paddr_t variable to manage bounds checking at function start.
g_io_request requires that b_data be NULL before BIO_DELETE. Make it so.
Jul 12 2019
Jul 11 2019
Don't try to trim exactly the swap device we just allocated from; just look for one that needs trimming.
Tweak the parameters to make the max trim size bigger, and make the trim zone smaller.
Jul 10 2019
If we can allocation nothing from the next leaf, be sure to return immediately.
In the case that we have to back-up 'scan' because we've found that there's no next leaf with free blocks, we also have to back-up 'blk'.
Do I understand correctly that the "panic: freeing free block" condition is happening only with the patch from D20863 in place? Or does it happen with an unmodified kernel?
Jul 9 2019
Correct the last log field.
Add logging. Don't really try to trim anything.
Jul 8 2019
The obvious questions are:
Does this happen without the patch in place?
Does this happen before r349777?
Jul 7 2019
In swap_pager_reserve, release the write lock when not modifying the object.
In swap_pager_reserve, do all the allocation before acquiring the object lock. If all the allocation can't be done, leave the object alone.
Change a misleading variable name. Drop a contentious comment.
Fix some obvious deadlocks.
Jul 6 2019
Something less obviously blocking, though I'm sure some flags are set wrong and the wait for an available write resource (nsw_wcount_async) is unacceptible. There must a queue somewhere I could stick that task in, waiting for writing to be okay again.
The motivation for this change is that I was working on another change that would do something to every function that simplified entries, and when I got to the wiring/unwiring functions, I found that it was hard to do and that I'd have to do it twice. So I concocted this patch so that I'd only have to do it once. I'm sorry that it seems I just mess with your code for no real purpose other than to annoy you.
Change '.' to '?' in a comment.
Jul 5 2019
Add a locked-assertion.
Apply reviewer suggestions.
Add braces around one-line do-while body.
Fix typo.
Apply reviewer suggestion, unhappily.
Jul 4 2019
Address reviewer comments.
Mentors, what do you want me to do here?
Resolve conflicts with parts already checked in. Drop some goto-elimination in vm_map_wire_locked.
No semicolon.
Resolve merge conflicts. Don't confuse true with false.
Add/alter comments and slightly restructure a computation in response to reviewer comments.
Include other files.
This needs a final round of testing before calling for more reviewers.
Apply reviewer suggestions.
Jul 3 2019
Fix comment typo.
Apply reviewer suggestions.
After swp_pager_force_pagein, dont' rely on the local swap block value 'sb'. It may have been freed, so get a new one.
Jul 2 2019
Combine the two last_timestamp updates into one.
Add necesssary updates to 'last_timestamp' in vm_map_wire_locked().
Correct handling of initial failures in map_wire_locked, map_unlock.
Jul 1 2019
Change assertion from '<' to '<='.
Add more pip_wakeups.
vm_object_pip_wakeup() is now called.
Add vm_pager_page_unswapped() calls.
Jun 30 2019
I'm guessing, with low confidence, that reducing the max block count to nsw_cluster_max would help.