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; |