diff options
Diffstat (limited to 'mm/swapfile.c')
-rw-r--r-- | mm/swapfile.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/mm/swapfile.c b/mm/swapfile.c index 67ddaaf98c74..07a458d72fa8 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c | |||
@@ -964,6 +964,8 @@ static inline int unuse_pmd_range(struct vm_area_struct *vma, pud_t *pud, | |||
964 | pmd = pmd_offset(pud, addr); | 964 | pmd = pmd_offset(pud, addr); |
965 | do { | 965 | do { |
966 | next = pmd_addr_end(addr, end); | 966 | next = pmd_addr_end(addr, end); |
967 | if (unlikely(pmd_trans_huge(*pmd))) | ||
968 | continue; | ||
967 | if (pmd_none_or_clear_bad(pmd)) | 969 | if (pmd_none_or_clear_bad(pmd)) |
968 | continue; | 970 | continue; |
969 | ret = unuse_pte_range(vma, pmd, addr, next, entry, page); | 971 | ret = unuse_pte_range(vma, pmd, addr, next, entry, page); |
@@ -1677,7 +1679,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) | |||
1677 | if (S_ISBLK(inode->i_mode)) { | 1679 | if (S_ISBLK(inode->i_mode)) { |
1678 | struct block_device *bdev = I_BDEV(inode); | 1680 | struct block_device *bdev = I_BDEV(inode); |
1679 | set_blocksize(bdev, p->old_block_size); | 1681 | set_blocksize(bdev, p->old_block_size); |
1680 | bd_release(bdev); | 1682 | blkdev_put(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL); |
1681 | } else { | 1683 | } else { |
1682 | mutex_lock(&inode->i_mutex); | 1684 | mutex_lock(&inode->i_mutex); |
1683 | inode->i_flags &= ~S_SWAPFILE; | 1685 | inode->i_flags &= ~S_SWAPFILE; |
@@ -1939,7 +1941,8 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) | |||
1939 | error = -EINVAL; | 1941 | error = -EINVAL; |
1940 | if (S_ISBLK(inode->i_mode)) { | 1942 | if (S_ISBLK(inode->i_mode)) { |
1941 | bdev = I_BDEV(inode); | 1943 | bdev = I_BDEV(inode); |
1942 | error = bd_claim(bdev, sys_swapon); | 1944 | error = blkdev_get(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL, |
1945 | sys_swapon); | ||
1943 | if (error < 0) { | 1946 | if (error < 0) { |
1944 | bdev = NULL; | 1947 | bdev = NULL; |
1945 | error = -EINVAL; | 1948 | error = -EINVAL; |
@@ -2136,7 +2139,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) | |||
2136 | bad_swap: | 2139 | bad_swap: |
2137 | if (bdev) { | 2140 | if (bdev) { |
2138 | set_blocksize(bdev, p->old_block_size); | 2141 | set_blocksize(bdev, p->old_block_size); |
2139 | bd_release(bdev); | 2142 | blkdev_put(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL); |
2140 | } | 2143 | } |
2141 | destroy_swap_extents(p); | 2144 | destroy_swap_extents(p); |
2142 | swap_cgroup_swapoff(type); | 2145 | swap_cgroup_swapoff(type); |