diff options
author | Matias Bjørling <m@bjorling.me> | 2016-07-07 09:54:20 +0200 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2016-07-07 16:51:52 +0200 |
commit | 855cdd2c0bff7dcf9337734dc5749d127ca05086 (patch) | |
tree | 6c08bd87536747d8016248272f607316689b147c /drivers/lightnvm/rrpc.h | |
parent | lightnvm: remove _unlocked variant of [get/put]_blk (diff) | |
download | linux-855cdd2c0bff7dcf9337734dc5749d127ca05086.tar.xz linux-855cdd2c0bff7dcf9337734dc5749d127ca05086.zip |
lightnvm: make rrpc_map_page call nvm_get_blk outside locks
The nvm_get_blk() function is called with rlun->lock held. This is ok
when the media manager implementation doesn't go out of its atomic
context. However, if a media manager persists its metadata, and
guarantees that the block is given to the target, this is no longer
a viable approach. Therefore, clean up the flow of rrpc_map_page,
and make sure that nvm_get_blk() is called without any locks acquired.
Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers/lightnvm/rrpc.h')
-rw-r--r-- | drivers/lightnvm/rrpc.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/lightnvm/rrpc.h b/drivers/lightnvm/rrpc.h index 448e39a9c515..5e87d52cb983 100644 --- a/drivers/lightnvm/rrpc.h +++ b/drivers/lightnvm/rrpc.h @@ -76,6 +76,7 @@ struct rrpc_lun { struct rrpc_block *blocks; /* Reference to block allocation */ struct list_head prio_list; /* Blocks that may be GC'ed */ + struct list_head wblk_list; /* Queued blocks to be written to */ struct work_struct ws_gc; |