From mboxrd@z Thu Jan 1 00:00:00 1970 Message-Id: <20060906133954.989956000@chello.nl> References: <20060906131630.793619000@chello.nl>> Date: Wed, 06 Sep 2006 15:16:42 +0200 From: Peter Zijlstra Subject: [PATCH 12/21] mm: block device swap notification Content-Disposition: inline; filename=swapdev.patch Sender: owner-linux-mm@kvack.org Return-Path: To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Daniel Phillips , Rik van Riel , David Miller , Andrew Morton , Peter Zijlstra , "James E.J. Bottomley" , Mike Christie , Pavel Machek List-ID: Some block devices need to do some extra work when used as swap device. Signed-off-by: Peter Zijlstra CC: James E.J. Bottomley CC: Mike Christie CC: Pavel Machek --- include/linux/fs.h | 1 + mm/swapfile.c | 7 +++++++ 2 files changed, 8 insertions(+) Index: linux-2.6/include/linux/fs.h =================================================================== --- linux-2.6.orig/include/linux/fs.h +++ linux-2.6/include/linux/fs.h @@ -1017,6 +1017,7 @@ struct block_device_operations { int (*media_changed) (struct gendisk *); int (*revalidate_disk) (struct gendisk *); int (*getgeo)(struct block_device *, struct hd_geometry *); + int (*swapdev)(struct gendisk *, int enable); struct module *owner; }; Index: linux-2.6/mm/swapfile.c =================================================================== --- linux-2.6.orig/mm/swapfile.c +++ linux-2.6/mm/swapfile.c @@ -1273,6 +1273,8 @@ asmlinkage long sys_swapoff(const char _ inode = mapping->host; if (S_ISBLK(inode->i_mode)) { struct block_device *bdev = I_BDEV(inode); + if (bdev->bd_disk->fops->swapdev) + bdev->bd_disk->fops->swapdev(bdev->bd_disk, 0); set_blocksize(bdev, p->old_block_size); bd_release(bdev); } else { @@ -1481,6 +1483,11 @@ asmlinkage long sys_swapdev(const char __ if (error < 0) goto bad_swap; p->bdev = bdev; + if (bdev->bd_disk->fops->swapdev) { + error = bdev->bd_disk->fops->swapdev(bdev->bd_disk, 1); + if (error < 0) + goto bad_swap; + } } else if (S_ISREG(inode->i_mode)) { p->bdev = inode->i_sb->s_bdev; mutex_lock(&inode->i_mutex); -- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org