diff options
Diffstat (limited to 'fs/ext4/inode.c')
| -rw-r--r-- | fs/ext4/inode.c | 574 |
1 files changed, 499 insertions, 75 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 064746fad581..ec367bce7215 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | #include <linux/namei.h> | 37 | #include <linux/namei.h> |
| 38 | #include <linux/uio.h> | 38 | #include <linux/uio.h> |
| 39 | #include <linux/bio.h> | 39 | #include <linux/bio.h> |
| 40 | #include <linux/workqueue.h> | ||
| 40 | 41 | ||
| 41 | #include "ext4_jbd2.h" | 42 | #include "ext4_jbd2.h" |
| 42 | #include "xattr.h" | 43 | #include "xattr.h" |
| @@ -1145,6 +1146,64 @@ static int check_block_validity(struct inode *inode, const char *msg, | |||
| 1145 | } | 1146 | } |
| 1146 | 1147 | ||
| 1147 | /* | 1148 | /* |
| 1149 | * Return the number of dirty pages in the given inode starting at | ||
| 1150 | * page frame idx. | ||
| 1151 | */ | ||
| 1152 | static pgoff_t ext4_num_dirty_pages(struct inode *inode, pgoff_t idx, | ||
| 1153 | unsigned int max_pages) | ||
| 1154 | { | ||
| 1155 | struct address_space *mapping = inode->i_mapping; | ||
| 1156 | pgoff_t index; | ||
| 1157 | struct pagevec pvec; | ||
| 1158 | pgoff_t num = 0; | ||
| 1159 | int i, nr_pages, done = 0; | ||
| 1160 | |||
| 1161 | if (max_pages == 0) | ||
| 1162 | return 0; | ||
| 1163 | pagevec_init(&pvec, 0); | ||
| 1164 | while (!done) { | ||
| 1165 | index = idx; | ||
| 1166 | nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, | ||
| 1167 | PAGECACHE_TAG_DIRTY, | ||
| 1168 | (pgoff_t)PAGEVEC_SIZE); | ||
| 1169 | if (nr_pages == 0) | ||
| 1170 | break; | ||
| 1171 | for (i = 0; i < nr_pages; i++) { | ||
| 1172 | struct page *page = pvec.pages[i]; | ||
| 1173 | struct buffer_head *bh, *head; | ||
| 1174 | |||
| 1175 | lock_page(page); | ||
| 1176 | if (unlikely(page->mapping != mapping) || | ||
| 1177 | !PageDirty(page) || | ||
| 1178 | PageWriteback(page) || | ||
| 1179 | page->index != idx) { | ||
| 1180 | done = 1; | ||
| 1181 | unlock_page(page); | ||
| 1182 | break; | ||
| 1183 | } | ||
| 1184 | head = page_buffers(page); | ||
| 1185 | bh = head; | ||
| 1186 | do { | ||
| 1187 | if (!buffer_delay(bh) && | ||
| 1188 | !buffer_unwritten(bh)) { | ||
| 1189 | done = 1; | ||
| 1190 | break; | ||
| 1191 | } | ||
| 1192 | } while ((bh = bh->b_this_page) != head); | ||
| 1193 | unlock_page(page); | ||
| 1194 | if (done) | ||
| 1195 | break; | ||
| 1196 | idx++; | ||
| 1197 | num++; | ||
| 1198 | if (num >= max_pages) | ||
| 1199 | break; | ||
| 1200 | } | ||
| 1201 | pagevec_release(&pvec); | ||
| 1202 | } | ||
| 1203 | return num; | ||
| 1204 | } | ||
| 1205 | |||
| 1206 | /* | ||
| 1148 | * The ext4_get_blocks() function tries to look up the requested blocks, | 1207 | * The ext4_get_blocks() function tries to look up the requested blocks, |
| 1149 | * and returns if the blocks are already mapped. | 1208 | * and returns if the blocks are already mapped. |
| 1150 | * | 1209 | * |
| @@ -1175,6 +1234,9 @@ int ext4_get_blocks(handle_t *handle, struct inode *inode, sector_t block, | |||
| 1175 | clear_buffer_mapped(bh); | 1234 | clear_buffer_mapped(bh); |
| 1176 | clear_buffer_unwritten(bh); | 1235 | clear_buffer_unwritten(bh); |
| 1177 | 1236 | ||
| 1237 | ext_debug("ext4_get_blocks(): inode %lu, flag %d, max_blocks %u," | ||
| 1238 | "logical block %lu\n", inode->i_ino, flags, max_blocks, | ||
| 1239 | (unsigned long)block); | ||
| 1178 | /* | 1240 | /* |
| 1179 | * Try to see if we can get the block without requesting a new | 1241 | * Try to see if we can get the block without requesting a new |
| 1180 | * file system block. | 1242 | * file system block. |
| @@ -1796,11 +1858,11 @@ repeat: | |||
| 1796 | 1858 | ||
| 1797 | if (ext4_claim_free_blocks(sbi, total)) { | 1859 | if (ext4_claim_free_blocks(sbi, total)) { |
| 1798 | spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); | 1860 | spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); |
| 1861 | vfs_dq_release_reservation_block(inode, total); | ||
| 1799 | if (ext4_should_retry_alloc(inode->i_sb, &retries)) { | 1862 | if (ext4_should_retry_alloc(inode->i_sb, &retries)) { |
| 1800 | yield(); | 1863 | yield(); |
| 1801 | goto repeat; | 1864 | goto repeat; |
| 1802 | } | 1865 | } |
| 1803 | vfs_dq_release_reservation_block(inode, total); | ||
| 1804 | return -ENOSPC; | 1866 | return -ENOSPC; |
| 1805 | } | 1867 | } |
| 1806 | EXT4_I(inode)->i_reserved_data_blocks += nrblocks; | 1868 | EXT4_I(inode)->i_reserved_data_blocks += nrblocks; |
| @@ -2092,18 +2154,18 @@ static void ext4_da_block_invalidatepages(struct mpage_da_data *mpd, | |||
| 2092 | static void ext4_print_free_blocks(struct inode *inode) | 2154 | static void ext4_print_free_blocks(struct inode *inode) |
| 2093 | { | 2155 | { |
| 2094 | struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); | 2156 | struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); |
| 2095 | printk(KERN_EMERG "Total free blocks count %lld\n", | 2157 | printk(KERN_CRIT "Total free blocks count %lld\n", |
| 2096 | ext4_count_free_blocks(inode->i_sb)); | 2158 | ext4_count_free_blocks(inode->i_sb)); |
| 2097 | printk(KERN_EMERG "Free/Dirty block details\n"); | 2159 | printk(KERN_CRIT "Free/Dirty block details\n"); |
| 2098 | printk(KERN_EMERG "free_blocks=%lld\n", | 2160 | printk(KERN_CRIT "free_blocks=%lld\n", |
| 2099 | (long long)percpu_counter_sum(&sbi->s_freeblocks_counter)); | 2161 | (long long) percpu_counter_sum(&sbi->s_freeblocks_counter)); |
| 2100 | printk(KERN_EMERG "dirty_blocks=%lld\n", | 2162 | printk(KERN_CRIT "dirty_blocks=%lld\n", |
| 2101 | (long long)percpu_counter_sum(&sbi->s_dirtyblocks_counter)); | 2163 | (long long) percpu_counter_sum(&sbi->s_dirtyblocks_counter)); |
| 2102 | printk(KERN_EMERG "Block reservation details\n"); | 2164 | printk(KERN_CRIT "Block reservation details\n"); |
| 2103 | printk(KERN_EMERG "i_reserved_data_blocks=%u\n", | 2165 | printk(KERN_CRIT "i_reserved_data_blocks=%u\n", |
| 2104 | EXT4_I(inode)->i_reserved_data_blocks); | 2166 | EXT4_I(inode)->i_reserved_data_blocks); |
| 2105 | printk(KERN_EMERG "i_reserved_meta_blocks=%u\n", | 2167 | printk(KERN_CRIT "i_reserved_meta_blocks=%u\n", |
| 2106 | EXT4_I(inode)->i_reserved_meta_blocks); | 2168 | EXT4_I(inode)->i_reserved_meta_blocks); |
| 2107 | return; | 2169 | return; |
| 2108 | } | 2170 | } |
| 2109 | 2171 | ||
| @@ -2189,14 +2251,14 @@ static int mpage_da_map_blocks(struct mpage_da_data *mpd) | |||
| 2189 | * writepage and writepages will again try to write | 2251 | * writepage and writepages will again try to write |
| 2190 | * the same. | 2252 | * the same. |
| 2191 | */ | 2253 | */ |
| 2192 | printk(KERN_EMERG "%s block allocation failed for inode %lu " | 2254 | ext4_msg(mpd->inode->i_sb, KERN_CRIT, |
| 2193 | "at logical offset %llu with max blocks " | 2255 | "delayed block allocation failed for inode %lu at " |
| 2194 | "%zd with error %d\n", | 2256 | "logical offset %llu with max blocks %zd with " |
| 2195 | __func__, mpd->inode->i_ino, | 2257 | "error %d\n", mpd->inode->i_ino, |
| 2196 | (unsigned long long)next, | 2258 | (unsigned long long) next, |
| 2197 | mpd->b_size >> mpd->inode->i_blkbits, err); | 2259 | mpd->b_size >> mpd->inode->i_blkbits, err); |
| 2198 | printk(KERN_EMERG "This should not happen.!! " | 2260 | printk(KERN_CRIT "This should not happen!! " |
| 2199 | "Data will be lost\n"); | 2261 | "Data will be lost\n"); |
| 2200 | if (err == -ENOSPC) { | 2262 | if (err == -ENOSPC) { |
| 2201 | ext4_print_free_blocks(mpd->inode); | 2263 | ext4_print_free_blocks(mpd->inode); |
| 2202 | } | 2264 | } |
| @@ -2743,8 +2805,10 @@ static int ext4_da_writepages(struct address_space *mapping, | |||
| 2743 | int no_nrwrite_index_update; | 2805 | int no_nrwrite_index_update; |
| 2744 | int pages_written = 0; | 2806 | int pages_written = 0; |
| 2745 | long pages_skipped; | 2807 | long pages_skipped; |
| 2808 | unsigned int max_pages; | ||
| 2746 | int range_cyclic, cycled = 1, io_done = 0; | 2809 | int range_cyclic, cycled = 1, io_done = 0; |
| 2747 | int needed_blocks, ret = 0, nr_to_writebump = 0; | 2810 | int needed_blocks, ret = 0; |
| 2811 | long desired_nr_to_write, nr_to_writebump = 0; | ||
| 2748 | loff_t range_start = wbc->range_start; | 2812 | loff_t range_start = wbc->range_start; |
| 2749 | struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb); | 2813 | struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb); |
| 2750 | 2814 | ||
| @@ -2771,16 +2835,6 @@ static int ext4_da_writepages(struct address_space *mapping, | |||
| 2771 | if (unlikely(sbi->s_mount_flags & EXT4_MF_FS_ABORTED)) | 2835 | if (unlikely(sbi->s_mount_flags & EXT4_MF_FS_ABORTED)) |
| 2772 | return -EROFS; | 2836 | return -EROFS; |
| 2773 | 2837 | ||
| 2774 | /* | ||
| 2775 | * Make sure nr_to_write is >= sbi->s_mb_stream_request | ||
| 2776 | * This make sure small files blocks are allocated in | ||
| 2777 | * single attempt. This ensure that small files | ||
| 2778 | * get less fragmented. | ||
| 2779 | */ | ||
| 2780 | if (wbc->nr_to_write < sbi->s_mb_stream_request) { | ||
| 2781 | nr_to_writebump = sbi->s_mb_stream_request - wbc->nr_to_write; | ||
| 2782 | wbc->nr_to_write = sbi->s_mb_stream_request; | ||
| 2783 | } | ||
| 2784 | if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) | 2838 | if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) |
| 2785 | range_whole = 1; | 2839 | range_whole = 1; |
| 2786 | 2840 | ||
| @@ -2795,6 +2849,36 @@ static int ext4_da_writepages(struct address_space *mapping, | |||
| 2795 | } else | 2849 | } else |
| 2796 | index = wbc->range_start >> PAGE_CACHE_SHIFT; | 2850 | index = wbc->range_start >> PAGE_CACHE_SHIFT; |
| 2797 | 2851 | ||
| 2852 | /* | ||
| 2853 | * This works around two forms of stupidity. The first is in | ||
| 2854 | * the writeback code, which caps the maximum number of pages | ||
| 2855 | * written to be 1024 pages. This is wrong on multiple | ||
| 2856 | * levels; different architectues have a different page size, | ||
| 2857 | * which changes the maximum amount of data which gets | ||
| 2858 | * written. Secondly, 4 megabytes is way too small. XFS | ||
| 2859 | * forces this value to be 16 megabytes by multiplying | ||
| 2860 | * nr_to_write parameter by four, and then relies on its | ||
| 2861 | * allocator to allocate larger extents to make them | ||
| 2862 | * contiguous. Unfortunately this brings us to the second | ||
| 2863 | * stupidity, which is that ext4's mballoc code only allocates | ||
| 2864 | * at most 2048 blocks. So we force contiguous writes up to | ||
| 2865 | * the number of dirty blocks in the inode, or | ||
| 2866 | * sbi->max_writeback_mb_bump whichever is smaller. | ||
| 2867 | */ | ||
| 2868 | max_pages = sbi->s_max_writeback_mb_bump << (20 - PAGE_CACHE_SHIFT); | ||
| 2869 | if (!range_cyclic && range_whole) | ||
| 2870 | desired_nr_to_write = wbc->nr_to_write * 8; | ||
| 2871 | else | ||
| 2872 | desired_nr_to_write = ext4_num_dirty_pages(inode, index, | ||
| 2873 | max_pages); | ||
| 2874 | if (desired_nr_to_write > max_pages) | ||
| 2875 | desired_nr_to_write = max_pages; | ||
| 2876 | |||
| 2877 | if (wbc->nr_to_write < desired_nr_to_write) { | ||
| 2878 | nr_to_writebump = desired_nr_to_write - wbc->nr_to_write; | ||
| 2879 | wbc->nr_to_write = desired_nr_to_write; | ||
| 2880 | } | ||
| 2881 | |||
| 2798 | mpd.wbc = wbc; | 2882 | mpd.wbc = wbc; |
| 2799 | mpd.inode = mapping->host; | 2883 | mpd.inode = mapping->host; |
| 2800 | 2884 | ||
| @@ -2822,10 +2906,9 @@ retry: | |||
| 2822 | handle = ext4_journal_start(inode, needed_blocks); | 2906 | handle = ext4_journal_start(inode, needed_blocks); |
| 2823 | if (IS_ERR(handle)) { | 2907 | if (IS_ERR(handle)) { |
| 2824 | ret = PTR_ERR(handle); | 2908 | ret = PTR_ERR(handle); |
| 2825 | printk(KERN_CRIT "%s: jbd2_start: " | 2909 | ext4_msg(inode->i_sb, KERN_CRIT, "%s: jbd2_start: " |
| 2826 | "%ld pages, ino %lu; err %d\n", __func__, | 2910 | "%ld pages, ino %lu; err %d\n", __func__, |
| 2827 | wbc->nr_to_write, inode->i_ino, ret); | 2911 | wbc->nr_to_write, inode->i_ino, ret); |
| 2828 | dump_stack(); | ||
| 2829 | goto out_writepages; | 2912 | goto out_writepages; |
| 2830 | } | 2913 | } |
| 2831 | 2914 | ||
| @@ -2897,9 +2980,10 @@ retry: | |||
| 2897 | goto retry; | 2980 | goto retry; |
| 2898 | } | 2981 | } |
| 2899 | if (pages_skipped != wbc->pages_skipped) | 2982 | if (pages_skipped != wbc->pages_skipped) |
| 2900 | printk(KERN_EMERG "This should not happen leaving %s " | 2983 | ext4_msg(inode->i_sb, KERN_CRIT, |
| 2901 | "with nr_to_write = %ld ret = %d\n", | 2984 | "This should not happen leaving %s " |
| 2902 | __func__, wbc->nr_to_write, ret); | 2985 | "with nr_to_write = %ld ret = %d\n", |
| 2986 | __func__, wbc->nr_to_write, ret); | ||
| 2903 | 2987 | ||
| 2904 | /* Update index */ | 2988 | /* Update index */ |
| 2905 | index += pages_written; | 2989 | index += pages_written; |
| @@ -2914,7 +2998,8 @@ retry: | |||
| 2914 | out_writepages: | 2998 | out_writepages: |
| 2915 | if (!no_nrwrite_index_update) | 2999 | if (!no_nrwrite_index_update) |
| 2916 | wbc->no_nrwrite_index_update = 0; | 3000 | wbc->no_nrwrite_index_update = 0; |
| 2917 | wbc->nr_to_write -= nr_to_writebump; | 3001 | if (wbc->nr_to_write > nr_to_writebump) |
| 3002 | wbc->nr_to_write -= nr_to_writebump; | ||
| 2918 | wbc->range_start = range_start; | 3003 | wbc->range_start = range_start; |
| 2919 | trace_ext4_da_writepages_result(inode, wbc, ret, pages_written); | 3004 | trace_ext4_da_writepages_result(inode, wbc, ret, pages_written); |
| 2920 | return ret; | 3005 | return ret; |
| @@ -3272,6 +3357,8 @@ static int ext4_releasepage(struct page *page, gfp_t wait) | |||
| 3272 | } | 3357 | } |
| 3273 | 3358 | ||
| 3274 | /* | 3359 | /* |
| 3360 | * O_DIRECT for ext3 (or indirect map) based files | ||
| 3361 | * | ||
| 3275 | * If the O_DIRECT write will extend the file then add this inode to the | 3362 | * If the O_DIRECT write will extend the file then add this inode to the |
| 3276 | * orphan list. So recovery will truncate it back to the original size | 3363 | * orphan list. So recovery will truncate it back to the original size |
| 3277 | * if the machine crashes during the write. | 3364 | * if the machine crashes during the write. |
| @@ -3280,7 +3367,7 @@ static int ext4_releasepage(struct page *page, gfp_t wait) | |||
| 3280 | * crashes then stale disk data _may_ be exposed inside the file. But current | 3367 | * crashes then stale disk data _may_ be exposed inside the file. But current |
| 3281 | * VFS code falls back into buffered path in that case so we are safe. | 3368 | * VFS code falls back into buffered path in that case so we are safe. |
| 3282 | */ | 3369 | */ |
| 3283 | static ssize_t ext4_direct_IO(int rw, struct kiocb *iocb, | 3370 | static ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb, |
| 3284 | const struct iovec *iov, loff_t offset, | 3371 | const struct iovec *iov, loff_t offset, |
| 3285 | unsigned long nr_segs) | 3372 | unsigned long nr_segs) |
| 3286 | { | 3373 | { |
| @@ -3354,6 +3441,359 @@ out: | |||
| 3354 | return ret; | 3441 | return ret; |
| 3355 | } | 3442 | } |
| 3356 | 3443 | ||
| 3444 | /* Maximum number of blocks we map for direct IO at once. */ | ||
| 3445 | |||
| 3446 | static int ext4_get_block_dio_write(struct inode *inode, sector_t iblock, | ||
| 3447 | struct buffer_head *bh_result, int create) | ||
| 3448 | { | ||
| 3449 | handle_t *handle = NULL; | ||
| 3450 | int ret = 0; | ||
| 3451 | unsigned max_blocks = bh_result->b_size >> inode->i_blkbits; | ||
| 3452 | int dio_credits; | ||
| 3453 | |||
| 3454 | ext4_debug("ext4_get_block_dio_write: inode %lu, create flag %d\n", | ||
| 3455 | inode->i_ino, create); | ||
| 3456 | /* | ||
| 3457 | * DIO VFS code passes create = 0 flag for write to | ||
| 3458 | * the middle of file. It does this to avoid block | ||
| 3459 | * allocation for holes, to prevent expose stale data | ||
| 3460 | * out when there is parallel buffered read (which does | ||
| 3461 | * not hold the i_mutex lock) while direct IO write has | ||
| 3462 | * not completed. DIO request on holes finally falls back | ||
| 3463 | * to buffered IO for this reason. | ||
| 3464 | * | ||
| 3465 | * For ext4 extent based file, since we support fallocate, | ||
| 3466 | * new allocated extent as uninitialized, for holes, we | ||
| 3467 | * could fallocate blocks for holes, thus parallel | ||
| 3468 | * buffered IO read will zero out the page when read on | ||
| 3469 | * a hole while parallel DIO write to the hole has not completed. | ||
| 3470 | * | ||
| 3471 | * when we come here, we know it's a direct IO write to | ||
| 3472 | * to the middle of file (<i_size) | ||
| 3473 | * so it's safe to override the create flag from VFS. | ||
| 3474 | */ | ||
| 3475 | create = EXT4_GET_BLOCKS_DIO_CREATE_EXT; | ||
| 3476 | |||
| 3477 | if (max_blocks > DIO_MAX_BLOCKS) | ||
| 3478 | max_blocks = DIO_MAX_BLOCKS; | ||
| 3479 | dio_credits = ext4_chunk_trans_blocks(inode, max_blocks); | ||
| 3480 | handle = ext4_journal_start(inode, dio_credits); | ||
| 3481 | if (IS_ERR(handle)) { | ||
| 3482 | ret = PTR_ERR(handle); | ||
| 3483 | goto out; | ||
| 3484 | } | ||
| 3485 | ret = ext4_get_blocks(handle, inode, iblock, max_blocks, bh_result, | ||
| 3486 | create); | ||
| 3487 | if (ret > 0) { | ||
| 3488 | bh_result->b_size = (ret << inode->i_blkbits); | ||
| 3489 | ret = 0; | ||
| 3490 | } | ||
| 3491 | ext4_journal_stop(handle); | ||
| 3492 | out: | ||
| 3493 | return ret; | ||
| 3494 | } | ||
| 3495 | |||
| 3496 | static void ext4_free_io_end(ext4_io_end_t *io) | ||
| 3497 | { | ||
| 3498 | BUG_ON(!io); | ||
| 3499 | iput(io->inode); | ||
| 3500 | kfree(io); | ||
| 3501 | } | ||
| 3502 | static void dump_aio_dio_list(struct inode * inode) | ||
| 3503 | { | ||
| 3504 | #ifdef EXT4_DEBUG | ||
| 3505 | struct list_head *cur, *before, *after; | ||
| 3506 | ext4_io_end_t *io, *io0, *io1; | ||
| 3507 | |||
| 3508 | if (list_empty(&EXT4_I(inode)->i_aio_dio_complete_list)){ | ||
| 3509 | ext4_debug("inode %lu aio dio list is empty\n", inode->i_ino); | ||
| 3510 | return; | ||
| 3511 | } | ||
| 3512 | |||
| 3513 | ext4_debug("Dump inode %lu aio_dio_completed_IO list \n", inode->i_ino); | ||
| 3514 | list_for_each_entry(io, &EXT4_I(inode)->i_aio_dio_complete_list, list){ | ||
| 3515 | cur = &io->list; | ||
| 3516 | before = cur->prev; | ||
| 3517 | io0 = container_of(before, ext4_io_end_t, list); | ||
| 3518 | after = cur->next; | ||
| 3519 | io1 = container_of(after, ext4_io_end_t, list); | ||
| 3520 | |||
| 3521 | ext4_debug("io 0x%p from inode %lu,prev 0x%p,next 0x%p\n", | ||
| 3522 | io, inode->i_ino, io0, io1); | ||
| 3523 | } | ||
| 3524 | #endif | ||
| 3525 | } | ||
| 3526 | |||
| 3527 | /* | ||
| 3528 | * check a range of space and convert unwritten extents to written. | ||
| 3529 | */ | ||
| 3530 | static int ext4_end_aio_dio_nolock(ext4_io_end_t *io) | ||
| 3531 | { | ||
| 3532 | struct inode *inode = io->inode; | ||
| 3533 | loff_t offset = io->offset; | ||
| 3534 | size_t size = io->size; | ||
| 3535 | int ret = 0; | ||
| 3536 | |||
| 3537 | ext4_debug("end_aio_dio_onlock: io 0x%p from inode %lu,list->next 0x%p," | ||
| 3538 | "list->prev 0x%p\n", | ||
| 3539 | io, inode->i_ino, io->list.next, io->list.prev); | ||
| 3540 | |||
| 3541 | if (list_empty(&io->list)) | ||
| 3542 | return ret; | ||
| 3543 | |||
| 3544 | if (io->flag != DIO_AIO_UNWRITTEN) | ||
| 3545 | return ret; | ||
| 3546 | |||
| 3547 | if (offset + size <= i_size_read(inode)) | ||
| 3548 | ret = ext4_convert_unwritten_extents(inode, offset, size); | ||
| 3549 | |||
| 3550 | if (ret < 0) { | ||
| 3551 | printk(KERN_EMERG "%s: failed to convert unwritten" | ||
| 3552 | "extents to written extents, error is %d" | ||
| 3553 | " io is still on inode %lu aio dio list\n", | ||
| 3554 | __func__, ret, inode->i_ino); | ||
| 3555 | return ret; | ||
| 3556 | } | ||
| 3557 | |||
| 3558 | /* clear the DIO AIO unwritten flag */ | ||
| 3559 | io->flag = 0; | ||
| 3560 | return ret; | ||
| 3561 | } | ||
| 3562 | /* | ||
| 3563 | * work on completed aio dio IO, to convert unwritten extents to extents | ||
| 3564 | */ | ||
| 3565 | static void ext4_end_aio_dio_work(struct work_struct *work) | ||
| 3566 | { | ||
| 3567 | ext4_io_end_t *io = container_of(work, ext4_io_end_t, work); | ||
| 3568 | struct inode *inode = io->inode; | ||
| 3569 | int ret = 0; | ||
| 3570 | |||
| 3571 | mutex_lock(&inode->i_mutex); | ||
| 3572 | ret = ext4_end_aio_dio_nolock(io); | ||
| 3573 | if (ret >= 0) { | ||
| 3574 | if (!list_empty(&io->list)) | ||
| 3575 | list_del_init(&io->list); | ||
| 3576 | ext4_free_io_end(io); | ||
| 3577 | } | ||
| 3578 | mutex_unlock(&inode->i_mutex); | ||
| 3579 | } | ||
| 3580 | /* | ||
| 3581 | * This function is called from ext4_sync_file(). | ||
| 3582 | * | ||
| 3583 | * When AIO DIO IO is completed, the work to convert unwritten | ||
| 3584 | * extents to written is queued on workqueue but may not get immediately | ||
| 3585 | * scheduled. When fsync is called, we need to ensure the | ||
| 3586 | * conversion is complete before fsync returns. | ||
| 3587 | * The inode keeps track of a list of completed AIO from DIO path | ||
| 3588 | * that might needs to do the conversion. This function walks through | ||
| 3589 | * the list and convert the related unwritten extents to written. | ||
| 3590 | */ | ||
| 3591 | int flush_aio_dio_completed_IO(struct inode *inode) | ||
| 3592 | { | ||
| 3593 | ext4_io_end_t *io; | ||
| 3594 | int ret = 0; | ||
| 3595 | int ret2 = 0; | ||
| 3596 | |||
| 3597 | if (list_empty(&EXT4_I(inode)->i_aio_dio_complete_list)) | ||
| 3598 | return ret; | ||
| 3599 | |||
| 3600 | dump_aio_dio_list(inode); | ||
| 3601 | while (!list_empty(&EXT4_I(inode)->i_aio_dio_complete_list)){ | ||
| 3602 | io = list_entry(EXT4_I(inode)->i_aio_dio_complete_list.next, | ||
| 3603 | ext4_io_end_t, list); | ||
| 3604 | /* | ||
| 3605 | * Calling ext4_end_aio_dio_nolock() to convert completed | ||
| 3606 | * IO to written. | ||
| 3607 | * | ||
| 3608 | * When ext4_sync_file() is called, run_queue() may already | ||
| 3609 | * about to flush the work corresponding to this io structure. | ||
| 3610 | * It will be upset if it founds the io structure related | ||
| 3611 | * to the work-to-be schedule is freed. | ||
| 3612 | * | ||
| 3613 | * Thus we need to keep the io structure still valid here after | ||
| 3614 | * convertion finished. The io structure has a flag to | ||
| 3615 | * avoid double converting from both fsync and background work | ||
| 3616 | * queue work. | ||
| 3617 | */ | ||
| 3618 | ret = ext4_end_aio_dio_nolock(io); | ||
| 3619 | if (ret < 0) | ||
| 3620 | ret2 = ret; | ||
| 3621 | else | ||
| 3622 | list_del_init(&io->list); | ||
| 3623 | } | ||
| 3624 | return (ret2 < 0) ? ret2 : 0; | ||
| 3625 | } | ||
| 3626 | |||
| 3627 | static ext4_io_end_t *ext4_init_io_end (struct inode *inode) | ||
| 3628 | { | ||
| 3629 | ext4_io_end_t *io = NULL; | ||
| 3630 | |||
| 3631 | io = kmalloc(sizeof(*io), GFP_NOFS); | ||
| 3632 | |||
| 3633 | if (io) { | ||
| 3634 | igrab(inode); | ||
| 3635 | io->inode = inode; | ||
| 3636 | io->flag = 0; | ||
| 3637 | io->offset = 0; | ||
| 3638 | io->size = 0; | ||
| 3639 | io->error = 0; | ||
| 3640 | INIT_WORK(&io->work, ext4_end_aio_dio_work); | ||
| 3641 | INIT_LIST_HEAD(&io->list); | ||
| 3642 | } | ||
| 3643 | |||
| 3644 | return io; | ||
| 3645 | } | ||
| 3646 | |||
| 3647 | static void ext4_end_io_dio(struct kiocb *iocb, loff_t offset, | ||
| 3648 | ssize_t size, void *private) | ||
| 3649 | { | ||
| 3650 | ext4_io_end_t *io_end = iocb->private; | ||
| 3651 | struct workqueue_struct *wq; | ||
| 3652 | |||
| 3653 | ext_debug("ext4_end_io_dio(): io_end 0x%p" | ||
| 3654 | "for inode %lu, iocb 0x%p, offset %llu, size %llu\n", | ||
| 3655 | iocb->private, io_end->inode->i_ino, iocb, offset, | ||
| 3656 | size); | ||
| 3657 | /* if not async direct IO or dio with 0 bytes write, just return */ | ||
| 3658 | if (!io_end || !size) | ||
| 3659 | return; | ||
| 3660 | |||
| 3661 | /* if not aio dio with unwritten extents, just free io and return */ | ||
| 3662 | if (io_end->flag != DIO_AIO_UNWRITTEN){ | ||
| 3663 | ext4_free_io_end(io_end); | ||
| 3664 | iocb->private = NULL; | ||
| 3665 | return; | ||
| 3666 | } | ||
| 3667 | |||
| 3668 | io_end->offset = offset; | ||
| 3669 | io_end->size = size; | ||
| 3670 | wq = EXT4_SB(io_end->inode->i_sb)->dio_unwritten_wq; | ||
| 3671 | |||
| 3672 | /* queue the work to convert unwritten extents to written */ | ||
| 3673 | queue_work(wq, &io_end->work); | ||
| 3674 | |||
| 3675 | /* Add the io_end to per-inode completed aio dio list*/ | ||
| 3676 | list_add_tail(&io_end->list, | ||
| 3677 | &EXT4_I(io_end->inode)->i_aio_dio_complete_list); | ||
| 3678 | iocb->private = NULL; | ||
| 3679 | } | ||
| 3680 | /* | ||
| 3681 | * For ext4 extent files, ext4 will do direct-io write to holes, | ||
| 3682 | * preallocated extents, and those write extend the file, no need to | ||
| 3683 | * fall back to buffered IO. | ||
| 3684 | * | ||
| 3685 | * For holes, we fallocate those blocks, mark them as unintialized | ||
| 3686 | * If those blocks were preallocated, we mark sure they are splited, but | ||
| 3687 | * still keep the range to write as unintialized. | ||
| 3688 | * | ||
| 3689 | * The unwrritten extents will be converted to written when DIO is completed. | ||
| 3690 | * For async direct IO, since the IO may still pending when return, we | ||
| 3691 | * set up an end_io call back function, which will do the convertion | ||
| 3692 | * when async direct IO completed. | ||
| 3693 | * | ||
| 3694 | * If the O_DIRECT write will extend the file then add this inode to the | ||
| 3695 | * orphan list. So recovery will truncate it back to the original size | ||
| 3696 | * if the machine crashes during the write. | ||
| 3697 | * | ||
| 3698 | */ | ||
| 3699 | static ssize_t ext4_ext_direct_IO(int rw, struct kiocb *iocb, | ||
| 3700 | const struct iovec *iov, loff_t offset, | ||
| 3701 | unsigned long nr_segs) | ||
| 3702 | { | ||
| 3703 | struct file *file = iocb->ki_filp; | ||
| 3704 | struct inode *inode = file->f_mapping->host; | ||
| 3705 | ssize_t ret; | ||
| 3706 | size_t count = iov_length(iov, nr_segs); | ||
| 3707 | |||
| 3708 | loff_t final_size = offset + count; | ||
| 3709 | if (rw == WRITE && final_size <= inode->i_size) { | ||
| 3710 | /* | ||
| 3711 | * We could direct write to holes and fallocate. | ||
| 3712 | * | ||
| 3713 | * Allocated blocks to fill the hole are marked as uninitialized | ||
| 3714 | * to prevent paralel buffered read to expose the stale data | ||
| 3715 | * before DIO complete the data IO. | ||
| 3716 | * | ||
| 3717 | * As to previously fallocated extents, ext4 get_block | ||
| 3718 | * will just simply mark the buffer mapped but still | ||
| 3719 | * keep the extents uninitialized. | ||
| 3720 | * | ||
| 3721 | * for non AIO case, we will convert those unwritten extents | ||
| 3722 | * to written after return back from blockdev_direct_IO. | ||
| 3723 | * | ||
| 3724 | * for async DIO, the conversion needs to be defered when | ||
| 3725 | * the IO is completed. The ext4 end_io callback function | ||
| 3726 | * will be called to take care of the conversion work. | ||
| 3727 | * Here for async case, we allocate an io_end structure to | ||
| 3728 | * hook to the iocb. | ||
| 3729 | */ | ||
| 3730 | iocb->private = NULL; | ||
| 3731 | EXT4_I(inode)->cur_aio_dio = NULL; | ||
| 3732 | if (!is_sync_kiocb(iocb)) { | ||
| 3733 | iocb->private = ext4_init_io_end(inode); | ||
| 3734 | if (!iocb->private) | ||
| 3735 | return -ENOMEM; | ||
| 3736 | /* | ||
| 3737 | * we save the io structure for current async | ||
| 3738 | * direct IO, so that later ext4_get_blocks() | ||
| 3739 | * could flag the io structure whether there | ||
| 3740 | * is a unwritten extents needs to be converted | ||
| 3741 | * when IO is completed. | ||
| 3742 | */ | ||
| 3743 | EXT4_I(inode)->cur_aio_dio = iocb->private; | ||
| 3744 | } | ||
| 3745 | |||
| 3746 | ret = blockdev_direct_IO(rw, iocb, inode, | ||
| 3747 | inode->i_sb->s_bdev, iov, | ||
| 3748 | offset, nr_segs, | ||
| 3749 | ext4_get_block_dio_write, | ||
| 3750 | ext4_end_io_dio); | ||
| 3751 | if (iocb->private) | ||
| 3752 | EXT4_I(inode)->cur_aio_dio = NULL; | ||
| 3753 | /* | ||
| 3754 | * The io_end structure takes a reference to the inode, | ||
| 3755 | * that structure needs to be destroyed and the | ||
| 3756 | * reference to the inode need to be dropped, when IO is | ||
| 3757 | * complete, even with 0 byte write, or failed. | ||
| 3758 | * | ||
| 3759 | * In the successful AIO DIO case, the io_end structure will be | ||
| 3760 | * desctroyed and the reference to the inode will be dropped | ||
| 3761 | * after the end_io call back function is called. | ||
| 3762 | * | ||
| 3763 | * In the case there is 0 byte write, or error case, since | ||
| 3764 | * VFS direct IO won't invoke the end_io call back function, | ||
| 3765 | * we need to free the end_io structure here. | ||
| 3766 | */ | ||
| 3767 | if (ret != -EIOCBQUEUED && ret <= 0 && iocb->private) { | ||
| 3768 | ext4_free_io_end(iocb->private); | ||
| 3769 | iocb->private = NULL; | ||
| 3770 | } else if (ret > 0) | ||
| 3771 | /* | ||
| 3772 | * for non AIO case, since the IO is already | ||
| 3773 | * completed, we could do the convertion right here | ||
| 3774 | */ | ||
| 3775 | ret = ext4_convert_unwritten_extents(inode, | ||
| 3776 | offset, ret); | ||
| 3777 | return ret; | ||
| 3778 | } | ||
| 3779 | |||
| 3780 | /* for write the the end of file case, we fall back to old way */ | ||
| 3781 | return ext4_ind_direct_IO(rw, iocb, iov, offset, nr_segs); | ||
| 3782 | } | ||
| 3783 | |||
| 3784 | static ssize_t ext4_direct_IO(int rw, struct kiocb *iocb, | ||
| 3785 | const struct iovec *iov, loff_t offset, | ||
| 3786 | unsigned long nr_segs) | ||
| 3787 | { | ||
| 3788 | struct file *file = iocb->ki_filp; | ||
| 3789 | struct inode *inode = file->f_mapping->host; | ||
| 3790 | |||
| 3791 | if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) | ||
| 3792 | return ext4_ext_direct_IO(rw, iocb, iov, offset, nr_segs); | ||
| 3793 | |||
| 3794 | return ext4_ind_direct_IO(rw, iocb, iov, offset, nr_segs); | ||
| 3795 | } | ||
| 3796 | |||
| 3357 | /* | 3797 | /* |
| 3358 | * Pages can be marked dirty completely asynchronously from ext4's journalling | 3798 | * Pages can be marked dirty completely asynchronously from ext4's journalling |
| 3359 | * activity. By filemap_sync_pte(), try_to_unmap_one(), etc. We cannot do | 3799 | * activity. By filemap_sync_pte(), try_to_unmap_one(), etc. We cannot do |
| @@ -4551,8 +4991,7 @@ static int ext4_inode_blocks_set(handle_t *handle, | |||
| 4551 | */ | 4991 | */ |
| 4552 | static int ext4_do_update_inode(handle_t *handle, | 4992 | static int ext4_do_update_inode(handle_t *handle, |
| 4553 | struct inode *inode, | 4993 | struct inode *inode, |
| 4554 | struct ext4_iloc *iloc, | 4994 | struct ext4_iloc *iloc) |
| 4555 | int do_sync) | ||
| 4556 | { | 4995 | { |
| 4557 | struct ext4_inode *raw_inode = ext4_raw_inode(iloc); | 4996 | struct ext4_inode *raw_inode = ext4_raw_inode(iloc); |
| 4558 | struct ext4_inode_info *ei = EXT4_I(inode); | 4997 | struct ext4_inode_info *ei = EXT4_I(inode); |
| @@ -4653,22 +5092,10 @@ static int ext4_do_update_inode(handle_t *handle, | |||
| 4653 | raw_inode->i_extra_isize = cpu_to_le16(ei->i_extra_isize); | 5092 | raw_inode->i_extra_isize = cpu_to_le16(ei->i_extra_isize); |
| 4654 | } | 5093 | } |
| 4655 | 5094 | ||
| 4656 | /* | 5095 | BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata"); |
| 4657 | * If we're not using a journal and we were called from | 5096 | rc = ext4_handle_dirty_metadata(handle, inode, bh); |
| 4658 | * ext4_write_inode() to sync the inode (making do_sync true), | 5097 | if (!err) |
| 4659 | * we can just use sync_dirty_buffer() directly to do our dirty | 5098 | err = rc; |
| 4660 | * work. Testing s_journal here is a bit redundant but it's | ||
| 4661 | * worth it to avoid potential future trouble. | ||
| 4662 | */ | ||
| 4663 | if (EXT4_SB(inode->i_sb)->s_journal == NULL && do_sync) { | ||
| 4664 | BUFFER_TRACE(bh, "call sync_dirty_buffer"); | ||
| 4665 | sync_dirty_buffer(bh); | ||
| 4666 | } else { | ||
| 4667 | BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata"); | ||
| 4668 | rc = ext4_handle_dirty_metadata(handle, inode, bh); | ||
| 4669 | if (!err) | ||
| 4670 | err = rc; | ||
| 4671 | } | ||
| 4672 | ei->i_state &= ~EXT4_STATE_NEW; | 5099 | ei->i_state &= ~EXT4_STATE_NEW; |
| 4673 | 5100 | ||
| 4674 | out_brelse: | 5101 | out_brelse: |
| @@ -4736,8 +5163,16 @@ int ext4_write_inode(struct inode *inode, int wait) | |||
| 4736 | err = ext4_get_inode_loc(inode, &iloc); | 5163 | err = ext4_get_inode_loc(inode, &iloc); |
| 4737 | if (err) | 5164 | if (err) |
| 4738 | return err; | 5165 | return err; |
| 4739 | err = ext4_do_update_inode(EXT4_NOJOURNAL_HANDLE, | 5166 | if (wait) |
| 4740 | inode, &iloc, wait); | 5167 | sync_dirty_buffer(iloc.bh); |
| 5168 | if (buffer_req(iloc.bh) && !buffer_uptodate(iloc.bh)) { | ||
| 5169 | ext4_error(inode->i_sb, __func__, | ||
| 5170 | "IO error syncing inode, " | ||
| 5171 | "inode=%lu, block=%llu", | ||
| 5172 | inode->i_ino, | ||
| 5173 | (unsigned long long)iloc.bh->b_blocknr); | ||
| 5174 | err = -EIO; | ||
| 5175 | } | ||
| 4741 | } | 5176 | } |
| 4742 | return err; | 5177 | return err; |
| 4743 | } | 5178 | } |
| @@ -5033,7 +5468,7 @@ int ext4_mark_iloc_dirty(handle_t *handle, | |||
| 5033 | get_bh(iloc->bh); | 5468 | get_bh(iloc->bh); |
| 5034 | 5469 | ||
| 5035 | /* ext4_do_update_inode() does jbd2_journal_dirty_metadata */ | 5470 | /* ext4_do_update_inode() does jbd2_journal_dirty_metadata */ |
| 5036 | err = ext4_do_update_inode(handle, inode, iloc, 0); | 5471 | err = ext4_do_update_inode(handle, inode, iloc); |
| 5037 | put_bh(iloc->bh); | 5472 | put_bh(iloc->bh); |
| 5038 | return err; | 5473 | return err; |
| 5039 | } | 5474 | } |
| @@ -5180,24 +5615,13 @@ void ext4_dirty_inode(struct inode *inode) | |||
| 5180 | handle_t *current_handle = ext4_journal_current_handle(); | 5615 | handle_t *current_handle = ext4_journal_current_handle(); |
| 5181 | handle_t *handle; | 5616 | handle_t *handle; |
| 5182 | 5617 | ||
| 5183 | if (!ext4_handle_valid(current_handle)) { | ||
| 5184 | ext4_mark_inode_dirty(current_handle, inode); | ||
| 5185 | return; | ||
| 5186 | } | ||
| 5187 | |||
| 5188 | handle = ext4_journal_start(inode, 2); | 5618 | handle = ext4_journal_start(inode, 2); |
| 5189 | if (IS_ERR(handle)) | 5619 | if (IS_ERR(handle)) |
| 5190 | goto out; | 5620 | goto out; |
| 5191 | if (current_handle && | 5621 | |
| 5192 | current_handle->h_transaction != handle->h_transaction) { | 5622 | jbd_debug(5, "marking dirty. outer handle=%p\n", current_handle); |
| 5193 | /* This task has a transaction open against a different fs */ | 5623 | ext4_mark_inode_dirty(handle, inode); |
| 5194 | printk(KERN_EMERG "%s: transactions do not match!\n", | 5624 | |
| 5195 | __func__); | ||
| 5196 | } else { | ||
| 5197 | jbd_debug(5, "marking dirty. outer handle=%p\n", | ||
| 5198 | current_handle); | ||
| 5199 | ext4_mark_inode_dirty(handle, inode); | ||
| 5200 | } | ||
| 5201 | ext4_journal_stop(handle); | 5625 | ext4_journal_stop(handle); |
| 5202 | out: | 5626 | out: |
| 5203 | return; | 5627 | return; |
