swapfile.c (7de7fb6b3422e6d1dac00666a992834085e745dc) swapfile.c (f2090d2df51d7cdb2f952dcfdcd8baaac0aec444)
1/*
2 * linux/mm/swapfile.c
3 *
4 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds
5 * Swap reorganised 29.12.95, Stephen Tweedie
6 */
7
8#include <linux/mm.h>

--- 1879 unchanged lines hidden (view full) ---

1888
1889 return p;
1890}
1891
1892SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
1893{
1894 struct swap_info_struct *p;
1895 char *name;
1/*
2 * linux/mm/swapfile.c
3 *
4 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds
5 * Swap reorganised 29.12.95, Stephen Tweedie
6 */
7
8#include <linux/mm.h>

--- 1879 unchanged lines hidden (view full) ---

1888
1889 return p;
1890}
1891
1892SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
1893{
1894 struct swap_info_struct *p;
1895 char *name;
1896 struct block_device *bdev = NULL;
1897 struct file *swap_file = NULL;
1898 struct address_space *mapping;
1899 int i, prev;
1900 int error;
1901 union swap_header *swap_header;
1902 unsigned int nr_good_pages;
1903 int nr_extents = 0;
1904 sector_t span;

--- 34 unchanged lines hidden (view full) ---

1939 continue;
1940 if (mapping == q->swap_file->f_mapping) {
1941 error = -EBUSY;
1942 goto bad_swap;
1943 }
1944 }
1945
1946 if (S_ISBLK(inode->i_mode)) {
1896 struct file *swap_file = NULL;
1897 struct address_space *mapping;
1898 int i, prev;
1899 int error;
1900 union swap_header *swap_header;
1901 unsigned int nr_good_pages;
1902 int nr_extents = 0;
1903 sector_t span;

--- 34 unchanged lines hidden (view full) ---

1938 continue;
1939 if (mapping == q->swap_file->f_mapping) {
1940 error = -EBUSY;
1941 goto bad_swap;
1942 }
1943 }
1944
1945 if (S_ISBLK(inode->i_mode)) {
1947 bdev = bdgrab(I_BDEV(inode));
1948 error = blkdev_get(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL,
1946 p->bdev = bdgrab(I_BDEV(inode));
1947 error = blkdev_get(p->bdev,
1948 FMODE_READ | FMODE_WRITE | FMODE_EXCL,
1949 sys_swapon);
1950 if (error < 0) {
1949 sys_swapon);
1950 if (error < 0) {
1951 bdev = NULL;
1951 p->bdev = NULL;
1952 error = -EINVAL;
1953 goto bad_swap;
1954 }
1952 error = -EINVAL;
1953 goto bad_swap;
1954 }
1955 p->old_block_size = block_size(bdev);
1956 error = set_blocksize(bdev, PAGE_SIZE);
1955 p->old_block_size = block_size(p->bdev);
1956 error = set_blocksize(p->bdev, PAGE_SIZE);
1957 if (error < 0)
1958 goto bad_swap;
1957 if (error < 0)
1958 goto bad_swap;
1959 p->bdev = bdev;
1960 p->flags |= SWP_BLKDEV;
1961 } else if (S_ISREG(inode->i_mode)) {
1962 p->bdev = inode->i_sb->s_bdev;
1963 mutex_lock(&inode->i_mutex);
1964 if (IS_SWAPFILE(inode)) {
1965 error = -EBUSY;
1966 goto bad_swap;
1967 }

--- 167 unchanged lines hidden (view full) ---

2135 spin_unlock(&swap_lock);
2136 mutex_unlock(&swapon_mutex);
2137 atomic_inc(&proc_poll_event);
2138 wake_up_interruptible(&proc_poll_wait);
2139
2140 error = 0;
2141 goto out;
2142bad_swap:
1959 p->flags |= SWP_BLKDEV;
1960 } else if (S_ISREG(inode->i_mode)) {
1961 p->bdev = inode->i_sb->s_bdev;
1962 mutex_lock(&inode->i_mutex);
1963 if (IS_SWAPFILE(inode)) {
1964 error = -EBUSY;
1965 goto bad_swap;
1966 }

--- 167 unchanged lines hidden (view full) ---

2134 spin_unlock(&swap_lock);
2135 mutex_unlock(&swapon_mutex);
2136 atomic_inc(&proc_poll_event);
2137 wake_up_interruptible(&proc_poll_wait);
2138
2139 error = 0;
2140 goto out;
2141bad_swap:
2143 if (bdev) {
2144 set_blocksize(bdev, p->old_block_size);
2145 blkdev_put(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
2142 if (S_ISBLK(inode->i_mode) && p->bdev) {
2143 set_blocksize(p->bdev, p->old_block_size);
2144 blkdev_put(p->bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
2146 }
2147 destroy_swap_extents(p);
2148 swap_cgroup_swapoff(p->type);
2149bad_swap_2:
2150 spin_lock(&swap_lock);
2151 p->swap_file = NULL;
2152 p->flags = 0;
2153 spin_unlock(&swap_lock);

--- 415 unchanged lines hidden ---
2145 }
2146 destroy_swap_extents(p);
2147 swap_cgroup_swapoff(p->type);
2148bad_swap_2:
2149 spin_lock(&swap_lock);
2150 p->swap_file = NULL;
2151 p->flags = 0;
2152 spin_unlock(&swap_lock);

--- 415 unchanged lines hidden ---