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) |
