diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/Kconfig | 2 | ||||
| -rw-r--r-- | fs/block_dev.c | 2 | ||||
| -rw-r--r-- | fs/dcache.c | 19 | ||||
| -rw-r--r-- | fs/ext4/resize.c | 23 | ||||
| -rw-r--r-- | fs/hugetlbfs/inode.c | 25 | ||||
| -rw-r--r-- | fs/jbd/transaction.c | 15 | ||||
| -rw-r--r-- | fs/jbd2/transaction.c | 15 | ||||
| -rw-r--r-- | fs/splice.c | 9 |
8 files changed, 74 insertions, 36 deletions
diff --git a/fs/Kconfig b/fs/Kconfig index fee318e6f4bb..133dcc8a4150 100644 --- a/fs/Kconfig +++ b/fs/Kconfig | |||
| @@ -1777,6 +1777,7 @@ config RPCSEC_GSS_KRB5 | |||
| 1777 | select CRYPTO | 1777 | select CRYPTO |
| 1778 | select CRYPTO_MD5 | 1778 | select CRYPTO_MD5 |
| 1779 | select CRYPTO_DES | 1779 | select CRYPTO_DES |
| 1780 | select CRYPTO_CBC | ||
| 1780 | help | 1781 | help |
| 1781 | Provides for secure RPC calls by means of a gss-api | 1782 | Provides for secure RPC calls by means of a gss-api |
| 1782 | mechanism based on Kerberos V5. This is required for | 1783 | mechanism based on Kerberos V5. This is required for |
| @@ -1795,6 +1796,7 @@ config RPCSEC_GSS_SPKM3 | |||
| 1795 | select CRYPTO_MD5 | 1796 | select CRYPTO_MD5 |
| 1796 | select CRYPTO_DES | 1797 | select CRYPTO_DES |
| 1797 | select CRYPTO_CAST5 | 1798 | select CRYPTO_CAST5 |
| 1799 | select CRYPTO_CBC | ||
| 1798 | help | 1800 | help |
| 1799 | Provides for secure RPC calls by means of a gss-api | 1801 | Provides for secure RPC calls by means of a gss-api |
| 1800 | mechanism based on the SPKM3 public-key mechanism. | 1802 | mechanism based on the SPKM3 public-key mechanism. |
diff --git a/fs/block_dev.c b/fs/block_dev.c index bc8f27cc4483..702b88cbd91d 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c | |||
| @@ -1131,6 +1131,8 @@ static int blkdev_open(struct inode * inode, struct file * filp) | |||
| 1131 | filp->f_flags |= O_LARGEFILE; | 1131 | filp->f_flags |= O_LARGEFILE; |
| 1132 | 1132 | ||
| 1133 | bdev = bd_acquire(inode); | 1133 | bdev = bd_acquire(inode); |
| 1134 | if (bdev == NULL) | ||
| 1135 | return -ENOMEM; | ||
| 1134 | 1136 | ||
| 1135 | res = do_open(bdev, filp, BD_MUTEX_NORMAL); | 1137 | res = do_open(bdev, filp, BD_MUTEX_NORMAL); |
| 1136 | if (res) | 1138 | if (res) |
diff --git a/fs/dcache.c b/fs/dcache.c index a1ff91eef108..fd4a428998ef 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
| @@ -478,11 +478,12 @@ static void prune_dcache(int count, struct super_block *sb) | |||
| 478 | up_read(s_umount); | 478 | up_read(s_umount); |
| 479 | } | 479 | } |
| 480 | spin_unlock(&dentry->d_lock); | 480 | spin_unlock(&dentry->d_lock); |
| 481 | /* Cannot remove the first dentry, and it isn't appropriate | 481 | /* |
| 482 | * to move it to the head of the list, so give up, and try | 482 | * Insert dentry at the head of the list as inserting at the |
| 483 | * later | 483 | * tail leads to a cycle. |
| 484 | */ | 484 | */ |
| 485 | break; | 485 | list_add(&dentry->d_lru, &dentry_unused); |
| 486 | dentry_stat.nr_unused++; | ||
| 486 | } | 487 | } |
| 487 | spin_unlock(&dcache_lock); | 488 | spin_unlock(&dcache_lock); |
| 488 | } | 489 | } |
| @@ -556,6 +557,7 @@ repeat: | |||
| 556 | static void shrink_dcache_for_umount_subtree(struct dentry *dentry) | 557 | static void shrink_dcache_for_umount_subtree(struct dentry *dentry) |
| 557 | { | 558 | { |
| 558 | struct dentry *parent; | 559 | struct dentry *parent; |
| 560 | unsigned detached = 0; | ||
| 559 | 561 | ||
| 560 | BUG_ON(!IS_ROOT(dentry)); | 562 | BUG_ON(!IS_ROOT(dentry)); |
| 561 | 563 | ||
| @@ -620,7 +622,7 @@ static void shrink_dcache_for_umount_subtree(struct dentry *dentry) | |||
| 620 | atomic_dec(&parent->d_count); | 622 | atomic_dec(&parent->d_count); |
| 621 | 623 | ||
| 622 | list_del(&dentry->d_u.d_child); | 624 | list_del(&dentry->d_u.d_child); |
| 623 | dentry_stat.nr_dentry--; /* For d_free, below */ | 625 | detached++; |
| 624 | 626 | ||
| 625 | inode = dentry->d_inode; | 627 | inode = dentry->d_inode; |
| 626 | if (inode) { | 628 | if (inode) { |
| @@ -638,7 +640,7 @@ static void shrink_dcache_for_umount_subtree(struct dentry *dentry) | |||
| 638 | * otherwise we ascend to the parent and move to the | 640 | * otherwise we ascend to the parent and move to the |
| 639 | * next sibling if there is one */ | 641 | * next sibling if there is one */ |
| 640 | if (!parent) | 642 | if (!parent) |
| 641 | return; | 643 | goto out; |
| 642 | 644 | ||
| 643 | dentry = parent; | 645 | dentry = parent; |
| 644 | 646 | ||
| @@ -647,6 +649,11 @@ static void shrink_dcache_for_umount_subtree(struct dentry *dentry) | |||
| 647 | dentry = list_entry(dentry->d_subdirs.next, | 649 | dentry = list_entry(dentry->d_subdirs.next, |
| 648 | struct dentry, d_u.d_child); | 650 | struct dentry, d_u.d_child); |
| 649 | } | 651 | } |
| 652 | out: | ||
| 653 | /* several dentries were freed, need to correct nr_dentry */ | ||
| 654 | spin_lock(&dcache_lock); | ||
| 655 | dentry_stat.nr_dentry -= detached; | ||
| 656 | spin_unlock(&dcache_lock); | ||
| 650 | } | 657 | } |
| 651 | 658 | ||
| 652 | /* | 659 | /* |
diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c index 1e9578052cd3..4fe49c3661b2 100644 --- a/fs/ext4/resize.c +++ b/fs/ext4/resize.c | |||
| @@ -69,44 +69,49 @@ static int verify_group_input(struct super_block *sb, | |||
| 69 | else if (outside(input->block_bitmap, start, end)) | 69 | else if (outside(input->block_bitmap, start, end)) |
| 70 | ext4_warning(sb, __FUNCTION__, | 70 | ext4_warning(sb, __FUNCTION__, |
| 71 | "Block bitmap not in group (block %llu)", | 71 | "Block bitmap not in group (block %llu)", |
| 72 | input->block_bitmap); | 72 | (unsigned long long)input->block_bitmap); |
| 73 | else if (outside(input->inode_bitmap, start, end)) | 73 | else if (outside(input->inode_bitmap, start, end)) |
| 74 | ext4_warning(sb, __FUNCTION__, | 74 | ext4_warning(sb, __FUNCTION__, |
| 75 | "Inode bitmap not in group (block %llu)", | 75 | "Inode bitmap not in group (block %llu)", |
| 76 | input->inode_bitmap); | 76 | (unsigned long long)input->inode_bitmap); |
| 77 | else if (outside(input->inode_table, start, end) || | 77 | else if (outside(input->inode_table, start, end) || |
| 78 | outside(itend - 1, start, end)) | 78 | outside(itend - 1, start, end)) |
| 79 | ext4_warning(sb, __FUNCTION__, | 79 | ext4_warning(sb, __FUNCTION__, |
| 80 | "Inode table not in group (blocks %llu-%llu)", | 80 | "Inode table not in group (blocks %llu-%llu)", |
| 81 | input->inode_table, itend - 1); | 81 | (unsigned long long)input->inode_table, itend - 1); |
| 82 | else if (input->inode_bitmap == input->block_bitmap) | 82 | else if (input->inode_bitmap == input->block_bitmap) |
| 83 | ext4_warning(sb, __FUNCTION__, | 83 | ext4_warning(sb, __FUNCTION__, |
| 84 | "Block bitmap same as inode bitmap (%llu)", | 84 | "Block bitmap same as inode bitmap (%llu)", |
| 85 | input->block_bitmap); | 85 | (unsigned long long)input->block_bitmap); |
| 86 | else if (inside(input->block_bitmap, input->inode_table, itend)) | 86 | else if (inside(input->block_bitmap, input->inode_table, itend)) |
| 87 | ext4_warning(sb, __FUNCTION__, | 87 | ext4_warning(sb, __FUNCTION__, |
| 88 | "Block bitmap (%llu) in inode table (%llu-%llu)", | 88 | "Block bitmap (%llu) in inode table (%llu-%llu)", |
| 89 | input->block_bitmap, input->inode_table, itend-1); | 89 | (unsigned long long)input->block_bitmap, |
| 90 | (unsigned long long)input->inode_table, itend - 1); | ||
| 90 | else if (inside(input->inode_bitmap, input->inode_table, itend)) | 91 | else if (inside(input->inode_bitmap, input->inode_table, itend)) |
| 91 | ext4_warning(sb, __FUNCTION__, | 92 | ext4_warning(sb, __FUNCTION__, |
| 92 | "Inode bitmap (%llu) in inode table (%llu-%llu)", | 93 | "Inode bitmap (%llu) in inode table (%llu-%llu)", |
| 93 | input->inode_bitmap, input->inode_table, itend-1); | 94 | (unsigned long long)input->inode_bitmap, |
| 95 | (unsigned long long)input->inode_table, itend - 1); | ||
| 94 | else if (inside(input->block_bitmap, start, metaend)) | 96 | else if (inside(input->block_bitmap, start, metaend)) |
| 95 | ext4_warning(sb, __FUNCTION__, | 97 | ext4_warning(sb, __FUNCTION__, |
| 96 | "Block bitmap (%llu) in GDT table" | 98 | "Block bitmap (%llu) in GDT table" |
| 97 | " (%llu-%llu)", | 99 | " (%llu-%llu)", |
| 98 | input->block_bitmap, start, metaend - 1); | 100 | (unsigned long long)input->block_bitmap, |
| 101 | start, metaend - 1); | ||
| 99 | else if (inside(input->inode_bitmap, start, metaend)) | 102 | else if (inside(input->inode_bitmap, start, metaend)) |
| 100 | ext4_warning(sb, __FUNCTION__, | 103 | ext4_warning(sb, __FUNCTION__, |
| 101 | "Inode bitmap (%llu) in GDT table" | 104 | "Inode bitmap (%llu) in GDT table" |
| 102 | " (%llu-%llu)", | 105 | " (%llu-%llu)", |
| 103 | input->inode_bitmap, start, metaend - 1); | 106 | (unsigned long long)input->inode_bitmap, |
| 107 | start, metaend - 1); | ||
| 104 | else if (inside(input->inode_table, start, metaend) || | 108 | else if (inside(input->inode_table, start, metaend) || |
| 105 | inside(itend - 1, start, metaend)) | 109 | inside(itend - 1, start, metaend)) |
| 106 | ext4_warning(sb, __FUNCTION__, | 110 | ext4_warning(sb, __FUNCTION__, |
| 107 | "Inode table (%llu-%llu) overlaps" | 111 | "Inode table (%llu-%llu) overlaps" |
| 108 | "GDT table (%llu-%llu)", | 112 | "GDT table (%llu-%llu)", |
| 109 | input->inode_table, itend - 1, start, metaend - 1); | 113 | (unsigned long long)input->inode_table, |
| 114 | itend - 1, start, metaend - 1); | ||
| 110 | else | 115 | else |
| 111 | err = 0; | 116 | err = 0; |
| 112 | brelse(bh); | 117 | brelse(bh); |
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 4ee3f006b861..0bea6a619e10 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c | |||
| @@ -271,26 +271,24 @@ static void hugetlbfs_drop_inode(struct inode *inode) | |||
| 271 | hugetlbfs_forget_inode(inode); | 271 | hugetlbfs_forget_inode(inode); |
| 272 | } | 272 | } |
| 273 | 273 | ||
| 274 | /* | ||
| 275 | * h_pgoff is in HPAGE_SIZE units. | ||
| 276 | * vma->vm_pgoff is in PAGE_SIZE units. | ||
| 277 | */ | ||
| 278 | static inline void | 274 | static inline void |
| 279 | hugetlb_vmtruncate_list(struct prio_tree_root *root, unsigned long h_pgoff) | 275 | hugetlb_vmtruncate_list(struct prio_tree_root *root, pgoff_t pgoff) |
| 280 | { | 276 | { |
| 281 | struct vm_area_struct *vma; | 277 | struct vm_area_struct *vma; |
| 282 | struct prio_tree_iter iter; | 278 | struct prio_tree_iter iter; |
| 283 | 279 | ||
| 284 | vma_prio_tree_foreach(vma, &iter, root, h_pgoff, ULONG_MAX) { | 280 | vma_prio_tree_foreach(vma, &iter, root, pgoff, ULONG_MAX) { |
| 285 | unsigned long h_vm_pgoff; | ||
| 286 | unsigned long v_offset; | 281 | unsigned long v_offset; |
| 287 | 282 | ||
| 288 | h_vm_pgoff = vma->vm_pgoff >> (HPAGE_SHIFT - PAGE_SHIFT); | ||
| 289 | v_offset = (h_pgoff - h_vm_pgoff) << HPAGE_SHIFT; | ||
| 290 | /* | 283 | /* |
| 291 | * Is this VMA fully outside the truncation point? | 284 | * Can the expression below overflow on 32-bit arches? |
| 285 | * No, because the prio_tree returns us only those vmas | ||
| 286 | * which overlap the truncated area starting at pgoff, | ||
| 287 | * and no vma on a 32-bit arch can span beyond the 4GB. | ||
| 292 | */ | 288 | */ |
| 293 | if (h_vm_pgoff >= h_pgoff) | 289 | if (vma->vm_pgoff < pgoff) |
| 290 | v_offset = (pgoff - vma->vm_pgoff) << PAGE_SHIFT; | ||
| 291 | else | ||
| 294 | v_offset = 0; | 292 | v_offset = 0; |
| 295 | 293 | ||
| 296 | __unmap_hugepage_range(vma, | 294 | __unmap_hugepage_range(vma, |
| @@ -303,14 +301,14 @@ hugetlb_vmtruncate_list(struct prio_tree_root *root, unsigned long h_pgoff) | |||
| 303 | */ | 301 | */ |
| 304 | static int hugetlb_vmtruncate(struct inode *inode, loff_t offset) | 302 | static int hugetlb_vmtruncate(struct inode *inode, loff_t offset) |
| 305 | { | 303 | { |
| 306 | unsigned long pgoff; | 304 | pgoff_t pgoff; |
| 307 | struct address_space *mapping = inode->i_mapping; | 305 | struct address_space *mapping = inode->i_mapping; |
| 308 | 306 | ||
| 309 | if (offset > inode->i_size) | 307 | if (offset > inode->i_size) |
| 310 | return -EINVAL; | 308 | return -EINVAL; |
| 311 | 309 | ||
| 312 | BUG_ON(offset & ~HPAGE_MASK); | 310 | BUG_ON(offset & ~HPAGE_MASK); |
| 313 | pgoff = offset >> HPAGE_SHIFT; | 311 | pgoff = offset >> PAGE_SHIFT; |
| 314 | 312 | ||
| 315 | inode->i_size = offset; | 313 | inode->i_size = offset; |
| 316 | spin_lock(&mapping->i_mmap_lock); | 314 | spin_lock(&mapping->i_mmap_lock); |
| @@ -624,7 +622,6 @@ hugetlbfs_parse_options(char *options, struct hugetlbfs_config *pconfig) | |||
| 624 | do_div(size, 100); | 622 | do_div(size, 100); |
| 625 | rest++; | 623 | rest++; |
| 626 | } | 624 | } |
| 627 | size &= HPAGE_MASK; | ||
| 628 | pconfig->nr_blocks = (size >> HPAGE_SHIFT); | 625 | pconfig->nr_blocks = (size >> HPAGE_SHIFT); |
| 629 | value = rest; | 626 | value = rest; |
| 630 | } else if (!strcmp(opt,"nr_inodes")) { | 627 | } else if (!strcmp(opt,"nr_inodes")) { |
diff --git a/fs/jbd/transaction.c b/fs/jbd/transaction.c index d5c63047a8b3..4f82bcd63e48 100644 --- a/fs/jbd/transaction.c +++ b/fs/jbd/transaction.c | |||
| @@ -967,6 +967,13 @@ int journal_dirty_data(handle_t *handle, struct buffer_head *bh) | |||
| 967 | */ | 967 | */ |
| 968 | jbd_lock_bh_state(bh); | 968 | jbd_lock_bh_state(bh); |
| 969 | spin_lock(&journal->j_list_lock); | 969 | spin_lock(&journal->j_list_lock); |
| 970 | |||
| 971 | /* Now that we have bh_state locked, are we really still mapped? */ | ||
| 972 | if (!buffer_mapped(bh)) { | ||
| 973 | JBUFFER_TRACE(jh, "unmapped buffer, bailing out"); | ||
| 974 | goto no_journal; | ||
| 975 | } | ||
| 976 | |||
| 970 | if (jh->b_transaction) { | 977 | if (jh->b_transaction) { |
| 971 | JBUFFER_TRACE(jh, "has transaction"); | 978 | JBUFFER_TRACE(jh, "has transaction"); |
| 972 | if (jh->b_transaction != handle->h_transaction) { | 979 | if (jh->b_transaction != handle->h_transaction) { |
| @@ -1028,6 +1035,11 @@ int journal_dirty_data(handle_t *handle, struct buffer_head *bh) | |||
| 1028 | sync_dirty_buffer(bh); | 1035 | sync_dirty_buffer(bh); |
| 1029 | jbd_lock_bh_state(bh); | 1036 | jbd_lock_bh_state(bh); |
| 1030 | spin_lock(&journal->j_list_lock); | 1037 | spin_lock(&journal->j_list_lock); |
| 1038 | /* Since we dropped the lock... */ | ||
| 1039 | if (!buffer_mapped(bh)) { | ||
| 1040 | JBUFFER_TRACE(jh, "buffer got unmapped"); | ||
| 1041 | goto no_journal; | ||
| 1042 | } | ||
| 1031 | /* The buffer may become locked again at any | 1043 | /* The buffer may become locked again at any |
| 1032 | time if it is redirtied */ | 1044 | time if it is redirtied */ |
| 1033 | } | 1045 | } |
| @@ -1824,6 +1836,7 @@ static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh) | |||
| 1824 | } | 1836 | } |
| 1825 | } | 1837 | } |
| 1826 | } else if (transaction == journal->j_committing_transaction) { | 1838 | } else if (transaction == journal->j_committing_transaction) { |
| 1839 | JBUFFER_TRACE(jh, "on committing transaction"); | ||
| 1827 | if (jh->b_jlist == BJ_Locked) { | 1840 | if (jh->b_jlist == BJ_Locked) { |
| 1828 | /* | 1841 | /* |
| 1829 | * The buffer is on the committing transaction's locked | 1842 | * The buffer is on the committing transaction's locked |
| @@ -1838,7 +1851,6 @@ static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh) | |||
| 1838 | * can remove it's next_transaction pointer from the | 1851 | * can remove it's next_transaction pointer from the |
| 1839 | * running transaction if that is set, but nothing | 1852 | * running transaction if that is set, but nothing |
| 1840 | * else. */ | 1853 | * else. */ |
| 1841 | JBUFFER_TRACE(jh, "on committing transaction"); | ||
| 1842 | set_buffer_freed(bh); | 1854 | set_buffer_freed(bh); |
| 1843 | if (jh->b_next_transaction) { | 1855 | if (jh->b_next_transaction) { |
| 1844 | J_ASSERT(jh->b_next_transaction == | 1856 | J_ASSERT(jh->b_next_transaction == |
| @@ -1858,6 +1870,7 @@ static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh) | |||
| 1858 | * i_size already for this truncate so recovery will not | 1870 | * i_size already for this truncate so recovery will not |
| 1859 | * expose the disk blocks we are discarding here.) */ | 1871 | * expose the disk blocks we are discarding here.) */ |
| 1860 | J_ASSERT_JH(jh, transaction == journal->j_running_transaction); | 1872 | J_ASSERT_JH(jh, transaction == journal->j_running_transaction); |
| 1873 | JBUFFER_TRACE(jh, "on running transaction"); | ||
| 1861 | may_free = __dispose_buffer(jh, transaction); | 1874 | may_free = __dispose_buffer(jh, transaction); |
| 1862 | } | 1875 | } |
| 1863 | 1876 | ||
diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c index b6cf2be845a1..c051a94c8a97 100644 --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c | |||
| @@ -967,6 +967,13 @@ int jbd2_journal_dirty_data(handle_t *handle, struct buffer_head *bh) | |||
| 967 | */ | 967 | */ |
| 968 | jbd_lock_bh_state(bh); | 968 | jbd_lock_bh_state(bh); |
| 969 | spin_lock(&journal->j_list_lock); | 969 | spin_lock(&journal->j_list_lock); |
| 970 | |||
| 971 | /* Now that we have bh_state locked, are we really still mapped? */ | ||
| 972 | if (!buffer_mapped(bh)) { | ||
| 973 | JBUFFER_TRACE(jh, "unmapped buffer, bailing out"); | ||
| 974 | goto no_journal; | ||
| 975 | } | ||
| 976 | |||
| 970 | if (jh->b_transaction) { | 977 | if (jh->b_transaction) { |
| 971 | JBUFFER_TRACE(jh, "has transaction"); | 978 | JBUFFER_TRACE(jh, "has transaction"); |
| 972 | if (jh->b_transaction != handle->h_transaction) { | 979 | if (jh->b_transaction != handle->h_transaction) { |
| @@ -1028,6 +1035,11 @@ int jbd2_journal_dirty_data(handle_t *handle, struct buffer_head *bh) | |||
| 1028 | sync_dirty_buffer(bh); | 1035 | sync_dirty_buffer(bh); |
| 1029 | jbd_lock_bh_state(bh); | 1036 | jbd_lock_bh_state(bh); |
| 1030 | spin_lock(&journal->j_list_lock); | 1037 | spin_lock(&journal->j_list_lock); |
| 1038 | /* Since we dropped the lock... */ | ||
| 1039 | if (!buffer_mapped(bh)) { | ||
| 1040 | JBUFFER_TRACE(jh, "buffer got unmapped"); | ||
| 1041 | goto no_journal; | ||
| 1042 | } | ||
| 1031 | /* The buffer may become locked again at any | 1043 | /* The buffer may become locked again at any |
| 1032 | time if it is redirtied */ | 1044 | time if it is redirtied */ |
| 1033 | } | 1045 | } |
| @@ -1824,6 +1836,7 @@ static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh) | |||
| 1824 | } | 1836 | } |
| 1825 | } | 1837 | } |
| 1826 | } else if (transaction == journal->j_committing_transaction) { | 1838 | } else if (transaction == journal->j_committing_transaction) { |
| 1839 | JBUFFER_TRACE(jh, "on committing transaction"); | ||
| 1827 | if (jh->b_jlist == BJ_Locked) { | 1840 | if (jh->b_jlist == BJ_Locked) { |
| 1828 | /* | 1841 | /* |
| 1829 | * The buffer is on the committing transaction's locked | 1842 | * The buffer is on the committing transaction's locked |
| @@ -1838,7 +1851,6 @@ static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh) | |||
| 1838 | * can remove it's next_transaction pointer from the | 1851 | * can remove it's next_transaction pointer from the |
| 1839 | * running transaction if that is set, but nothing | 1852 | * running transaction if that is set, but nothing |
| 1840 | * else. */ | 1853 | * else. */ |
| 1841 | JBUFFER_TRACE(jh, "on committing transaction"); | ||
| 1842 | set_buffer_freed(bh); | 1854 | set_buffer_freed(bh); |
| 1843 | if (jh->b_next_transaction) { | 1855 | if (jh->b_next_transaction) { |
| 1844 | J_ASSERT(jh->b_next_transaction == | 1856 | J_ASSERT(jh->b_next_transaction == |
| @@ -1858,6 +1870,7 @@ static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh) | |||
| 1858 | * i_size already for this truncate so recovery will not | 1870 | * i_size already for this truncate so recovery will not |
| 1859 | * expose the disk blocks we are discarding here.) */ | 1871 | * expose the disk blocks we are discarding here.) */ |
| 1860 | J_ASSERT_JH(jh, transaction == journal->j_running_transaction); | 1872 | J_ASSERT_JH(jh, transaction == journal->j_running_transaction); |
| 1873 | JBUFFER_TRACE(jh, "on running transaction"); | ||
| 1861 | may_free = __dispose_buffer(jh, transaction); | 1874 | may_free = __dispose_buffer(jh, transaction); |
| 1862 | } | 1875 | } |
| 1863 | 1876 | ||
diff --git a/fs/splice.c b/fs/splice.c index 49fb9f129938..8d705954d294 100644 --- a/fs/splice.c +++ b/fs/splice.c | |||
| @@ -74,7 +74,7 @@ static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe, | |||
| 74 | wait_on_page_writeback(page); | 74 | wait_on_page_writeback(page); |
| 75 | 75 | ||
| 76 | if (PagePrivate(page)) | 76 | if (PagePrivate(page)) |
| 77 | try_to_release_page(page, mapping_gfp_mask(mapping)); | 77 | try_to_release_page(page, GFP_KERNEL); |
| 78 | 78 | ||
| 79 | /* | 79 | /* |
| 80 | * If we succeeded in removing the mapping, set LRU flag | 80 | * If we succeeded in removing the mapping, set LRU flag |
| @@ -333,7 +333,7 @@ __generic_file_splice_read(struct file *in, loff_t *ppos, | |||
| 333 | break; | 333 | break; |
| 334 | 334 | ||
| 335 | error = add_to_page_cache_lru(page, mapping, index, | 335 | error = add_to_page_cache_lru(page, mapping, index, |
| 336 | mapping_gfp_mask(mapping)); | 336 | GFP_KERNEL); |
| 337 | if (unlikely(error)) { | 337 | if (unlikely(error)) { |
| 338 | page_cache_release(page); | 338 | page_cache_release(page); |
| 339 | if (error == -EEXIST) | 339 | if (error == -EEXIST) |
| @@ -557,7 +557,6 @@ static int pipe_to_file(struct pipe_inode_info *pipe, struct pipe_buffer *buf, | |||
| 557 | { | 557 | { |
| 558 | struct file *file = sd->file; | 558 | struct file *file = sd->file; |
| 559 | struct address_space *mapping = file->f_mapping; | 559 | struct address_space *mapping = file->f_mapping; |
| 560 | gfp_t gfp_mask = mapping_gfp_mask(mapping); | ||
| 561 | unsigned int offset, this_len; | 560 | unsigned int offset, this_len; |
| 562 | struct page *page; | 561 | struct page *page; |
| 563 | pgoff_t index; | 562 | pgoff_t index; |
| @@ -591,7 +590,7 @@ static int pipe_to_file(struct pipe_inode_info *pipe, struct pipe_buffer *buf, | |||
| 591 | goto find_page; | 590 | goto find_page; |
| 592 | 591 | ||
| 593 | page = buf->page; | 592 | page = buf->page; |
| 594 | if (add_to_page_cache(page, mapping, index, gfp_mask)) { | 593 | if (add_to_page_cache(page, mapping, index, GFP_KERNEL)) { |
| 595 | unlock_page(page); | 594 | unlock_page(page); |
| 596 | goto find_page; | 595 | goto find_page; |
| 597 | } | 596 | } |
| @@ -613,7 +612,7 @@ find_page: | |||
| 613 | * This will also lock the page | 612 | * This will also lock the page |
| 614 | */ | 613 | */ |
| 615 | ret = add_to_page_cache_lru(page, mapping, index, | 614 | ret = add_to_page_cache_lru(page, mapping, index, |
| 616 | gfp_mask); | 615 | GFP_KERNEL); |
| 617 | if (unlikely(ret)) | 616 | if (unlikely(ret)) |
| 618 | goto out; | 617 | goto out; |
| 619 | } | 618 | } |
