diff options
author | Nitin Gupta <ngupta@vflare.org> | 2010-05-17 01:32:44 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-05-18 18:07:52 -0400 |
commit | 107c161b7ddeeb7da43509cc6b29211885ccd9af (patch) | |
tree | 1857a45cb9fad39eb17c1e26766084ee3d034533 | |
parent | b3a27d0529c6e5206f1b60f60263e3ecfd0d77cb (diff) |
Staging: ramzswap: Handler for swap slot free callback
Install handler for swap_slot_free_notify callback which is called
when a swap slot is no longer used. This handler immediately frees
memory allocated corresponding to the given swap slot.
Signed-off-by: Nitin Gupta <ngupta@vflare.org>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Acked-by: Nigel Cunningham <nigel@tuxonice.net>
Acked-by: Pekka Enberg <penberg@cs.helsinki.fi>
Reviewed-by: Minchan Kim <minchan.kim@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/ramzswap/TODO | 5 | ||||
-rw-r--r-- | drivers/staging/ramzswap/ramzswap_drv.c | 22 |
2 files changed, 13 insertions, 14 deletions
diff --git a/drivers/staging/ramzswap/TODO b/drivers/staging/ramzswap/TODO deleted file mode 100644 index 8d64e28fac0e..000000000000 --- a/drivers/staging/ramzswap/TODO +++ /dev/null | |||
@@ -1,5 +0,0 @@ | |||
1 | TODO: | ||
2 | - Add support for swap notifiers | ||
3 | |||
4 | Please send patches to Greg Kroah-Hartman <greg@kroah.com> and | ||
5 | Nitin Gupta <ngupta@vflare.org> | ||
diff --git a/drivers/staging/ramzswap/ramzswap_drv.c b/drivers/staging/ramzswap/ramzswap_drv.c index 167f8d17a808..d14bf9129e36 100644 --- a/drivers/staging/ramzswap/ramzswap_drv.c +++ b/drivers/staging/ramzswap/ramzswap_drv.c | |||
@@ -335,14 +335,6 @@ static int ramzswap_write(struct ramzswap *rzs, struct bio *bio) | |||
335 | 335 | ||
336 | src = rzs->compress_buffer; | 336 | src = rzs->compress_buffer; |
337 | 337 | ||
338 | /* | ||
339 | * System swaps to same sector again when the stored page | ||
340 | * is no longer referenced by any process. So, its now safe | ||
341 | * to free the memory that was allocated for this page. | ||
342 | */ | ||
343 | if (rzs->table[index].page || rzs_test_flag(rzs, index, RZS_ZERO)) | ||
344 | ramzswap_free_page(rzs, index); | ||
345 | |||
346 | mutex_lock(&rzs->lock); | 338 | mutex_lock(&rzs->lock); |
347 | 339 | ||
348 | user_mem = kmap_atomic(page, KM_USER0); | 340 | user_mem = kmap_atomic(page, KM_USER0); |
@@ -690,9 +682,21 @@ out: | |||
690 | return ret; | 682 | return ret; |
691 | } | 683 | } |
692 | 684 | ||
685 | void ramzswap_slot_free_notify(struct block_device *bdev, unsigned long index) | ||
686 | { | ||
687 | struct ramzswap *rzs; | ||
688 | |||
689 | rzs = bdev->bd_disk->private_data; | ||
690 | ramzswap_free_page(rzs, index); | ||
691 | rzs_stat64_inc(rzs, &rzs->stats.notify_free); | ||
692 | |||
693 | return; | ||
694 | } | ||
695 | |||
693 | static struct block_device_operations ramzswap_devops = { | 696 | static struct block_device_operations ramzswap_devops = { |
694 | .ioctl = ramzswap_ioctl, | 697 | .ioctl = ramzswap_ioctl, |
695 | .owner = THIS_MODULE, | 698 | .swap_slot_free_notify = ramzswap_slot_free_notify, |
699 | .owner = THIS_MODULE | ||
696 | }; | 700 | }; |
697 | 701 | ||
698 | static int create_device(struct ramzswap *rzs, int device_id) | 702 | static int create_device(struct ramzswap *rzs, int device_id) |