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

Commit 00c2e63c authored by Li Zefan's avatar Li Zefan Committed by Linus Torvalds
Browse files

freezer_cg: use thaw_process() in unfreeze_cgroup()



Don't duplicate the implementation of thaw_process().

[akpm@linux-foundation.org: make __thaw_process() static]
Signed-off-by: default avatarLi Zefan <lizf@cn.fujitsu.com>
Cc: Cedric Le Goater <clg@fr.ibm.com>
Acked-by: default avatarMatt Helsley <matthltc@us.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 80a6a2cf
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -44,11 +44,6 @@ static inline bool should_send_signal(struct task_struct *p)
	return !(p->flags & PF_FREEZER_NOSIG);
}

/*
 * Wake up a frozen process
 */
extern int __thaw_process(struct task_struct *p);

/* Takes and releases task alloc lock using task_lock() */
extern int thaw_process(struct task_struct *p);

+4 −11
Original line number Diff line number Diff line
@@ -275,25 +275,18 @@ static int try_to_freeze_cgroup(struct cgroup *cgroup, struct freezer *freezer)
	return num_cant_freeze_now ? -EBUSY : 0;
}

static int unfreeze_cgroup(struct cgroup *cgroup, struct freezer *freezer)
static void unfreeze_cgroup(struct cgroup *cgroup, struct freezer *freezer)
{
	struct cgroup_iter it;
	struct task_struct *task;

	cgroup_iter_start(cgroup, &it);
	while ((task = cgroup_iter_next(cgroup, &it))) {
		int do_wake;

		task_lock(task);
		do_wake = __thaw_process(task);
		task_unlock(task);
		if (do_wake)
			wake_up_process(task);
		thaw_process(task);
	}
	cgroup_iter_end(cgroup, &it);
	freezer->state = CGROUP_THAWED;

	return 0;
	freezer->state = CGROUP_THAWED;
}

static int freezer_change_state(struct cgroup *cgroup,
@@ -320,7 +313,7 @@ static int freezer_change_state(struct cgroup *cgroup,
		}
		/* state == FREEZING and goal_state == THAWED, so unfreeze */
	case CGROUP_FROZEN:
		retval = unfreeze_cgroup(cgroup, freezer);
		unfreeze_cgroup(cgroup, freezer);
		break;
	default:
		break;
+10 −10
Original line number Diff line number Diff line
@@ -121,16 +121,7 @@ void cancel_freezing(struct task_struct *p)
	}
}

/*
 * Wake up a frozen process
 *
 * task_lock() is needed to prevent the race with refrigerator() which may
 * occur if the freezing of tasks fails.  Namely, without the lock, if the
 * freezing of tasks failed, thaw_tasks() might have run before a task in
 * refrigerator() could call frozen_process(), in which case the task would be
 * frozen and no one would thaw it.
 */
int __thaw_process(struct task_struct *p)
static int __thaw_process(struct task_struct *p)
{
	if (frozen(p)) {
		p->flags &= ~PF_FROZEN;
@@ -140,6 +131,15 @@ int __thaw_process(struct task_struct *p)
	return 0;
}

/*
 * Wake up a frozen process
 *
 * task_lock() is needed to prevent the race with refrigerator() which may
 * occur if the freezing of tasks fails.  Namely, without the lock, if the
 * freezing of tasks failed, thaw_tasks() might have run before a task in
 * refrigerator() could call frozen_process(), in which case the task would be
 * frozen and no one would thaw it.
 */
int thaw_process(struct task_struct *p)
{
	task_lock(p);