• Kent Overstreet's avatar
    bcachefs: DIO write path optimization · 182c7bbf
    Kent Overstreet authored
     - With BCH_WRITE_SYNC, we no longer need the completion in struct
       dio_write
     - Pull out bch2_dio_write_copy_iov() into a separate non-inline
       function, it's code that doesn't run in the common case
     - Copy mapping and inode pointers into dio_write, avoiding pointer
       chasing at the start of bch2_dio_write_loop()
     - kthread_use_mm() is not needed in the common case; move it into
       bch2_dio_write_loop_async()
     - factor out various helpers from bch2_dio_write_loop() and rework
       control flow for better icache utilization
    
    Other small optimizations:
    
     - bch2_keylist_free() is only used in one place, at the end of the
       bch2_write() path - drop the reinit
     - in bch2_disk_reservation_put(), check if res->sectors is nonzero
       before touching c->online_reserved, since that will likely be a cache
       miss
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
    
    bcachefs: More DIO write path optimization
    
    Better code prefetching (?)
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
    182c7bbf
keylist.h 1.61 KB