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

Commit 930d9152 authored by Christoph Lameter's avatar Christoph Lameter Committed by Linus Torvalds
Browse files

[PATCH] Swap Migration V5: PF_SWAPWRITE to allow writing to swap



Add PF_SWAPWRITE to control a processes permission to write to swap.

- Use PF_SWAPWRITE in may_write_to_queue() instead of checking for kswapd
  and pdflush

- Set PF_SWAPWRITE flag for kswapd and pdflush

Signed-off-by: default avatarChristoph Lameter <clameter@sgi.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 21eac81f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -895,6 +895,7 @@ do { if (atomic_dec_and_test(&(tsk)->usage)) __put_task_struct(tsk); } while(0)
#define PF_SYNCWRITE	0x00200000	/* I am doing a sync write */
#define PF_BORROWED_MM	0x00400000	/* I am a kthread doing use_mm */
#define PF_RANDOMIZE	0x00800000	/* randomize virtual address space */
#define PF_SWAPWRITE	0x01000000	/* Allowed to write to swap */

/*
 * Only the _current_ task can read/write to tsk->flags, but other
+1 −1
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ struct pdflush_work {

static int __pdflush(struct pdflush_work *my_work)
{
	current->flags |= PF_FLUSHER;
	current->flags |= PF_FLUSHER | PF_SWAPWRITE;
	my_work->fn = NULL;
	my_work->who = current;
	INIT_LIST_HEAD(&my_work->list);
+2 −4
Original line number Diff line number Diff line
@@ -268,9 +268,7 @@ static inline int is_page_cache_freeable(struct page *page)

static int may_write_to_queue(struct backing_dev_info *bdi)
{
	if (current_is_kswapd())
		return 1;
	if (current_is_pdflush())	/* This is unlikely, but why not... */
	if (current->flags & PF_SWAPWRITE)
		return 1;
	if (!bdi_write_congested(bdi))
		return 1;
@@ -1299,7 +1297,7 @@ static int kswapd(void *p)
	 * us from recursively trying to free more memory as we're
	 * trying to free the first piece of memory in the first place).
	 */
	tsk->flags |= PF_MEMALLOC|PF_KSWAPD;
	tsk->flags |= PF_MEMALLOC | PF_SWAPWRITE | PF_KSWAPD;

	order = 0;
	for ( ; ; ) {