diff options
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r-- | fs/btrfs/inode.c | 589 |
1 files changed, 234 insertions, 355 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 0ccc7438ad34..526dd51a1966 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -45,10 +45,10 @@ | |||
45 | #include "btrfs_inode.h" | 45 | #include "btrfs_inode.h" |
46 | #include "ioctl.h" | 46 | #include "ioctl.h" |
47 | #include "print-tree.h" | 47 | #include "print-tree.h" |
48 | #include "volumes.h" | ||
49 | #include "ordered-data.h" | 48 | #include "ordered-data.h" |
50 | #include "xattr.h" | 49 | #include "xattr.h" |
51 | #include "tree-log.h" | 50 | #include "tree-log.h" |
51 | #include "volumes.h" | ||
52 | #include "compression.h" | 52 | #include "compression.h" |
53 | #include "locking.h" | 53 | #include "locking.h" |
54 | #include "free-space-cache.h" | 54 | #include "free-space-cache.h" |
@@ -93,6 +93,8 @@ static noinline int cow_file_range(struct inode *inode, | |||
93 | struct page *locked_page, | 93 | struct page *locked_page, |
94 | u64 start, u64 end, int *page_started, | 94 | u64 start, u64 end, int *page_started, |
95 | unsigned long *nr_written, int unlock); | 95 | unsigned long *nr_written, int unlock); |
96 | static noinline int btrfs_update_inode_fallback(struct btrfs_trans_handle *trans, | ||
97 | struct btrfs_root *root, struct inode *inode); | ||
96 | 98 | ||
97 | static int btrfs_init_inode_security(struct btrfs_trans_handle *trans, | 99 | static int btrfs_init_inode_security(struct btrfs_trans_handle *trans, |
98 | struct inode *inode, struct inode *dir, | 100 | struct inode *inode, struct inode *dir, |
@@ -393,7 +395,10 @@ again: | |||
393 | (BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS))) { | 395 | (BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS))) { |
394 | WARN_ON(pages); | 396 | WARN_ON(pages); |
395 | pages = kzalloc(sizeof(struct page *) * nr_pages, GFP_NOFS); | 397 | pages = kzalloc(sizeof(struct page *) * nr_pages, GFP_NOFS); |
396 | BUG_ON(!pages); | 398 | if (!pages) { |
399 | /* just bail out to the uncompressed code */ | ||
400 | goto cont; | ||
401 | } | ||
397 | 402 | ||
398 | if (BTRFS_I(inode)->force_compress) | 403 | if (BTRFS_I(inode)->force_compress) |
399 | compress_type = BTRFS_I(inode)->force_compress; | 404 | compress_type = BTRFS_I(inode)->force_compress; |
@@ -424,6 +429,7 @@ again: | |||
424 | will_compress = 1; | 429 | will_compress = 1; |
425 | } | 430 | } |
426 | } | 431 | } |
432 | cont: | ||
427 | if (start == 0) { | 433 | if (start == 0) { |
428 | trans = btrfs_join_transaction(root); | 434 | trans = btrfs_join_transaction(root); |
429 | BUG_ON(IS_ERR(trans)); | 435 | BUG_ON(IS_ERR(trans)); |
@@ -820,7 +826,7 @@ static noinline int cow_file_range(struct inode *inode, | |||
820 | } | 826 | } |
821 | 827 | ||
822 | BUG_ON(disk_num_bytes > | 828 | BUG_ON(disk_num_bytes > |
823 | btrfs_super_total_bytes(&root->fs_info->super_copy)); | 829 | btrfs_super_total_bytes(root->fs_info->super_copy)); |
824 | 830 | ||
825 | alloc_hint = get_extent_allocation_hint(inode, start, num_bytes); | 831 | alloc_hint = get_extent_allocation_hint(inode, start, num_bytes); |
826 | btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0); | 832 | btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0); |
@@ -1737,7 +1743,7 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end) | |||
1737 | trans = btrfs_join_transaction(root); | 1743 | trans = btrfs_join_transaction(root); |
1738 | BUG_ON(IS_ERR(trans)); | 1744 | BUG_ON(IS_ERR(trans)); |
1739 | trans->block_rsv = &root->fs_info->delalloc_block_rsv; | 1745 | trans->block_rsv = &root->fs_info->delalloc_block_rsv; |
1740 | ret = btrfs_update_inode(trans, root, inode); | 1746 | ret = btrfs_update_inode_fallback(trans, root, inode); |
1741 | BUG_ON(ret); | 1747 | BUG_ON(ret); |
1742 | } | 1748 | } |
1743 | goto out; | 1749 | goto out; |
@@ -1786,18 +1792,18 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end) | |||
1786 | &ordered_extent->list); | 1792 | &ordered_extent->list); |
1787 | 1793 | ||
1788 | ret = btrfs_ordered_update_i_size(inode, 0, ordered_extent); | 1794 | ret = btrfs_ordered_update_i_size(inode, 0, ordered_extent); |
1789 | if (!ret) { | 1795 | if (!ret || !test_bit(BTRFS_ORDERED_PREALLOC, &ordered_extent->flags)) { |
1790 | ret = btrfs_update_inode(trans, root, inode); | 1796 | ret = btrfs_update_inode_fallback(trans, root, inode); |
1791 | BUG_ON(ret); | 1797 | BUG_ON(ret); |
1792 | } | 1798 | } |
1793 | ret = 0; | 1799 | ret = 0; |
1794 | out: | 1800 | out: |
1795 | if (nolock) { | 1801 | if (root != root->fs_info->tree_root) |
1796 | if (trans) | ||
1797 | btrfs_end_transaction_nolock(trans, root); | ||
1798 | } else { | ||
1799 | btrfs_delalloc_release_metadata(inode, ordered_extent->len); | 1802 | btrfs_delalloc_release_metadata(inode, ordered_extent->len); |
1800 | if (trans) | 1803 | if (trans) { |
1804 | if (nolock) | ||
1805 | btrfs_end_transaction_nolock(trans, root); | ||
1806 | else | ||
1801 | btrfs_end_transaction(trans, root); | 1807 | btrfs_end_transaction(trans, root); |
1802 | } | 1808 | } |
1803 | 1809 | ||
@@ -1819,153 +1825,9 @@ static int btrfs_writepage_end_io_hook(struct page *page, u64 start, u64 end, | |||
1819 | } | 1825 | } |
1820 | 1826 | ||
1821 | /* | 1827 | /* |
1822 | * When IO fails, either with EIO or csum verification fails, we | ||
1823 | * try other mirrors that might have a good copy of the data. This | ||
1824 | * io_failure_record is used to record state as we go through all the | ||
1825 | * mirrors. If another mirror has good data, the page is set up to date | ||
1826 | * and things continue. If a good mirror can't be found, the original | ||
1827 | * bio end_io callback is called to indicate things have failed. | ||
1828 | */ | ||
1829 | struct io_failure_record { | ||
1830 | struct page *page; | ||
1831 | u64 start; | ||
1832 | u64 len; | ||
1833 | u64 logical; | ||
1834 | unsigned long bio_flags; | ||
1835 | int last_mirror; | ||
1836 | }; | ||
1837 | |||
1838 | static int btrfs_io_failed_hook(struct bio *failed_bio, | ||
1839 | struct page *page, u64 start, u64 end, | ||
1840 | struct extent_state *state) | ||
1841 | { | ||
1842 | struct io_failure_record *failrec = NULL; | ||
1843 | u64 private; | ||
1844 | struct extent_map *em; | ||
1845 | struct inode *inode = page->mapping->host; | ||
1846 | struct extent_io_tree *failure_tree = &BTRFS_I(inode)->io_failure_tree; | ||
1847 | struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; | ||
1848 | struct bio *bio; | ||
1849 | int num_copies; | ||
1850 | int ret; | ||
1851 | int rw; | ||
1852 | u64 logical; | ||
1853 | |||
1854 | ret = get_state_private(failure_tree, start, &private); | ||
1855 | if (ret) { | ||
1856 | failrec = kmalloc(sizeof(*failrec), GFP_NOFS); | ||
1857 | if (!failrec) | ||
1858 | return -ENOMEM; | ||
1859 | failrec->start = start; | ||
1860 | failrec->len = end - start + 1; | ||
1861 | failrec->last_mirror = 0; | ||
1862 | failrec->bio_flags = 0; | ||
1863 | |||
1864 | read_lock(&em_tree->lock); | ||
1865 | em = lookup_extent_mapping(em_tree, start, failrec->len); | ||
1866 | if (em->start > start || em->start + em->len < start) { | ||
1867 | free_extent_map(em); | ||
1868 | em = NULL; | ||
1869 | } | ||
1870 | read_unlock(&em_tree->lock); | ||
1871 | |||
1872 | if (IS_ERR_OR_NULL(em)) { | ||
1873 | kfree(failrec); | ||
1874 | return -EIO; | ||
1875 | } | ||
1876 | logical = start - em->start; | ||
1877 | logical = em->block_start + logical; | ||
1878 | if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags)) { | ||
1879 | logical = em->block_start; | ||
1880 | failrec->bio_flags = EXTENT_BIO_COMPRESSED; | ||
1881 | extent_set_compress_type(&failrec->bio_flags, | ||
1882 | em->compress_type); | ||
1883 | } | ||
1884 | failrec->logical = logical; | ||
1885 | free_extent_map(em); | ||
1886 | set_extent_bits(failure_tree, start, end, EXTENT_LOCKED | | ||
1887 | EXTENT_DIRTY, GFP_NOFS); | ||
1888 | set_state_private(failure_tree, start, | ||
1889 | (u64)(unsigned long)failrec); | ||
1890 | } else { | ||
1891 | failrec = (struct io_failure_record *)(unsigned long)private; | ||
1892 | } | ||
1893 | num_copies = btrfs_num_copies( | ||
1894 | &BTRFS_I(inode)->root->fs_info->mapping_tree, | ||
1895 | failrec->logical, failrec->len); | ||
1896 | failrec->last_mirror++; | ||
1897 | if (!state) { | ||
1898 | spin_lock(&BTRFS_I(inode)->io_tree.lock); | ||
1899 | state = find_first_extent_bit_state(&BTRFS_I(inode)->io_tree, | ||
1900 | failrec->start, | ||
1901 | EXTENT_LOCKED); | ||
1902 | if (state && state->start != failrec->start) | ||
1903 | state = NULL; | ||
1904 | spin_unlock(&BTRFS_I(inode)->io_tree.lock); | ||
1905 | } | ||
1906 | if (!state || failrec->last_mirror > num_copies) { | ||
1907 | set_state_private(failure_tree, failrec->start, 0); | ||
1908 | clear_extent_bits(failure_tree, failrec->start, | ||
1909 | failrec->start + failrec->len - 1, | ||
1910 | EXTENT_LOCKED | EXTENT_DIRTY, GFP_NOFS); | ||
1911 | kfree(failrec); | ||
1912 | return -EIO; | ||
1913 | } | ||
1914 | bio = bio_alloc(GFP_NOFS, 1); | ||
1915 | bio->bi_private = state; | ||
1916 | bio->bi_end_io = failed_bio->bi_end_io; | ||
1917 | bio->bi_sector = failrec->logical >> 9; | ||
1918 | bio->bi_bdev = failed_bio->bi_bdev; | ||
1919 | bio->bi_size = 0; | ||
1920 | |||
1921 | bio_add_page(bio, page, failrec->len, start - page_offset(page)); | ||
1922 | if (failed_bio->bi_rw & REQ_WRITE) | ||
1923 | rw = WRITE; | ||
1924 | else | ||
1925 | rw = READ; | ||
1926 | |||
1927 | ret = BTRFS_I(inode)->io_tree.ops->submit_bio_hook(inode, rw, bio, | ||
1928 | failrec->last_mirror, | ||
1929 | failrec->bio_flags, 0); | ||
1930 | return ret; | ||
1931 | } | ||
1932 | |||
1933 | /* | ||
1934 | * each time an IO finishes, we do a fast check in the IO failure tree | ||
1935 | * to see if we need to process or clean up an io_failure_record | ||
1936 | */ | ||
1937 | static int btrfs_clean_io_failures(struct inode *inode, u64 start) | ||
1938 | { | ||
1939 | u64 private; | ||
1940 | u64 private_failure; | ||
1941 | struct io_failure_record *failure; | ||
1942 | int ret; | ||
1943 | |||
1944 | private = 0; | ||
1945 | if (count_range_bits(&BTRFS_I(inode)->io_failure_tree, &private, | ||
1946 | (u64)-1, 1, EXTENT_DIRTY, 0)) { | ||
1947 | ret = get_state_private(&BTRFS_I(inode)->io_failure_tree, | ||
1948 | start, &private_failure); | ||
1949 | if (ret == 0) { | ||
1950 | failure = (struct io_failure_record *)(unsigned long) | ||
1951 | private_failure; | ||
1952 | set_state_private(&BTRFS_I(inode)->io_failure_tree, | ||
1953 | failure->start, 0); | ||
1954 | clear_extent_bits(&BTRFS_I(inode)->io_failure_tree, | ||
1955 | failure->start, | ||
1956 | failure->start + failure->len - 1, | ||
1957 | EXTENT_DIRTY | EXTENT_LOCKED, | ||
1958 | GFP_NOFS); | ||
1959 | kfree(failure); | ||
1960 | } | ||
1961 | } | ||
1962 | return 0; | ||
1963 | } | ||
1964 | |||
1965 | /* | ||
1966 | * when reads are done, we need to check csums to verify the data is correct | 1828 | * when reads are done, we need to check csums to verify the data is correct |
1967 | * if there's a match, we allow the bio to finish. If not, we go through | 1829 | * if there's a match, we allow the bio to finish. If not, the code in |
1968 | * the io_failure_record routines to find good copies | 1830 | * extent_io.c will try to find good copies for us. |
1969 | */ | 1831 | */ |
1970 | static int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end, | 1832 | static int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end, |
1971 | struct extent_state *state) | 1833 | struct extent_state *state) |
@@ -2011,10 +1873,6 @@ static int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end, | |||
2011 | 1873 | ||
2012 | kunmap_atomic(kaddr, KM_USER0); | 1874 | kunmap_atomic(kaddr, KM_USER0); |
2013 | good: | 1875 | good: |
2014 | /* if the io failure tree for this inode is non-empty, | ||
2015 | * check to see if we've recovered from a failed IO | ||
2016 | */ | ||
2017 | btrfs_clean_io_failures(inode, start); | ||
2018 | return 0; | 1876 | return 0; |
2019 | 1877 | ||
2020 | zeroit: | 1878 | zeroit: |
@@ -2079,89 +1937,6 @@ void btrfs_run_delayed_iputs(struct btrfs_root *root) | |||
2079 | up_read(&root->fs_info->cleanup_work_sem); | 1937 | up_read(&root->fs_info->cleanup_work_sem); |
2080 | } | 1938 | } |
2081 | 1939 | ||
2082 | /* | ||
2083 | * calculate extra metadata reservation when snapshotting a subvolume | ||
2084 | * contains orphan files. | ||
2085 | */ | ||
2086 | void btrfs_orphan_pre_snapshot(struct btrfs_trans_handle *trans, | ||
2087 | struct btrfs_pending_snapshot *pending, | ||
2088 | u64 *bytes_to_reserve) | ||
2089 | { | ||
2090 | struct btrfs_root *root; | ||
2091 | struct btrfs_block_rsv *block_rsv; | ||
2092 | u64 num_bytes; | ||
2093 | int index; | ||
2094 | |||
2095 | root = pending->root; | ||
2096 | if (!root->orphan_block_rsv || list_empty(&root->orphan_list)) | ||
2097 | return; | ||
2098 | |||
2099 | block_rsv = root->orphan_block_rsv; | ||
2100 | |||
2101 | /* orphan block reservation for the snapshot */ | ||
2102 | num_bytes = block_rsv->size; | ||
2103 | |||
2104 | /* | ||
2105 | * after the snapshot is created, COWing tree blocks may use more | ||
2106 | * space than it frees. So we should make sure there is enough | ||
2107 | * reserved space. | ||
2108 | */ | ||
2109 | index = trans->transid & 0x1; | ||
2110 | if (block_rsv->reserved + block_rsv->freed[index] < block_rsv->size) { | ||
2111 | num_bytes += block_rsv->size - | ||
2112 | (block_rsv->reserved + block_rsv->freed[index]); | ||
2113 | } | ||
2114 | |||
2115 | *bytes_to_reserve += num_bytes; | ||
2116 | } | ||
2117 | |||
2118 | void btrfs_orphan_post_snapshot(struct btrfs_trans_handle *trans, | ||
2119 | struct btrfs_pending_snapshot *pending) | ||
2120 | { | ||
2121 | struct btrfs_root *root = pending->root; | ||
2122 | struct btrfs_root *snap = pending->snap; | ||
2123 | struct btrfs_block_rsv *block_rsv; | ||
2124 | u64 num_bytes; | ||
2125 | int index; | ||
2126 | int ret; | ||
2127 | |||
2128 | if (!root->orphan_block_rsv || list_empty(&root->orphan_list)) | ||
2129 | return; | ||
2130 | |||
2131 | /* refill source subvolume's orphan block reservation */ | ||
2132 | block_rsv = root->orphan_block_rsv; | ||
2133 | index = trans->transid & 0x1; | ||
2134 | if (block_rsv->reserved + block_rsv->freed[index] < block_rsv->size) { | ||
2135 | num_bytes = block_rsv->size - | ||
2136 | (block_rsv->reserved + block_rsv->freed[index]); | ||
2137 | ret = btrfs_block_rsv_migrate(&pending->block_rsv, | ||
2138 | root->orphan_block_rsv, | ||
2139 | num_bytes); | ||
2140 | BUG_ON(ret); | ||
2141 | } | ||
2142 | |||
2143 | /* setup orphan block reservation for the snapshot */ | ||
2144 | block_rsv = btrfs_alloc_block_rsv(snap); | ||
2145 | BUG_ON(!block_rsv); | ||
2146 | |||
2147 | btrfs_add_durable_block_rsv(root->fs_info, block_rsv); | ||
2148 | snap->orphan_block_rsv = block_rsv; | ||
2149 | |||
2150 | num_bytes = root->orphan_block_rsv->size; | ||
2151 | ret = btrfs_block_rsv_migrate(&pending->block_rsv, | ||
2152 | block_rsv, num_bytes); | ||
2153 | BUG_ON(ret); | ||
2154 | |||
2155 | #if 0 | ||
2156 | /* insert orphan item for the snapshot */ | ||
2157 | WARN_ON(!root->orphan_item_inserted); | ||
2158 | ret = btrfs_insert_orphan_item(trans, root->fs_info->tree_root, | ||
2159 | snap->root_key.objectid); | ||
2160 | BUG_ON(ret); | ||
2161 | snap->orphan_item_inserted = 1; | ||
2162 | #endif | ||
2163 | } | ||
2164 | |||
2165 | enum btrfs_orphan_cleanup_state { | 1940 | enum btrfs_orphan_cleanup_state { |
2166 | ORPHAN_CLEANUP_STARTED = 1, | 1941 | ORPHAN_CLEANUP_STARTED = 1, |
2167 | ORPHAN_CLEANUP_DONE = 2, | 1942 | ORPHAN_CLEANUP_DONE = 2, |
@@ -2247,9 +2022,6 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode) | |||
2247 | } | 2022 | } |
2248 | spin_unlock(&root->orphan_lock); | 2023 | spin_unlock(&root->orphan_lock); |
2249 | 2024 | ||
2250 | if (block_rsv) | ||
2251 | btrfs_add_durable_block_rsv(root->fs_info, block_rsv); | ||
2252 | |||
2253 | /* grab metadata reservation from transaction handle */ | 2025 | /* grab metadata reservation from transaction handle */ |
2254 | if (reserve) { | 2026 | if (reserve) { |
2255 | ret = btrfs_orphan_reserve_metadata(trans, inode); | 2027 | ret = btrfs_orphan_reserve_metadata(trans, inode); |
@@ -2316,6 +2088,7 @@ int btrfs_orphan_cleanup(struct btrfs_root *root) | |||
2316 | struct btrfs_key key, found_key; | 2088 | struct btrfs_key key, found_key; |
2317 | struct btrfs_trans_handle *trans; | 2089 | struct btrfs_trans_handle *trans; |
2318 | struct inode *inode; | 2090 | struct inode *inode; |
2091 | u64 last_objectid = 0; | ||
2319 | int ret = 0, nr_unlink = 0, nr_truncate = 0; | 2092 | int ret = 0, nr_unlink = 0, nr_truncate = 0; |
2320 | 2093 | ||
2321 | if (cmpxchg(&root->orphan_cleanup_state, 0, ORPHAN_CLEANUP_STARTED)) | 2094 | if (cmpxchg(&root->orphan_cleanup_state, 0, ORPHAN_CLEANUP_STARTED)) |
@@ -2367,41 +2140,49 @@ int btrfs_orphan_cleanup(struct btrfs_root *root) | |||
2367 | * crossing root thing. we store the inode number in the | 2140 | * crossing root thing. we store the inode number in the |
2368 | * offset of the orphan item. | 2141 | * offset of the orphan item. |
2369 | */ | 2142 | */ |
2143 | |||
2144 | if (found_key.offset == last_objectid) { | ||
2145 | printk(KERN_ERR "btrfs: Error removing orphan entry, " | ||
2146 | "stopping orphan cleanup\n"); | ||
2147 | ret = -EINVAL; | ||
2148 | goto out; | ||
2149 | } | ||
2150 | |||
2151 | last_objectid = found_key.offset; | ||
2152 | |||
2370 | found_key.objectid = found_key.offset; | 2153 | found_key.objectid = found_key.offset; |
2371 | found_key.type = BTRFS_INODE_ITEM_KEY; | 2154 | found_key.type = BTRFS_INODE_ITEM_KEY; |
2372 | found_key.offset = 0; | 2155 | found_key.offset = 0; |
2373 | inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL); | 2156 | inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL); |
2374 | if (IS_ERR(inode)) { | 2157 | ret = PTR_RET(inode); |
2375 | ret = PTR_ERR(inode); | 2158 | if (ret && ret != -ESTALE) |
2376 | goto out; | 2159 | goto out; |
2377 | } | ||
2378 | 2160 | ||
2379 | /* | 2161 | /* |
2380 | * add this inode to the orphan list so btrfs_orphan_del does | 2162 | * Inode is already gone but the orphan item is still there, |
2381 | * the proper thing when we hit it | 2163 | * kill the orphan item. |
2382 | */ | ||
2383 | spin_lock(&root->orphan_lock); | ||
2384 | list_add(&BTRFS_I(inode)->i_orphan, &root->orphan_list); | ||
2385 | spin_unlock(&root->orphan_lock); | ||
2386 | |||
2387 | /* | ||
2388 | * if this is a bad inode, means we actually succeeded in | ||
2389 | * removing the inode, but not the orphan record, which means | ||
2390 | * we need to manually delete the orphan since iput will just | ||
2391 | * do a destroy_inode | ||
2392 | */ | 2164 | */ |
2393 | if (is_bad_inode(inode)) { | 2165 | if (ret == -ESTALE) { |
2394 | trans = btrfs_start_transaction(root, 0); | 2166 | trans = btrfs_start_transaction(root, 1); |
2395 | if (IS_ERR(trans)) { | 2167 | if (IS_ERR(trans)) { |
2396 | ret = PTR_ERR(trans); | 2168 | ret = PTR_ERR(trans); |
2397 | goto out; | 2169 | goto out; |
2398 | } | 2170 | } |
2399 | btrfs_orphan_del(trans, inode); | 2171 | ret = btrfs_del_orphan_item(trans, root, |
2172 | found_key.objectid); | ||
2173 | BUG_ON(ret); | ||
2400 | btrfs_end_transaction(trans, root); | 2174 | btrfs_end_transaction(trans, root); |
2401 | iput(inode); | ||
2402 | continue; | 2175 | continue; |
2403 | } | 2176 | } |
2404 | 2177 | ||
2178 | /* | ||
2179 | * add this inode to the orphan list so btrfs_orphan_del does | ||
2180 | * the proper thing when we hit it | ||
2181 | */ | ||
2182 | spin_lock(&root->orphan_lock); | ||
2183 | list_add(&BTRFS_I(inode)->i_orphan, &root->orphan_list); | ||
2184 | spin_unlock(&root->orphan_lock); | ||
2185 | |||
2405 | /* if we have links, this was a truncate, lets do that */ | 2186 | /* if we have links, this was a truncate, lets do that */ |
2406 | if (inode->i_nlink) { | 2187 | if (inode->i_nlink) { |
2407 | if (!S_ISREG(inode->i_mode)) { | 2188 | if (!S_ISREG(inode->i_mode)) { |
@@ -2420,6 +2201,9 @@ int btrfs_orphan_cleanup(struct btrfs_root *root) | |||
2420 | if (ret) | 2201 | if (ret) |
2421 | goto out; | 2202 | goto out; |
2422 | } | 2203 | } |
2204 | /* release the path since we're done with it */ | ||
2205 | btrfs_release_path(path); | ||
2206 | |||
2423 | root->orphan_cleanup_state = ORPHAN_CLEANUP_DONE; | 2207 | root->orphan_cleanup_state = ORPHAN_CLEANUP_DONE; |
2424 | 2208 | ||
2425 | if (root->orphan_block_rsv) | 2209 | if (root->orphan_block_rsv) |
@@ -2534,7 +2318,7 @@ static void btrfs_read_locked_inode(struct inode *inode) | |||
2534 | inode_item = btrfs_item_ptr(leaf, path->slots[0], | 2318 | inode_item = btrfs_item_ptr(leaf, path->slots[0], |
2535 | struct btrfs_inode_item); | 2319 | struct btrfs_inode_item); |
2536 | inode->i_mode = btrfs_inode_mode(leaf, inode_item); | 2320 | inode->i_mode = btrfs_inode_mode(leaf, inode_item); |
2537 | inode->i_nlink = btrfs_inode_nlink(leaf, inode_item); | 2321 | set_nlink(inode, btrfs_inode_nlink(leaf, inode_item)); |
2538 | inode->i_uid = btrfs_inode_uid(leaf, inode_item); | 2322 | inode->i_uid = btrfs_inode_uid(leaf, inode_item); |
2539 | inode->i_gid = btrfs_inode_gid(leaf, inode_item); | 2323 | inode->i_gid = btrfs_inode_gid(leaf, inode_item); |
2540 | btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item)); | 2324 | btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item)); |
@@ -2647,7 +2431,7 @@ static void fill_inode_item(struct btrfs_trans_handle *trans, | |||
2647 | /* | 2431 | /* |
2648 | * copy everything in the in-memory inode into the btree. | 2432 | * copy everything in the in-memory inode into the btree. |
2649 | */ | 2433 | */ |
2650 | noinline int btrfs_update_inode(struct btrfs_trans_handle *trans, | 2434 | static noinline int btrfs_update_inode_item(struct btrfs_trans_handle *trans, |
2651 | struct btrfs_root *root, struct inode *inode) | 2435 | struct btrfs_root *root, struct inode *inode) |
2652 | { | 2436 | { |
2653 | struct btrfs_inode_item *inode_item; | 2437 | struct btrfs_inode_item *inode_item; |
@@ -2655,21 +2439,6 @@ noinline int btrfs_update_inode(struct btrfs_trans_handle *trans, | |||
2655 | struct extent_buffer *leaf; | 2439 | struct extent_buffer *leaf; |
2656 | int ret; | 2440 | int ret; |
2657 | 2441 | ||
2658 | /* | ||
2659 | * If the inode is a free space inode, we can deadlock during commit | ||
2660 | * if we put it into the delayed code. | ||
2661 | * | ||
2662 | * The data relocation inode should also be directly updated | ||
2663 | * without delay | ||
2664 | */ | ||
2665 | if (!btrfs_is_free_space_inode(root, inode) | ||
2666 | && root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID) { | ||
2667 | ret = btrfs_delayed_update_inode(trans, root, inode); | ||
2668 | if (!ret) | ||
2669 | btrfs_set_inode_last_trans(trans, inode); | ||
2670 | return ret; | ||
2671 | } | ||
2672 | |||
2673 | path = btrfs_alloc_path(); | 2442 | path = btrfs_alloc_path(); |
2674 | if (!path) | 2443 | if (!path) |
2675 | return -ENOMEM; | 2444 | return -ENOMEM; |
@@ -2698,6 +2467,43 @@ failed: | |||
2698 | } | 2467 | } |
2699 | 2468 | ||
2700 | /* | 2469 | /* |
2470 | * copy everything in the in-memory inode into the btree. | ||
2471 | */ | ||
2472 | noinline int btrfs_update_inode(struct btrfs_trans_handle *trans, | ||
2473 | struct btrfs_root *root, struct inode *inode) | ||
2474 | { | ||
2475 | int ret; | ||
2476 | |||
2477 | /* | ||
2478 | * If the inode is a free space inode, we can deadlock during commit | ||
2479 | * if we put it into the delayed code. | ||
2480 | * | ||
2481 | * The data relocation inode should also be directly updated | ||
2482 | * without delay | ||
2483 | */ | ||
2484 | if (!btrfs_is_free_space_inode(root, inode) | ||
2485 | && root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID) { | ||
2486 | ret = btrfs_delayed_update_inode(trans, root, inode); | ||
2487 | if (!ret) | ||
2488 | btrfs_set_inode_last_trans(trans, inode); | ||
2489 | return ret; | ||
2490 | } | ||
2491 | |||
2492 | return btrfs_update_inode_item(trans, root, inode); | ||
2493 | } | ||
2494 | |||
2495 | static noinline int btrfs_update_inode_fallback(struct btrfs_trans_handle *trans, | ||
2496 | struct btrfs_root *root, struct inode *inode) | ||
2497 | { | ||
2498 | int ret; | ||
2499 | |||
2500 | ret = btrfs_update_inode(trans, root, inode); | ||
2501 | if (ret == -ENOSPC) | ||
2502 | return btrfs_update_inode_item(trans, root, inode); | ||
2503 | return ret; | ||
2504 | } | ||
2505 | |||
2506 | /* | ||
2701 | * unlink helper that gets used here in inode.c and in the tree logging | 2507 | * unlink helper that gets used here in inode.c and in the tree logging |
2702 | * recovery code. It remove a link in a directory with a given name, and | 2508 | * recovery code. It remove a link in a directory with a given name, and |
2703 | * also drops the back refs in the inode to the directory | 2509 | * also drops the back refs in the inode to the directory |
@@ -2835,7 +2641,16 @@ static struct btrfs_trans_handle *__unlink_start_trans(struct inode *dir, | |||
2835 | u64 ino = btrfs_ino(inode); | 2641 | u64 ino = btrfs_ino(inode); |
2836 | u64 dir_ino = btrfs_ino(dir); | 2642 | u64 dir_ino = btrfs_ino(dir); |
2837 | 2643 | ||
2838 | trans = btrfs_start_transaction(root, 10); | 2644 | /* |
2645 | * 1 for the possible orphan item | ||
2646 | * 1 for the dir item | ||
2647 | * 1 for the dir index | ||
2648 | * 1 for the inode ref | ||
2649 | * 1 for the inode ref in the tree log | ||
2650 | * 2 for the dir entries in the log | ||
2651 | * 1 for the inode | ||
2652 | */ | ||
2653 | trans = btrfs_start_transaction(root, 8); | ||
2839 | if (!IS_ERR(trans) || PTR_ERR(trans) != -ENOSPC) | 2654 | if (!IS_ERR(trans) || PTR_ERR(trans) != -ENOSPC) |
2840 | return trans; | 2655 | return trans; |
2841 | 2656 | ||
@@ -2858,7 +2673,8 @@ static struct btrfs_trans_handle *__unlink_start_trans(struct inode *dir, | |||
2858 | return ERR_PTR(-ENOMEM); | 2673 | return ERR_PTR(-ENOMEM); |
2859 | } | 2674 | } |
2860 | 2675 | ||
2861 | trans = btrfs_start_transaction(root, 0); | 2676 | /* 1 for the orphan item */ |
2677 | trans = btrfs_start_transaction(root, 1); | ||
2862 | if (IS_ERR(trans)) { | 2678 | if (IS_ERR(trans)) { |
2863 | btrfs_free_path(path); | 2679 | btrfs_free_path(path); |
2864 | root->fs_info->enospc_unlink = 0; | 2680 | root->fs_info->enospc_unlink = 0; |
@@ -2963,6 +2779,12 @@ static struct btrfs_trans_handle *__unlink_start_trans(struct inode *dir, | |||
2963 | err = 0; | 2779 | err = 0; |
2964 | out: | 2780 | out: |
2965 | btrfs_free_path(path); | 2781 | btrfs_free_path(path); |
2782 | /* Migrate the orphan reservation over */ | ||
2783 | if (!err) | ||
2784 | err = btrfs_block_rsv_migrate(trans->block_rsv, | ||
2785 | &root->fs_info->global_block_rsv, | ||
2786 | trans->bytes_reserved); | ||
2787 | |||
2966 | if (err) { | 2788 | if (err) { |
2967 | btrfs_end_transaction(trans, root); | 2789 | btrfs_end_transaction(trans, root); |
2968 | root->fs_info->enospc_unlink = 0; | 2790 | root->fs_info->enospc_unlink = 0; |
@@ -2977,6 +2799,9 @@ static void __unlink_end_trans(struct btrfs_trans_handle *trans, | |||
2977 | struct btrfs_root *root) | 2799 | struct btrfs_root *root) |
2978 | { | 2800 | { |
2979 | if (trans->block_rsv == &root->fs_info->global_block_rsv) { | 2801 | if (trans->block_rsv == &root->fs_info->global_block_rsv) { |
2802 | btrfs_block_rsv_release(root, trans->block_rsv, | ||
2803 | trans->bytes_reserved); | ||
2804 | trans->block_rsv = &root->fs_info->trans_block_rsv; | ||
2980 | BUG_ON(!root->fs_info->enospc_unlink); | 2805 | BUG_ON(!root->fs_info->enospc_unlink); |
2981 | root->fs_info->enospc_unlink = 0; | 2806 | root->fs_info->enospc_unlink = 0; |
2982 | } | 2807 | } |
@@ -3368,6 +3193,7 @@ static int btrfs_truncate_page(struct address_space *mapping, loff_t from) | |||
3368 | pgoff_t index = from >> PAGE_CACHE_SHIFT; | 3193 | pgoff_t index = from >> PAGE_CACHE_SHIFT; |
3369 | unsigned offset = from & (PAGE_CACHE_SIZE-1); | 3194 | unsigned offset = from & (PAGE_CACHE_SIZE-1); |
3370 | struct page *page; | 3195 | struct page *page; |
3196 | gfp_t mask = btrfs_alloc_write_mask(mapping); | ||
3371 | int ret = 0; | 3197 | int ret = 0; |
3372 | u64 page_start; | 3198 | u64 page_start; |
3373 | u64 page_end; | 3199 | u64 page_end; |
@@ -3380,7 +3206,7 @@ static int btrfs_truncate_page(struct address_space *mapping, loff_t from) | |||
3380 | 3206 | ||
3381 | ret = -ENOMEM; | 3207 | ret = -ENOMEM; |
3382 | again: | 3208 | again: |
3383 | page = find_or_create_page(mapping, index, GFP_NOFS); | 3209 | page = find_or_create_page(mapping, index, mask); |
3384 | if (!page) { | 3210 | if (!page) { |
3385 | btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE); | 3211 | btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE); |
3386 | goto out; | 3212 | goto out; |
@@ -3510,15 +3336,19 @@ int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size) | |||
3510 | err = btrfs_drop_extents(trans, inode, cur_offset, | 3336 | err = btrfs_drop_extents(trans, inode, cur_offset, |
3511 | cur_offset + hole_size, | 3337 | cur_offset + hole_size, |
3512 | &hint_byte, 1); | 3338 | &hint_byte, 1); |
3513 | if (err) | 3339 | if (err) { |
3340 | btrfs_end_transaction(trans, root); | ||
3514 | break; | 3341 | break; |
3342 | } | ||
3515 | 3343 | ||
3516 | err = btrfs_insert_file_extent(trans, root, | 3344 | err = btrfs_insert_file_extent(trans, root, |
3517 | btrfs_ino(inode), cur_offset, 0, | 3345 | btrfs_ino(inode), cur_offset, 0, |
3518 | 0, hole_size, 0, hole_size, | 3346 | 0, hole_size, 0, hole_size, |
3519 | 0, 0, 0); | 3347 | 0, 0, 0); |
3520 | if (err) | 3348 | if (err) { |
3349 | btrfs_end_transaction(trans, root); | ||
3521 | break; | 3350 | break; |
3351 | } | ||
3522 | 3352 | ||
3523 | btrfs_drop_extent_cache(inode, hole_start, | 3353 | btrfs_drop_extent_cache(inode, hole_start, |
3524 | last_byte - 1, 0); | 3354 | last_byte - 1, 0); |
@@ -3609,6 +3439,8 @@ void btrfs_evict_inode(struct inode *inode) | |||
3609 | { | 3439 | { |
3610 | struct btrfs_trans_handle *trans; | 3440 | struct btrfs_trans_handle *trans; |
3611 | struct btrfs_root *root = BTRFS_I(inode)->root; | 3441 | struct btrfs_root *root = BTRFS_I(inode)->root; |
3442 | struct btrfs_block_rsv *rsv, *global_rsv; | ||
3443 | u64 min_size = btrfs_calc_trunc_metadata_size(root, 1); | ||
3612 | unsigned long nr; | 3444 | unsigned long nr; |
3613 | int ret; | 3445 | int ret; |
3614 | 3446 | ||
@@ -3636,22 +3468,55 @@ void btrfs_evict_inode(struct inode *inode) | |||
3636 | goto no_delete; | 3468 | goto no_delete; |
3637 | } | 3469 | } |
3638 | 3470 | ||
3471 | rsv = btrfs_alloc_block_rsv(root); | ||
3472 | if (!rsv) { | ||
3473 | btrfs_orphan_del(NULL, inode); | ||
3474 | goto no_delete; | ||
3475 | } | ||
3476 | rsv->size = min_size; | ||
3477 | global_rsv = &root->fs_info->global_block_rsv; | ||
3478 | |||
3639 | btrfs_i_size_write(inode, 0); | 3479 | btrfs_i_size_write(inode, 0); |
3640 | 3480 | ||
3481 | /* | ||
3482 | * This is a bit simpler than btrfs_truncate since | ||
3483 | * | ||
3484 | * 1) We've already reserved our space for our orphan item in the | ||
3485 | * unlink. | ||
3486 | * 2) We're going to delete the inode item, so we don't need to update | ||
3487 | * it at all. | ||
3488 | * | ||
3489 | * So we just need to reserve some slack space in case we add bytes when | ||
3490 | * doing the truncate. | ||
3491 | */ | ||
3641 | while (1) { | 3492 | while (1) { |
3642 | trans = btrfs_join_transaction(root); | 3493 | ret = btrfs_block_rsv_refill(root, rsv, min_size); |
3643 | BUG_ON(IS_ERR(trans)); | 3494 | |
3644 | trans->block_rsv = root->orphan_block_rsv; | 3495 | /* |
3496 | * Try and steal from the global reserve since we will | ||
3497 | * likely not use this space anyway, we want to try as | ||
3498 | * hard as possible to get this to work. | ||
3499 | */ | ||
3500 | if (ret) | ||
3501 | ret = btrfs_block_rsv_migrate(global_rsv, rsv, min_size); | ||
3645 | 3502 | ||
3646 | ret = btrfs_block_rsv_check(trans, root, | ||
3647 | root->orphan_block_rsv, 0, 5); | ||
3648 | if (ret) { | 3503 | if (ret) { |
3649 | BUG_ON(ret != -EAGAIN); | 3504 | printk(KERN_WARNING "Could not get space for a " |
3650 | ret = btrfs_commit_transaction(trans, root); | 3505 | "delete, will truncate on mount %d\n", ret); |
3651 | BUG_ON(ret); | 3506 | btrfs_orphan_del(NULL, inode); |
3652 | continue; | 3507 | btrfs_free_block_rsv(root, rsv); |
3508 | goto no_delete; | ||
3653 | } | 3509 | } |
3654 | 3510 | ||
3511 | trans = btrfs_start_transaction(root, 0); | ||
3512 | if (IS_ERR(trans)) { | ||
3513 | btrfs_orphan_del(NULL, inode); | ||
3514 | btrfs_free_block_rsv(root, rsv); | ||
3515 | goto no_delete; | ||
3516 | } | ||
3517 | |||
3518 | trans->block_rsv = rsv; | ||
3519 | |||
3655 | ret = btrfs_truncate_inode_items(trans, root, inode, 0, 0); | 3520 | ret = btrfs_truncate_inode_items(trans, root, inode, 0, 0); |
3656 | if (ret != -EAGAIN) | 3521 | if (ret != -EAGAIN) |
3657 | break; | 3522 | break; |
@@ -3660,14 +3525,17 @@ void btrfs_evict_inode(struct inode *inode) | |||
3660 | btrfs_end_transaction(trans, root); | 3525 | btrfs_end_transaction(trans, root); |
3661 | trans = NULL; | 3526 | trans = NULL; |
3662 | btrfs_btree_balance_dirty(root, nr); | 3527 | btrfs_btree_balance_dirty(root, nr); |
3663 | |||
3664 | } | 3528 | } |
3665 | 3529 | ||
3530 | btrfs_free_block_rsv(root, rsv); | ||
3531 | |||
3666 | if (ret == 0) { | 3532 | if (ret == 0) { |
3533 | trans->block_rsv = root->orphan_block_rsv; | ||
3667 | ret = btrfs_orphan_del(trans, inode); | 3534 | ret = btrfs_orphan_del(trans, inode); |
3668 | BUG_ON(ret); | 3535 | BUG_ON(ret); |
3669 | } | 3536 | } |
3670 | 3537 | ||
3538 | trans->block_rsv = &root->fs_info->trans_block_rsv; | ||
3671 | if (!(root == root->fs_info->tree_root || | 3539 | if (!(root == root->fs_info->tree_root || |
3672 | root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)) | 3540 | root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)) |
3673 | btrfs_return_ino(root, btrfs_ino(inode)); | 3541 | btrfs_return_ino(root, btrfs_ino(inode)); |
@@ -3952,7 +3820,6 @@ struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location, | |||
3952 | struct btrfs_root *root, int *new) | 3820 | struct btrfs_root *root, int *new) |
3953 | { | 3821 | { |
3954 | struct inode *inode; | 3822 | struct inode *inode; |
3955 | int bad_inode = 0; | ||
3956 | 3823 | ||
3957 | inode = btrfs_iget_locked(s, location->objectid, root); | 3824 | inode = btrfs_iget_locked(s, location->objectid, root); |
3958 | if (!inode) | 3825 | if (!inode) |
@@ -3968,15 +3835,12 @@ struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location, | |||
3968 | if (new) | 3835 | if (new) |
3969 | *new = 1; | 3836 | *new = 1; |
3970 | } else { | 3837 | } else { |
3971 | bad_inode = 1; | 3838 | unlock_new_inode(inode); |
3839 | iput(inode); | ||
3840 | inode = ERR_PTR(-ESTALE); | ||
3972 | } | 3841 | } |
3973 | } | 3842 | } |
3974 | 3843 | ||
3975 | if (bad_inode) { | ||
3976 | iput(inode); | ||
3977 | inode = ERR_PTR(-ESTALE); | ||
3978 | } | ||
3979 | |||
3980 | return inode; | 3844 | return inode; |
3981 | } | 3845 | } |
3982 | 3846 | ||
@@ -4018,7 +3882,8 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry) | |||
4018 | memcpy(&location, dentry->d_fsdata, sizeof(struct btrfs_key)); | 3882 | memcpy(&location, dentry->d_fsdata, sizeof(struct btrfs_key)); |
4019 | kfree(dentry->d_fsdata); | 3883 | kfree(dentry->d_fsdata); |
4020 | dentry->d_fsdata = NULL; | 3884 | dentry->d_fsdata = NULL; |
4021 | d_clear_need_lookup(dentry); | 3885 | /* This thing is hashed, drop it for now */ |
3886 | d_drop(dentry); | ||
4022 | } else { | 3887 | } else { |
4023 | ret = btrfs_inode_by_name(dir, dentry, &location); | 3888 | ret = btrfs_inode_by_name(dir, dentry, &location); |
4024 | } | 3889 | } |
@@ -4085,7 +3950,15 @@ static void btrfs_dentry_release(struct dentry *dentry) | |||
4085 | static struct dentry *btrfs_lookup(struct inode *dir, struct dentry *dentry, | 3950 | static struct dentry *btrfs_lookup(struct inode *dir, struct dentry *dentry, |
4086 | struct nameidata *nd) | 3951 | struct nameidata *nd) |
4087 | { | 3952 | { |
4088 | return d_splice_alias(btrfs_lookup_dentry(dir, dentry), dentry); | 3953 | struct dentry *ret; |
3954 | |||
3955 | ret = d_splice_alias(btrfs_lookup_dentry(dir, dentry), dentry); | ||
3956 | if (unlikely(d_need_lookup(dentry))) { | ||
3957 | spin_lock(&dentry->d_lock); | ||
3958 | dentry->d_flags &= ~DCACHE_NEED_LOOKUP; | ||
3959 | spin_unlock(&dentry->d_lock); | ||
3960 | } | ||
3961 | return ret; | ||
4089 | } | 3962 | } |
4090 | 3963 | ||
4091 | unsigned char btrfs_filetype_table[] = { | 3964 | unsigned char btrfs_filetype_table[] = { |
@@ -4125,7 +3998,8 @@ static int btrfs_real_readdir(struct file *filp, void *dirent, | |||
4125 | 3998 | ||
4126 | /* special case for "." */ | 3999 | /* special case for "." */ |
4127 | if (filp->f_pos == 0) { | 4000 | if (filp->f_pos == 0) { |
4128 | over = filldir(dirent, ".", 1, 1, btrfs_ino(inode), DT_DIR); | 4001 | over = filldir(dirent, ".", 1, |
4002 | filp->f_pos, btrfs_ino(inode), DT_DIR); | ||
4129 | if (over) | 4003 | if (over) |
4130 | return 0; | 4004 | return 0; |
4131 | filp->f_pos = 1; | 4005 | filp->f_pos = 1; |
@@ -4134,7 +4008,7 @@ static int btrfs_real_readdir(struct file *filp, void *dirent, | |||
4134 | if (filp->f_pos == 1) { | 4008 | if (filp->f_pos == 1) { |
4135 | u64 pino = parent_ino(filp->f_path.dentry); | 4009 | u64 pino = parent_ino(filp->f_path.dentry); |
4136 | over = filldir(dirent, "..", 2, | 4010 | over = filldir(dirent, "..", 2, |
4137 | 2, pino, DT_DIR); | 4011 | filp->f_pos, pino, DT_DIR); |
4138 | if (over) | 4012 | if (over) |
4139 | return 0; | 4013 | return 0; |
4140 | filp->f_pos = 2; | 4014 | filp->f_pos = 2; |
@@ -5785,8 +5659,7 @@ again: | |||
5785 | if (test_bit(BTRFS_ORDERED_NOCOW, &ordered->flags)) { | 5659 | if (test_bit(BTRFS_ORDERED_NOCOW, &ordered->flags)) { |
5786 | ret = btrfs_ordered_update_i_size(inode, 0, ordered); | 5660 | ret = btrfs_ordered_update_i_size(inode, 0, ordered); |
5787 | if (!ret) | 5661 | if (!ret) |
5788 | ret = btrfs_update_inode(trans, root, inode); | 5662 | err = btrfs_update_inode_fallback(trans, root, inode); |
5789 | err = ret; | ||
5790 | goto out; | 5663 | goto out; |
5791 | } | 5664 | } |
5792 | 5665 | ||
@@ -5823,8 +5696,8 @@ again: | |||
5823 | 5696 | ||
5824 | add_pending_csums(trans, inode, ordered->file_offset, &ordered->list); | 5697 | add_pending_csums(trans, inode, ordered->file_offset, &ordered->list); |
5825 | ret = btrfs_ordered_update_i_size(inode, 0, ordered); | 5698 | ret = btrfs_ordered_update_i_size(inode, 0, ordered); |
5826 | if (!ret) | 5699 | if (!ret || !test_bit(BTRFS_ORDERED_PREALLOC, &ordered->flags)) |
5827 | btrfs_update_inode(trans, root, inode); | 5700 | btrfs_update_inode_fallback(trans, root, inode); |
5828 | ret = 0; | 5701 | ret = 0; |
5829 | out_unlock: | 5702 | out_unlock: |
5830 | unlock_extent_cached(&BTRFS_I(inode)->io_tree, ordered->file_offset, | 5703 | unlock_extent_cached(&BTRFS_I(inode)->io_tree, ordered->file_offset, |
@@ -6279,7 +6152,7 @@ int btrfs_readpage(struct file *file, struct page *page) | |||
6279 | { | 6152 | { |
6280 | struct extent_io_tree *tree; | 6153 | struct extent_io_tree *tree; |
6281 | tree = &BTRFS_I(page->mapping->host)->io_tree; | 6154 | tree = &BTRFS_I(page->mapping->host)->io_tree; |
6282 | return extent_read_full_page(tree, page, btrfs_get_extent); | 6155 | return extent_read_full_page(tree, page, btrfs_get_extent, 0); |
6283 | } | 6156 | } |
6284 | 6157 | ||
6285 | static int btrfs_writepage(struct page *page, struct writeback_control *wbc) | 6158 | static int btrfs_writepage(struct page *page, struct writeback_control *wbc) |
@@ -6531,6 +6404,7 @@ static int btrfs_truncate(struct inode *inode) | |||
6531 | struct btrfs_trans_handle *trans; | 6404 | struct btrfs_trans_handle *trans; |
6532 | unsigned long nr; | 6405 | unsigned long nr; |
6533 | u64 mask = root->sectorsize - 1; | 6406 | u64 mask = root->sectorsize - 1; |
6407 | u64 min_size = btrfs_calc_trunc_metadata_size(root, 1); | ||
6534 | 6408 | ||
6535 | ret = btrfs_truncate_page(inode->i_mapping, inode->i_size); | 6409 | ret = btrfs_truncate_page(inode->i_mapping, inode->i_size); |
6536 | if (ret) | 6410 | if (ret) |
@@ -6578,19 +6452,23 @@ static int btrfs_truncate(struct inode *inode) | |||
6578 | rsv = btrfs_alloc_block_rsv(root); | 6452 | rsv = btrfs_alloc_block_rsv(root); |
6579 | if (!rsv) | 6453 | if (!rsv) |
6580 | return -ENOMEM; | 6454 | return -ENOMEM; |
6581 | btrfs_add_durable_block_rsv(root->fs_info, rsv); | 6455 | rsv->size = min_size; |
6582 | 6456 | ||
6457 | /* | ||
6458 | * 1 for the truncate slack space | ||
6459 | * 1 for the orphan item we're going to add | ||
6460 | * 1 for the orphan item deletion | ||
6461 | * 1 for updating the inode. | ||
6462 | */ | ||
6583 | trans = btrfs_start_transaction(root, 4); | 6463 | trans = btrfs_start_transaction(root, 4); |
6584 | if (IS_ERR(trans)) { | 6464 | if (IS_ERR(trans)) { |
6585 | err = PTR_ERR(trans); | 6465 | err = PTR_ERR(trans); |
6586 | goto out; | 6466 | goto out; |
6587 | } | 6467 | } |
6588 | 6468 | ||
6589 | /* | 6469 | /* Migrate the slack space for the truncate to our reserve */ |
6590 | * Reserve space for the truncate process. Truncate should be adding | 6470 | ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv, |
6591 | * space, but if there are snapshots it may end up using space. | 6471 | min_size); |
6592 | */ | ||
6593 | ret = btrfs_truncate_reserve_metadata(trans, root, rsv); | ||
6594 | BUG_ON(ret); | 6472 | BUG_ON(ret); |
6595 | 6473 | ||
6596 | ret = btrfs_orphan_add(trans, inode); | 6474 | ret = btrfs_orphan_add(trans, inode); |
@@ -6599,21 +6477,6 @@ static int btrfs_truncate(struct inode *inode) | |||
6599 | goto out; | 6477 | goto out; |
6600 | } | 6478 | } |
6601 | 6479 | ||
6602 | nr = trans->blocks_used; | ||
6603 | btrfs_end_transaction(trans, root); | ||
6604 | btrfs_btree_balance_dirty(root, nr); | ||
6605 | |||
6606 | /* | ||
6607 | * Ok so we've already migrated our bytes over for the truncate, so here | ||
6608 | * just reserve the one slot we need for updating the inode. | ||
6609 | */ | ||
6610 | trans = btrfs_start_transaction(root, 1); | ||
6611 | if (IS_ERR(trans)) { | ||
6612 | err = PTR_ERR(trans); | ||
6613 | goto out; | ||
6614 | } | ||
6615 | trans->block_rsv = rsv; | ||
6616 | |||
6617 | /* | 6480 | /* |
6618 | * setattr is responsible for setting the ordered_data_close flag, | 6481 | * setattr is responsible for setting the ordered_data_close flag, |
6619 | * but that is only tested during the last file release. That | 6482 | * but that is only tested during the last file release. That |
@@ -6635,20 +6498,30 @@ static int btrfs_truncate(struct inode *inode) | |||
6635 | btrfs_add_ordered_operation(trans, root, inode); | 6498 | btrfs_add_ordered_operation(trans, root, inode); |
6636 | 6499 | ||
6637 | while (1) { | 6500 | while (1) { |
6501 | ret = btrfs_block_rsv_refill(root, rsv, min_size); | ||
6502 | if (ret) { | ||
6503 | /* | ||
6504 | * This can only happen with the original transaction we | ||
6505 | * started above, every other time we shouldn't have a | ||
6506 | * transaction started yet. | ||
6507 | */ | ||
6508 | if (ret == -EAGAIN) | ||
6509 | goto end_trans; | ||
6510 | err = ret; | ||
6511 | break; | ||
6512 | } | ||
6513 | |||
6638 | if (!trans) { | 6514 | if (!trans) { |
6639 | trans = btrfs_start_transaction(root, 3); | 6515 | /* Just need the 1 for updating the inode */ |
6516 | trans = btrfs_start_transaction(root, 1); | ||
6640 | if (IS_ERR(trans)) { | 6517 | if (IS_ERR(trans)) { |
6641 | err = PTR_ERR(trans); | 6518 | err = PTR_ERR(trans); |
6642 | goto out; | 6519 | goto out; |
6643 | } | 6520 | } |
6644 | |||
6645 | ret = btrfs_truncate_reserve_metadata(trans, root, | ||
6646 | rsv); | ||
6647 | BUG_ON(ret); | ||
6648 | |||
6649 | trans->block_rsv = rsv; | ||
6650 | } | 6521 | } |
6651 | 6522 | ||
6523 | trans->block_rsv = rsv; | ||
6524 | |||
6652 | ret = btrfs_truncate_inode_items(trans, root, inode, | 6525 | ret = btrfs_truncate_inode_items(trans, root, inode, |
6653 | inode->i_size, | 6526 | inode->i_size, |
6654 | BTRFS_EXTENT_DATA_KEY); | 6527 | BTRFS_EXTENT_DATA_KEY); |
@@ -6663,7 +6536,7 @@ static int btrfs_truncate(struct inode *inode) | |||
6663 | err = ret; | 6536 | err = ret; |
6664 | break; | 6537 | break; |
6665 | } | 6538 | } |
6666 | 6539 | end_trans: | |
6667 | nr = trans->blocks_used; | 6540 | nr = trans->blocks_used; |
6668 | btrfs_end_transaction(trans, root); | 6541 | btrfs_end_transaction(trans, root); |
6669 | trans = NULL; | 6542 | trans = NULL; |
@@ -6683,14 +6556,16 @@ static int btrfs_truncate(struct inode *inode) | |||
6683 | ret = btrfs_orphan_del(NULL, inode); | 6556 | ret = btrfs_orphan_del(NULL, inode); |
6684 | } | 6557 | } |
6685 | 6558 | ||
6686 | trans->block_rsv = &root->fs_info->trans_block_rsv; | 6559 | if (trans) { |
6687 | ret = btrfs_update_inode(trans, root, inode); | 6560 | trans->block_rsv = &root->fs_info->trans_block_rsv; |
6688 | if (ret && !err) | 6561 | ret = btrfs_update_inode(trans, root, inode); |
6689 | err = ret; | 6562 | if (ret && !err) |
6563 | err = ret; | ||
6690 | 6564 | ||
6691 | nr = trans->blocks_used; | 6565 | nr = trans->blocks_used; |
6692 | ret = btrfs_end_transaction_throttle(trans, root); | 6566 | ret = btrfs_end_transaction_throttle(trans, root); |
6693 | btrfs_btree_balance_dirty(root, nr); | 6567 | btrfs_btree_balance_dirty(root, nr); |
6568 | } | ||
6694 | 6569 | ||
6695 | out: | 6570 | out: |
6696 | btrfs_free_block_rsv(root, rsv); | 6571 | btrfs_free_block_rsv(root, rsv); |
@@ -6718,7 +6593,7 @@ int btrfs_create_subvol_root(struct btrfs_trans_handle *trans, | |||
6718 | inode->i_op = &btrfs_dir_inode_operations; | 6593 | inode->i_op = &btrfs_dir_inode_operations; |
6719 | inode->i_fop = &btrfs_dir_file_operations; | 6594 | inode->i_fop = &btrfs_dir_file_operations; |
6720 | 6595 | ||
6721 | inode->i_nlink = 1; | 6596 | set_nlink(inode, 1); |
6722 | btrfs_i_size_write(inode, 0); | 6597 | btrfs_i_size_write(inode, 0); |
6723 | 6598 | ||
6724 | err = btrfs_update_inode(trans, new_root, inode); | 6599 | err = btrfs_update_inode(trans, new_root, inode); |
@@ -6745,9 +6620,9 @@ struct inode *btrfs_alloc_inode(struct super_block *sb) | |||
6745 | ei->last_sub_trans = 0; | 6620 | ei->last_sub_trans = 0; |
6746 | ei->logged_trans = 0; | 6621 | ei->logged_trans = 0; |
6747 | ei->delalloc_bytes = 0; | 6622 | ei->delalloc_bytes = 0; |
6748 | ei->reserved_bytes = 0; | ||
6749 | ei->disk_i_size = 0; | 6623 | ei->disk_i_size = 0; |
6750 | ei->flags = 0; | 6624 | ei->flags = 0; |
6625 | ei->csum_bytes = 0; | ||
6751 | ei->index_cnt = (u64)-1; | 6626 | ei->index_cnt = (u64)-1; |
6752 | ei->last_unlink_trans = 0; | 6627 | ei->last_unlink_trans = 0; |
6753 | 6628 | ||
@@ -6759,6 +6634,7 @@ struct inode *btrfs_alloc_inode(struct super_block *sb) | |||
6759 | ei->orphan_meta_reserved = 0; | 6634 | ei->orphan_meta_reserved = 0; |
6760 | ei->dummy_inode = 0; | 6635 | ei->dummy_inode = 0; |
6761 | ei->in_defrag = 0; | 6636 | ei->in_defrag = 0; |
6637 | ei->delalloc_meta_reserved = 0; | ||
6762 | ei->force_compress = BTRFS_COMPRESS_NONE; | 6638 | ei->force_compress = BTRFS_COMPRESS_NONE; |
6763 | 6639 | ||
6764 | ei->delayed_node = NULL; | 6640 | ei->delayed_node = NULL; |
@@ -6793,6 +6669,8 @@ void btrfs_destroy_inode(struct inode *inode) | |||
6793 | WARN_ON(inode->i_data.nrpages); | 6669 | WARN_ON(inode->i_data.nrpages); |
6794 | WARN_ON(BTRFS_I(inode)->outstanding_extents); | 6670 | WARN_ON(BTRFS_I(inode)->outstanding_extents); |
6795 | WARN_ON(BTRFS_I(inode)->reserved_extents); | 6671 | WARN_ON(BTRFS_I(inode)->reserved_extents); |
6672 | WARN_ON(BTRFS_I(inode)->delalloc_bytes); | ||
6673 | WARN_ON(BTRFS_I(inode)->csum_bytes); | ||
6796 | 6674 | ||
6797 | /* | 6675 | /* |
6798 | * This can happen where we create an inode, but somebody else also | 6676 | * This can happen where we create an inode, but somebody else also |
@@ -6916,11 +6794,13 @@ static int btrfs_getattr(struct vfsmount *mnt, | |||
6916 | struct dentry *dentry, struct kstat *stat) | 6794 | struct dentry *dentry, struct kstat *stat) |
6917 | { | 6795 | { |
6918 | struct inode *inode = dentry->d_inode; | 6796 | struct inode *inode = dentry->d_inode; |
6797 | u32 blocksize = inode->i_sb->s_blocksize; | ||
6798 | |||
6919 | generic_fillattr(inode, stat); | 6799 | generic_fillattr(inode, stat); |
6920 | stat->dev = BTRFS_I(inode)->root->anon_dev; | 6800 | stat->dev = BTRFS_I(inode)->root->anon_dev; |
6921 | stat->blksize = PAGE_CACHE_SIZE; | 6801 | stat->blksize = PAGE_CACHE_SIZE; |
6922 | stat->blocks = (inode_get_bytes(inode) + | 6802 | stat->blocks = (ALIGN(inode_get_bytes(inode), blocksize) + |
6923 | BTRFS_I(inode)->delalloc_bytes) >> 9; | 6803 | ALIGN(BTRFS_I(inode)->delalloc_bytes, blocksize)) >> 9; |
6924 | return 0; | 6804 | return 0; |
6925 | } | 6805 | } |
6926 | 6806 | ||
@@ -7410,7 +7290,6 @@ static struct extent_io_ops btrfs_extent_io_ops = { | |||
7410 | .readpage_end_io_hook = btrfs_readpage_end_io_hook, | 7290 | .readpage_end_io_hook = btrfs_readpage_end_io_hook, |
7411 | .writepage_end_io_hook = btrfs_writepage_end_io_hook, | 7291 | .writepage_end_io_hook = btrfs_writepage_end_io_hook, |
7412 | .writepage_start_hook = btrfs_writepage_start_hook, | 7292 | .writepage_start_hook = btrfs_writepage_start_hook, |
7413 | .readpage_io_failed_hook = btrfs_io_failed_hook, | ||
7414 | .set_bit_hook = btrfs_set_bit_hook, | 7293 | .set_bit_hook = btrfs_set_bit_hook, |
7415 | .clear_bit_hook = btrfs_clear_bit_hook, | 7294 | .clear_bit_hook = btrfs_clear_bit_hook, |
7416 | .merge_extent_hook = btrfs_merge_extent_hook, | 7295 | .merge_extent_hook = btrfs_merge_extent_hook, |