Merge tag 'pull-set_blocksize' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux-2.6-block.git] / mm / swapfile.c
index f6ca215fb92f3b3f3bc284925c02578252af8fb8..b3e5e384e330b44f1dd8cad237813ddecf3bf8f6 100644 (file)
@@ -2469,7 +2469,6 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
        struct inode *inode;
        struct filename *pathname;
        int err, found = 0;
-       unsigned int old_block_size;
 
        if (!capable(CAP_SYS_ADMIN))
                return -EPERM;
@@ -2582,7 +2581,6 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
        }
 
        swap_file = p->swap_file;
-       old_block_size = p->old_block_size;
        p->swap_file = NULL;
        p->max = 0;
        swap_map = p->swap_map;
@@ -2605,11 +2603,6 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
        exit_swap_address_space(p->type);
 
        inode = mapping->host;
-       if (p->bdev_file) {
-               set_blocksize(p->bdev, old_block_size);
-               fput(p->bdev_file);
-               p->bdev_file = NULL;
-       }
 
        inode_lock(inode);
        inode->i_flags &= ~S_SWAPFILE;
@@ -2835,21 +2828,8 @@ static struct swap_info_struct *alloc_swap_info(void)
 
 static int claim_swapfile(struct swap_info_struct *p, struct inode *inode)
 {
-       int error;
-
        if (S_ISBLK(inode->i_mode)) {
-               p->bdev_file = bdev_file_open_by_dev(inode->i_rdev,
-                               BLK_OPEN_READ | BLK_OPEN_WRITE, p, NULL);
-               if (IS_ERR(p->bdev_file)) {
-                       error = PTR_ERR(p->bdev_file);
-                       p->bdev_file = NULL;
-                       return error;
-               }
-               p->bdev = file_bdev(p->bdev_file);
-               p->old_block_size = block_size(p->bdev);
-               error = set_blocksize(p->bdev, PAGE_SIZE);
-               if (error < 0)
-                       return error;
+               p->bdev = I_BDEV(inode);
                /*
                 * Zoned block devices contain zones that have a sequential
                 * write only restriction.  Hence zoned block devices are not
@@ -3090,7 +3070,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
                name = NULL;
                goto bad_swap;
        }
-       swap_file = file_open_name(name, O_RDWR|O_LARGEFILE, 0);
+       swap_file = file_open_name(name, O_RDWR | O_LARGEFILE | O_EXCL, 0);
        if (IS_ERR(swap_file)) {
                error = PTR_ERR(swap_file);
                swap_file = NULL;
@@ -3289,11 +3269,6 @@ bad_swap:
        p->percpu_cluster = NULL;
        free_percpu(p->cluster_next_cpu);
        p->cluster_next_cpu = NULL;
-       if (p->bdev_file) {
-               set_blocksize(p->bdev, p->old_block_size);
-               fput(p->bdev_file);
-               p->bdev_file = NULL;
-       }
        inode = NULL;
        destroy_swap_extents(p);
        swap_cgroup_swapoff(p->type);