Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bfe35965 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Jaegeuk Kim
Browse files

f2fs, lockdep: annotate mutex_lock_all()



Majianpeng reported a lockdep splat for f2fs. It turns out mutex_lock_all()
acquires an array of locks (in global/local lock style).

Any such operation is always serialized using cp_mutex, therefore there is no
fs_lock[] lock-order issue; tell lockdep about this using the
mutex_lock_nest_lock() primitive.

Reported-by: default avatarmajianpeng <majianpeng@gmail.com>
Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
parent f356fe0c
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -495,9 +495,17 @@ static inline void clear_ckpt_flags(struct f2fs_checkpoint *cp, unsigned int f)

static inline void mutex_lock_all(struct f2fs_sb_info *sbi)
{
	int i = 0;
	for (; i < NR_GLOBAL_LOCKS; i++)
		mutex_lock(&sbi->fs_lock[i]);
	int i;

	for (i = 0; i < NR_GLOBAL_LOCKS; i++) {
		/*
		 * This is the only time we take multiple fs_lock[]
		 * instances; the order is immaterial since we
		 * always hold cp_mutex, which serializes multiple
		 * such operations.
		 */
		mutex_lock_nest_lock(&sbi->fs_lock[i], &sbi->cp_mutex);
	}
}

static inline void mutex_unlock_all(struct f2fs_sb_info *sbi)