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

Commit 0f7347c2 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki Committed by Linus Torvalds
Browse files

[PATCH] swsusp: avoid problems if there are too many pages to save



The following patch makes swsusp avoid problems during resume if there are
too many pages to save on suspend.  It adds a constant that allows us to
verify if we are going to save too many pages and implements the check
(this is done as early as we can tell that the check will trigger, which is
in swsusp_alloc()).

Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
Acked-by: default avatarPavel Machek <pavel@suse.cz>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent f65a4d10
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -9,6 +9,9 @@
#define SUSPEND_CONSOLE	(MAX_NR_CONSOLES-1)
#endif

#define MAX_PBES	((PAGE_SIZE - sizeof(struct new_utsname) \
			- 4 - 3*sizeof(unsigned long) - sizeof(int) \
			- sizeof(void *)) / sizeof(swp_entry_t))

struct swsusp_info {
	struct new_utsname	uts;
@@ -18,7 +21,7 @@ struct swsusp_info {
	unsigned long		image_pages;
	unsigned long		pagedir_pages;
	suspend_pagedir_t	* suspend_pagedir;
	swp_entry_t		pagedir[768];
	swp_entry_t		pagedir[MAX_PBES];
} __attribute__((aligned(PAGE_SIZE)));


+4 −0
Original line number Diff line number Diff line
@@ -931,6 +931,10 @@ static int swsusp_alloc(void)
	if (!enough_swap())
		return -ENOSPC;

	if (MAX_PBES < nr_copy_pages / PBES_PER_PAGE +
	    !!(nr_copy_pages % PBES_PER_PAGE))
		return -ENOSPC;

	if (!(pagedir_save = alloc_pagedir(nr_copy_pages))) {
		printk(KERN_ERR "suspend: Allocating pagedir failed.\n");
		return -ENOMEM;