aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNitin Gupta <ngupta@vflare.org>2010-05-17 01:32:44 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-05-18 18:07:52 -0400
commit107c161b7ddeeb7da43509cc6b29211885ccd9af (patch)
tree1857a45cb9fad39eb17c1e26766084ee3d034533
parentb3a27d0529c6e5206f1b60f60263e3ecfd0d77cb (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/TODO5
-rw-r--r--drivers/staging/ramzswap/ramzswap_drv.c22
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 @@
1TODO:
2 - Add support for swap notifiers
3
4Please send patches to Greg Kroah-Hartman <greg@kroah.com> and
5Nitin 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
685void 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
693static struct block_device_operations ramzswap_devops = { 696static 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
698static int create_device(struct ramzswap *rzs, int device_id) 702static int create_device(struct ramzswap *rzs, int device_id)