majianpeng 66af62ce75 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>
2013-01-15 20:18:29 +09:00
..
2012-12-20 14:00:01 -05:00
2012-12-20 14:00:01 -05:00
2012-12-20 14:00:01 -05:00
2012-12-20 11:27:17 -06:00
2012-11-16 11:20:42 -06:00
2012-12-20 17:40:20 -08:00
2012-12-20 14:00:01 -05:00
2012-12-20 18:40:00 -05:00
2012-12-20 18:40:52 -05:00
2012-12-20 18:40:53 -05:00
2012-12-20 18:40:53 -05:00
2012-12-20 18:40:54 -05:00
2012-12-20 18:40:54 -05:00
2012-12-20 18:40:55 -05:00
2012-12-20 14:00:01 -05:00
2012-12-20 14:00:01 -05:00
2012-12-20 14:00:01 -05:00
2012-12-20 14:00:01 -05:00
2012-12-17 17:15:26 -08:00
2012-12-20 14:00:01 -05:00
2012-10-22 08:50:37 +03:00
2012-10-29 09:00:57 -07:00
2012-10-09 15:52:31 +09:00
2012-11-28 21:49:02 -05:00
2012-12-20 18:46:29 -05:00
2012-10-09 18:35:22 -04:00
2012-12-11 13:43:42 +09:00
2012-09-26 21:08:52 -04:00
2012-12-17 17:15:27 -08:00
2012-12-20 18:50:01 -05:00
2012-10-09 23:33:39 -04:00