summaryrefslogtreecommitdiff
path: root/virt
diff options
context:
space:
mode:
authormajianpeng <majianpeng@gmail.com>2013-01-14 20:08:16 +0800
committerJaegeuk Kim <jaegeuk.kim@samsung.com>2013-01-15 20:18:29 +0900
commit66af62ce7588736ae65edfdb1c0df597775c4d21 (patch)
tree40c696804e7d628161889a7505ff164debf83674 /virt
parentfa9150a84ca333f68127097c4fa1eda4b3913a22 (diff)
f2fs: add global mutex_lock to protect f2fs_stat_list
There is an race condition between umounting f2fs and reading f2fs/status, which results in oops. Fox example: Thread A Thread B umount f2fs cat f2fs/status f2fs_destroy_stats() { stat_show() { list_for_each_entry_safe(&f2fs_stat_list) list_del(&si->stat_list); mutex_lock(&si->stat_lock); si->sbi = NULL; mutex_unlock(&si->stat_lock); kfree(sbi->stat_info); } mutex_lock(&si->stat_lock) <- si is gone. ... } Solution with a global lock: f2fs_stat_mutex: Thread A Thread B umount f2fs cat f2fs/status f2fs_destroy_stats() { stat_show() { mutex_lock(&f2fs_stat_mutex); list_del(&si->stat_list); mutex_unlock(&f2fs_stat_mutex); kfree(sbi->stat_info); mutex_lock(&f2fs_stat_mutex); } list_for_each_entry_safe(&f2fs_stat_list) ... mutex_unlock(&f2fs_stat_mutex); } Signed-off-by: Jianpeng Ma <majianpeng@gmail.com> [jaegeuk.kim@samsung.com: fix typos, description, and remove the existing lock] Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Diffstat (limited to 'virt')
0 files changed, 0 insertions, 0 deletions