swapfile.c (83ef99befc324803a54cf2a5fab5a322df3a99d6) | swapfile.c (7de7fb6b3422e6d1dac00666a992834085e745dc) |
---|---|
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> --- 1902 unchanged lines hidden (view full) --- 1911 if (!capable(CAP_SYS_ADMIN)) 1912 return -EPERM; 1913 1914 p = alloc_swap_info(); 1915 if (IS_ERR(p)) 1916 return PTR_ERR(p); 1917 1918 name = getname(specialfile); | 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> --- 1902 unchanged lines hidden (view full) --- 1911 if (!capable(CAP_SYS_ADMIN)) 1912 return -EPERM; 1913 1914 p = alloc_swap_info(); 1915 if (IS_ERR(p)) 1916 return PTR_ERR(p); 1917 1918 name = getname(specialfile); |
1919 error = PTR_ERR(name); | |
1920 if (IS_ERR(name)) { | 1919 if (IS_ERR(name)) { |
1920 error = PTR_ERR(name); |
|
1921 name = NULL; 1922 goto bad_swap_2; 1923 } 1924 swap_file = filp_open(name, O_RDWR|O_LARGEFILE, 0); | 1921 name = NULL; 1922 goto bad_swap_2; 1923 } 1924 swap_file = filp_open(name, O_RDWR|O_LARGEFILE, 0); |
1925 error = PTR_ERR(swap_file); | |
1926 if (IS_ERR(swap_file)) { | 1925 if (IS_ERR(swap_file)) { |
1926 error = PTR_ERR(swap_file); |
|
1927 swap_file = NULL; 1928 goto bad_swap_2; 1929 } 1930 1931 p->swap_file = swap_file; 1932 mapping = swap_file->f_mapping; 1933 inode = mapping->host; 1934 | 1927 swap_file = NULL; 1928 goto bad_swap_2; 1929 } 1930 1931 p->swap_file = swap_file; 1932 mapping = swap_file->f_mapping; 1933 inode = mapping->host; 1934 |
1935 error = -EBUSY; | |
1936 for (i = 0; i < nr_swapfiles; i++) { 1937 struct swap_info_struct *q = swap_info[i]; 1938 1939 if (q == p || !q->swap_file) 1940 continue; | 1935 for (i = 0; i < nr_swapfiles; i++) { 1936 struct swap_info_struct *q = swap_info[i]; 1937 1938 if (q == p || !q->swap_file) 1939 continue; |
1941 if (mapping == q->swap_file->f_mapping) | 1940 if (mapping == q->swap_file->f_mapping) { 1941 error = -EBUSY; |
1942 goto bad_swap; | 1942 goto bad_swap; |
1943 } |
|
1943 } 1944 | 1944 } 1945 |
1945 error = -EINVAL; | |
1946 if (S_ISBLK(inode->i_mode)) { 1947 bdev = bdgrab(I_BDEV(inode)); 1948 error = blkdev_get(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL, 1949 sys_swapon); 1950 if (error < 0) { 1951 bdev = NULL; 1952 error = -EINVAL; 1953 goto bad_swap; --- 7 unchanged lines hidden (view full) --- 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 } 1968 } else { | 1946 if (S_ISBLK(inode->i_mode)) { 1947 bdev = bdgrab(I_BDEV(inode)); 1948 error = blkdev_get(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL, 1949 sys_swapon); 1950 if (error < 0) { 1951 bdev = NULL; 1952 error = -EINVAL; 1953 goto bad_swap; --- 7 unchanged lines hidden (view full) --- 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 } 1968 } else { |
1969 error = -EINVAL; |
|
1969 goto bad_swap; 1970 } 1971 1972 swapfilepages = i_size_read(inode) >> PAGE_SHIFT; 1973 1974 /* 1975 * Read the swap header. 1976 */ --- 591 unchanged lines hidden --- | 1970 goto bad_swap; 1971 } 1972 1973 swapfilepages = i_size_read(inode) >> PAGE_SHIFT; 1974 1975 /* 1976 * Read the swap header. 1977 */ --- 591 unchanged lines hidden --- |