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