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

Commit bd32e822 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "f2fs: do not use mutex lock in atomic context"

parents 138b3348 a3af28c9
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
#include "trace.h"

static RADIX_TREE(pids, GFP_ATOMIC);
static struct mutex pids_lock;
static spinlock_t pids_lock;
static struct last_io_info last_io;

static inline void __print_last_io(void)
@@ -61,23 +61,29 @@ void f2fs_trace_pid(struct page *page)

	set_page_private(page, (unsigned long)pid);

retry:
	if (radix_tree_preload(GFP_NOFS))
		return;

	mutex_lock(&pids_lock);
	spin_lock(&pids_lock);
	p = radix_tree_lookup(&pids, pid);
	if (p == current)
		goto out;
	if (p)
		radix_tree_delete(&pids, pid);

	f2fs_radix_tree_insert(&pids, pid, current);
	if (radix_tree_insert(&pids, pid, current)) {
		spin_unlock(&pids_lock);
		radix_tree_preload_end();
		cond_resched();
		goto retry;
	}

	trace_printk("%3x:%3x %4x %-16s\n",
			MAJOR(inode->i_sb->s_dev), MINOR(inode->i_sb->s_dev),
			pid, current->comm);
out:
	mutex_unlock(&pids_lock);
	spin_unlock(&pids_lock);
	radix_tree_preload_end();
}

@@ -122,7 +128,7 @@ void f2fs_trace_ios(struct f2fs_io_info *fio, int flush)

void f2fs_build_trace_ios(void)
{
	mutex_init(&pids_lock);
	spin_lock_init(&pids_lock);
}

#define PIDVEC_SIZE	128
@@ -150,7 +156,7 @@ void f2fs_destroy_trace_ios(void)
	pid_t next_pid = 0;
	unsigned int found;

	mutex_lock(&pids_lock);
	spin_lock(&pids_lock);
	while ((found = gang_lookup_pids(pid, next_pid, PIDVEC_SIZE))) {
		unsigned idx;

@@ -158,5 +164,5 @@ void f2fs_destroy_trace_ios(void)
		for (idx = 0; idx < found; idx++)
			radix_tree_delete(&pids, pid[idx]);
	}
	mutex_unlock(&pids_lock);
	spin_unlock(&pids_lock);
}