aboutsummaryrefslogtreecommitdiffstats
path: root/mm/swapfile.c
diff options
context:
space:
mode:
authorNitin Gupta <ngupta@vflare.org>2010-05-17 01:32:43 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-05-18 18:07:52 -0400
commitb3a27d0529c6e5206f1b60f60263e3ecfd0d77cb (patch)
tree50ce5c6ce06ed700160491f2cd0e93d318ccc7fd /mm/swapfile.c
parentb27256439568950f30864ccecaeb6dfb588089d5 (diff)
swap: Add swap slot free callback to block_device_operations
This callback is required when RAM based devices are used as swap disks. One such device is ramzswap which is used as compressed in-memory swap disk. For such devices, we need a callback as soon as a swap slot is no longer used to allow freeing memory allocated for this slot. Without this callback, stale data can quickly accumulate in memory defeating the whole purpose of such devices. 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>
Diffstat (limited to 'mm/swapfile.c')
-rw-r--r--mm/swapfile.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/mm/swapfile.c b/mm/swapfile.c
index ecb069e213d0..f5ccc476aa51 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -574,6 +574,7 @@ static unsigned char swap_entry_free(struct swap_info_struct *p,
574 574
575 /* free if no reference */ 575 /* free if no reference */
576 if (!usage) { 576 if (!usage) {
577 struct gendisk *disk = p->bdev->bd_disk;
577 if (offset < p->lowest_bit) 578 if (offset < p->lowest_bit)
578 p->lowest_bit = offset; 579 p->lowest_bit = offset;
579 if (offset > p->highest_bit) 580 if (offset > p->highest_bit)
@@ -583,6 +584,9 @@ static unsigned char swap_entry_free(struct swap_info_struct *p,
583 swap_list.next = p->type; 584 swap_list.next = p->type;
584 nr_swap_pages++; 585 nr_swap_pages++;
585 p->inuse_pages--; 586 p->inuse_pages--;
587 if ((p->flags & SWP_BLKDEV) &&
588 disk->fops->swap_slot_free_notify)
589 disk->fops->swap_slot_free_notify(p->bdev, offset);
586 } 590 }
587 591
588 return usage; 592 return usage;