aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/ext4/balloc.c13
-rw-r--r--fs/ext4/ext4.h17
-rw-r--r--fs/ext4/extents.c35
-rw-r--r--fs/ext4/ialloc.c2
-rw-r--r--fs/ext4/inline.c3
-rw-r--r--fs/ext4/inode.c54
-rw-r--r--fs/ext4/mballoc.c4
-rw-r--r--fs/ext4/mmp.c2
-rw-r--r--fs/ext4/page-io.c5
-rw-r--r--fs/ext4/super.c159
-rw-r--r--fs/ext4/xattr.c1
11 files changed, 168 insertions, 127 deletions
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
index dc5d572ebd6a..6ea7b1436bbc 100644
--- a/fs/ext4/balloc.c
+++ b/fs/ext4/balloc.c
@@ -640,6 +640,7 @@ ext4_fsblk_t ext4_count_free_clusters(struct super_block *sb)
640 struct ext4_group_desc *gdp; 640 struct ext4_group_desc *gdp;
641 ext4_group_t i; 641 ext4_group_t i;
642 ext4_group_t ngroups = ext4_get_groups_count(sb); 642 ext4_group_t ngroups = ext4_get_groups_count(sb);
643 struct ext4_group_info *grp;
643#ifdef EXT4FS_DEBUG 644#ifdef EXT4FS_DEBUG
644 struct ext4_super_block *es; 645 struct ext4_super_block *es;
645 ext4_fsblk_t bitmap_count; 646 ext4_fsblk_t bitmap_count;
@@ -655,7 +656,11 @@ ext4_fsblk_t ext4_count_free_clusters(struct super_block *sb)
655 gdp = ext4_get_group_desc(sb, i, NULL); 656 gdp = ext4_get_group_desc(sb, i, NULL);
656 if (!gdp) 657 if (!gdp)
657 continue; 658 continue;
658 desc_count += ext4_free_group_clusters(sb, gdp); 659 grp = NULL;
660 if (EXT4_SB(sb)->s_group_info)
661 grp = ext4_get_group_info(sb, i);
662 if (!grp || !EXT4_MB_GRP_BBITMAP_CORRUPT(grp))
663 desc_count += ext4_free_group_clusters(sb, gdp);
659 brelse(bitmap_bh); 664 brelse(bitmap_bh);
660 bitmap_bh = ext4_read_block_bitmap(sb, i); 665 bitmap_bh = ext4_read_block_bitmap(sb, i);
661 if (bitmap_bh == NULL) 666 if (bitmap_bh == NULL)
@@ -679,7 +684,11 @@ ext4_fsblk_t ext4_count_free_clusters(struct super_block *sb)
679 gdp = ext4_get_group_desc(sb, i, NULL); 684 gdp = ext4_get_group_desc(sb, i, NULL);
680 if (!gdp) 685 if (!gdp)
681 continue; 686 continue;
682 desc_count += ext4_free_group_clusters(sb, gdp); 687 grp = NULL;
688 if (EXT4_SB(sb)->s_group_info)
689 grp = ext4_get_group_info(sb, i);
690 if (!grp || !EXT4_MB_GRP_BBITMAP_CORRUPT(grp))
691 desc_count += ext4_free_group_clusters(sb, gdp);
683 } 692 }
684 693
685 return desc_count; 694 return desc_count;
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index d01d62315f7e..e6185031c1cc 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -29,6 +29,7 @@
29#include <linux/wait.h> 29#include <linux/wait.h>
30#include <linux/blockgroup_lock.h> 30#include <linux/blockgroup_lock.h>
31#include <linux/percpu_counter.h> 31#include <linux/percpu_counter.h>
32#include <linux/ratelimit.h>
32#include <crypto/hash.h> 33#include <crypto/hash.h>
33#ifdef __KERNEL__ 34#ifdef __KERNEL__
34#include <linux/compat.h> 35#include <linux/compat.h>
@@ -1314,6 +1315,11 @@ struct ext4_sb_info {
1314 unsigned long s_es_last_sorted; 1315 unsigned long s_es_last_sorted;
1315 struct percpu_counter s_extent_cache_cnt; 1316 struct percpu_counter s_extent_cache_cnt;
1316 spinlock_t s_es_lru_lock ____cacheline_aligned_in_smp; 1317 spinlock_t s_es_lru_lock ____cacheline_aligned_in_smp;
1318
1319 /* Ratelimit ext4 messages. */
1320 struct ratelimit_state s_err_ratelimit_state;
1321 struct ratelimit_state s_warning_ratelimit_state;
1322 struct ratelimit_state s_msg_ratelimit_state;
1317}; 1323};
1318 1324
1319static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb) 1325static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb)
@@ -1396,7 +1402,18 @@ static inline void ext4_clear_inode_##name(struct inode *inode, int bit) \
1396 clear_bit(bit + (offset), &EXT4_I(inode)->i_##field); \ 1402 clear_bit(bit + (offset), &EXT4_I(inode)->i_##field); \
1397} 1403}
1398 1404
1405/* Add these declarations here only so that these functions can be
1406 * found by name. Otherwise, they are very hard to locate. */
1407static inline int ext4_test_inode_flag(struct inode *inode, int bit);
1408static inline void ext4_set_inode_flag(struct inode *inode, int bit);
1409static inline void ext4_clear_inode_flag(struct inode *inode, int bit);
1399EXT4_INODE_BIT_FNS(flag, flags, 0) 1410EXT4_INODE_BIT_FNS(flag, flags, 0)
1411
1412/* Add these declarations here only so that these functions can be
1413 * found by name. Otherwise, they are very hard to locate. */
1414static inline int ext4_test_inode_state(struct inode *inode, int bit);
1415static inline void ext4_set_inode_state(struct inode *inode, int bit);
1416static inline void ext4_clear_inode_state(struct inode *inode, int bit);
1400#if (BITS_PER_LONG < 64) 1417#if (BITS_PER_LONG < 64)
1401EXT4_INODE_BIT_FNS(state, state_flags, 0) 1418EXT4_INODE_BIT_FNS(state, state_flags, 0)
1402 1419
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 54d52afcdb19..35f65cf4f318 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -1666,7 +1666,7 @@ int
1666ext4_can_extents_be_merged(struct inode *inode, struct ext4_extent *ex1, 1666ext4_can_extents_be_merged(struct inode *inode, struct ext4_extent *ex1,
1667 struct ext4_extent *ex2) 1667 struct ext4_extent *ex2)
1668{ 1668{
1669 unsigned short ext1_ee_len, ext2_ee_len, max_len; 1669 unsigned short ext1_ee_len, ext2_ee_len;
1670 1670
1671 /* 1671 /*
1672 * Make sure that both extents are initialized. We don't merge 1672 * Make sure that both extents are initialized. We don't merge
@@ -1677,11 +1677,6 @@ ext4_can_extents_be_merged(struct inode *inode, struct ext4_extent *ex1,
1677 if (ext4_ext_is_uninitialized(ex1) || ext4_ext_is_uninitialized(ex2)) 1677 if (ext4_ext_is_uninitialized(ex1) || ext4_ext_is_uninitialized(ex2))
1678 return 0; 1678 return 0;
1679 1679
1680 if (ext4_ext_is_uninitialized(ex1))
1681 max_len = EXT_UNINIT_MAX_LEN;
1682 else
1683 max_len = EXT_INIT_MAX_LEN;
1684
1685 ext1_ee_len = ext4_ext_get_actual_len(ex1); 1680 ext1_ee_len = ext4_ext_get_actual_len(ex1);
1686 ext2_ee_len = ext4_ext_get_actual_len(ex2); 1681 ext2_ee_len = ext4_ext_get_actual_len(ex2);
1687 1682
@@ -1694,7 +1689,7 @@ ext4_can_extents_be_merged(struct inode *inode, struct ext4_extent *ex1,
1694 * as an RO_COMPAT feature, refuse to merge to extents if 1689 * as an RO_COMPAT feature, refuse to merge to extents if
1695 * this can result in the top bit of ee_len being set. 1690 * this can result in the top bit of ee_len being set.
1696 */ 1691 */
1697 if (ext1_ee_len + ext2_ee_len > max_len) 1692 if (ext1_ee_len + ext2_ee_len > EXT_INIT_MAX_LEN)
1698 return 0; 1693 return 0;
1699#ifdef AGGRESSIVE_TEST 1694#ifdef AGGRESSIVE_TEST
1700 if (ext1_ee_len >= 4) 1695 if (ext1_ee_len >= 4)
@@ -1720,7 +1715,6 @@ static int ext4_ext_try_to_merge_right(struct inode *inode,
1720 struct ext4_extent_header *eh; 1715 struct ext4_extent_header *eh;
1721 unsigned int depth, len; 1716 unsigned int depth, len;
1722 int merge_done = 0; 1717 int merge_done = 0;
1723 int uninitialized = 0;
1724 1718
1725 depth = ext_depth(inode); 1719 depth = ext_depth(inode);
1726 BUG_ON(path[depth].p_hdr == NULL); 1720 BUG_ON(path[depth].p_hdr == NULL);
@@ -1730,12 +1724,8 @@ static int ext4_ext_try_to_merge_right(struct inode *inode,
1730 if (!ext4_can_extents_be_merged(inode, ex, ex + 1)) 1724 if (!ext4_can_extents_be_merged(inode, ex, ex + 1))
1731 break; 1725 break;
1732 /* merge with next extent! */ 1726 /* merge with next extent! */
1733 if (ext4_ext_is_uninitialized(ex))
1734 uninitialized = 1;
1735 ex->ee_len = cpu_to_le16(ext4_ext_get_actual_len(ex) 1727 ex->ee_len = cpu_to_le16(ext4_ext_get_actual_len(ex)
1736 + ext4_ext_get_actual_len(ex + 1)); 1728 + ext4_ext_get_actual_len(ex + 1));
1737 if (uninitialized)
1738 ext4_ext_mark_uninitialized(ex);
1739 1729
1740 if (ex + 1 < EXT_LAST_EXTENT(eh)) { 1730 if (ex + 1 < EXT_LAST_EXTENT(eh)) {
1741 len = (EXT_LAST_EXTENT(eh) - ex - 1) 1731 len = (EXT_LAST_EXTENT(eh) - ex - 1)
@@ -1890,7 +1880,6 @@ int ext4_ext_insert_extent(handle_t *handle, struct inode *inode,
1890 struct ext4_ext_path *npath = NULL; 1880 struct ext4_ext_path *npath = NULL;
1891 int depth, len, err; 1881 int depth, len, err;
1892 ext4_lblk_t next; 1882 ext4_lblk_t next;
1893 unsigned uninitialized = 0;
1894 int mb_flags = 0; 1883 int mb_flags = 0;
1895 1884
1896 if (unlikely(ext4_ext_get_actual_len(newext) == 0)) { 1885 if (unlikely(ext4_ext_get_actual_len(newext) == 0)) {
@@ -1942,18 +1931,8 @@ int ext4_ext_insert_extent(handle_t *handle, struct inode *inode,
1942 if (err) 1931 if (err)
1943 return err; 1932 return err;
1944 1933
1945 /*
1946 * ext4_can_extents_be_merged should have checked
1947 * that either both extents are uninitialized, or
1948 * both aren't. Thus we need to check only one of
1949 * them here.
1950 */
1951 if (ext4_ext_is_uninitialized(ex))
1952 uninitialized = 1;
1953 ex->ee_len = cpu_to_le16(ext4_ext_get_actual_len(ex) 1934 ex->ee_len = cpu_to_le16(ext4_ext_get_actual_len(ex)
1954 + ext4_ext_get_actual_len(newext)); 1935 + ext4_ext_get_actual_len(newext));
1955 if (uninitialized)
1956 ext4_ext_mark_uninitialized(ex);
1957 eh = path[depth].p_hdr; 1936 eh = path[depth].p_hdr;
1958 nearex = ex; 1937 nearex = ex;
1959 goto merge; 1938 goto merge;
@@ -1976,20 +1955,10 @@ prepend:
1976 if (err) 1955 if (err)
1977 return err; 1956 return err;
1978 1957
1979 /*
1980 * ext4_can_extents_be_merged should have checked
1981 * that either both extents are uninitialized, or
1982 * both aren't. Thus we need to check only one of
1983 * them here.
1984 */
1985 if (ext4_ext_is_uninitialized(ex))
1986 uninitialized = 1;
1987 ex->ee_block = newext->ee_block; 1958 ex->ee_block = newext->ee_block;
1988 ext4_ext_store_pblock(ex, ext4_ext_pblock(newext)); 1959 ext4_ext_store_pblock(ex, ext4_ext_pblock(newext));
1989 ex->ee_len = cpu_to_le16(ext4_ext_get_actual_len(ex) 1960 ex->ee_len = cpu_to_le16(ext4_ext_get_actual_len(ex)
1990 + ext4_ext_get_actual_len(newext)); 1961 + ext4_ext_get_actual_len(newext));
1991 if (uninitialized)
1992 ext4_ext_mark_uninitialized(ex);
1993 eh = path[depth].p_hdr; 1962 eh = path[depth].p_hdr;
1994 nearex = ex; 1963 nearex = ex;
1995 goto merge; 1964 goto merge;
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
index 137193ff389b..0ee59a6644e2 100644
--- a/fs/ext4/ialloc.c
+++ b/fs/ext4/ialloc.c
@@ -432,7 +432,7 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent,
432 ext4fs_dirhash(qstr->name, qstr->len, &hinfo); 432 ext4fs_dirhash(qstr->name, qstr->len, &hinfo);
433 grp = hinfo.hash; 433 grp = hinfo.hash;
434 } else 434 } else
435 get_random_bytes(&grp, sizeof(grp)); 435 grp = prandom_u32();
436 parent_group = (unsigned)grp % ngroups; 436 parent_group = (unsigned)grp % ngroups;
437 for (i = 0; i < ngroups; i++) { 437 for (i = 0; i < ngroups; i++) {
438 g = (parent_group + i) % ngroups; 438 g = (parent_group + i) % ngroups;
diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
index d9ecbf1113a7..bae987549dc3 100644
--- a/fs/ext4/inline.c
+++ b/fs/ext4/inline.c
@@ -994,11 +994,9 @@ static int ext4_add_dirent_to_inline(handle_t *handle,
994 struct inode *dir = dentry->d_parent->d_inode; 994 struct inode *dir = dentry->d_parent->d_inode;
995 const char *name = dentry->d_name.name; 995 const char *name = dentry->d_name.name;
996 int namelen = dentry->d_name.len; 996 int namelen = dentry->d_name.len;
997 unsigned short reclen;
998 int err; 997 int err;
999 struct ext4_dir_entry_2 *de; 998 struct ext4_dir_entry_2 *de;
1000 999
1001 reclen = EXT4_DIR_REC_LEN(namelen);
1002 err = ext4_find_dest_de(dir, inode, iloc->bh, 1000 err = ext4_find_dest_de(dir, inode, iloc->bh,
1003 inline_start, inline_size, 1001 inline_start, inline_size,
1004 name, namelen, &de); 1002 name, namelen, &de);
@@ -1442,6 +1440,7 @@ int ext4_read_inline_dir(struct file *file,
1442 if (ret < 0) 1440 if (ret < 0)
1443 goto out; 1441 goto out;
1444 1442
1443 ret = 0;
1445 sb = inode->i_sb; 1444 sb = inode->i_sb;
1446 parent_ino = le32_to_cpu(((struct ext4_dir_entry_2 *)dir_buf)->inode); 1445 parent_ino = le32_to_cpu(((struct ext4_dir_entry_2 *)dir_buf)->inode);
1447 offset = ctx->pos; 1446 offset = ctx->pos;
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index e274e9c1171f..075763474118 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -2178,6 +2178,9 @@ static int mpage_map_one_extent(handle_t *handle, struct mpage_da_data *mpd)
2178 * 2178 *
2179 * @handle - handle for journal operations 2179 * @handle - handle for journal operations
2180 * @mpd - extent to map 2180 * @mpd - extent to map
2181 * @give_up_on_write - we set this to true iff there is a fatal error and there
2182 * is no hope of writing the data. The caller should discard
2183 * dirty pages to avoid infinite loops.
2181 * 2184 *
2182 * The function maps extent starting at mpd->lblk of length mpd->len. If it is 2185 * The function maps extent starting at mpd->lblk of length mpd->len. If it is
2183 * delayed, blocks are allocated, if it is unwritten, we may need to convert 2186 * delayed, blocks are allocated, if it is unwritten, we may need to convert
@@ -2295,6 +2298,7 @@ static int mpage_prepare_extent_to_map(struct mpage_da_data *mpd)
2295 struct address_space *mapping = mpd->inode->i_mapping; 2298 struct address_space *mapping = mpd->inode->i_mapping;
2296 struct pagevec pvec; 2299 struct pagevec pvec;
2297 unsigned int nr_pages; 2300 unsigned int nr_pages;
2301 long left = mpd->wbc->nr_to_write;
2298 pgoff_t index = mpd->first_page; 2302 pgoff_t index = mpd->first_page;
2299 pgoff_t end = mpd->last_page; 2303 pgoff_t end = mpd->last_page;
2300 int tag; 2304 int tag;
@@ -2330,6 +2334,17 @@ static int mpage_prepare_extent_to_map(struct mpage_da_data *mpd)
2330 if (page->index > end) 2334 if (page->index > end)
2331 goto out; 2335 goto out;
2332 2336
2337 /*
2338 * Accumulated enough dirty pages? This doesn't apply
2339 * to WB_SYNC_ALL mode. For integrity sync we have to
2340 * keep going because someone may be concurrently
2341 * dirtying pages, and we might have synced a lot of
2342 * newly appeared dirty pages, but have not synced all
2343 * of the old dirty pages.
2344 */
2345 if (mpd->wbc->sync_mode == WB_SYNC_NONE && left <= 0)
2346 goto out;
2347
2333 /* If we can't merge this page, we are done. */ 2348 /* If we can't merge this page, we are done. */
2334 if (mpd->map.m_len > 0 && mpd->next_page != page->index) 2349 if (mpd->map.m_len > 0 && mpd->next_page != page->index)
2335 goto out; 2350 goto out;
@@ -2364,19 +2379,7 @@ static int mpage_prepare_extent_to_map(struct mpage_da_data *mpd)
2364 if (err <= 0) 2379 if (err <= 0)
2365 goto out; 2380 goto out;
2366 err = 0; 2381 err = 0;
2367 2382 left--;
2368 /*
2369 * Accumulated enough dirty pages? This doesn't apply
2370 * to WB_SYNC_ALL mode. For integrity sync we have to
2371 * keep going because someone may be concurrently
2372 * dirtying pages, and we might have synced a lot of
2373 * newly appeared dirty pages, but have not synced all
2374 * of the old dirty pages.
2375 */
2376 if (mpd->wbc->sync_mode == WB_SYNC_NONE &&
2377 mpd->next_page - mpd->first_page >=
2378 mpd->wbc->nr_to_write)
2379 goto out;
2380 } 2383 }
2381 pagevec_release(&pvec); 2384 pagevec_release(&pvec);
2382 cond_resched(); 2385 cond_resched();
@@ -2420,16 +2423,15 @@ static int ext4_writepages(struct address_space *mapping,
2420 * because that could violate lock ordering on umount 2423 * because that could violate lock ordering on umount
2421 */ 2424 */
2422 if (!mapping->nrpages || !mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) 2425 if (!mapping->nrpages || !mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
2423 return 0; 2426 goto out_writepages;
2424 2427
2425 if (ext4_should_journal_data(inode)) { 2428 if (ext4_should_journal_data(inode)) {
2426 struct blk_plug plug; 2429 struct blk_plug plug;
2427 int ret;
2428 2430
2429 blk_start_plug(&plug); 2431 blk_start_plug(&plug);
2430 ret = write_cache_pages(mapping, wbc, __writepage, mapping); 2432 ret = write_cache_pages(mapping, wbc, __writepage, mapping);
2431 blk_finish_plug(&plug); 2433 blk_finish_plug(&plug);
2432 return ret; 2434 goto out_writepages;
2433 } 2435 }
2434 2436
2435 /* 2437 /*
@@ -2442,8 +2444,10 @@ static int ext4_writepages(struct address_space *mapping,
2442 * *never* be called, so if that ever happens, we would want 2444 * *never* be called, so if that ever happens, we would want
2443 * the stack trace. 2445 * the stack trace.
2444 */ 2446 */
2445 if (unlikely(sbi->s_mount_flags & EXT4_MF_FS_ABORTED)) 2447 if (unlikely(sbi->s_mount_flags & EXT4_MF_FS_ABORTED)) {
2446 return -EROFS; 2448 ret = -EROFS;
2449 goto out_writepages;
2450 }
2447 2451
2448 if (ext4_should_dioread_nolock(inode)) { 2452 if (ext4_should_dioread_nolock(inode)) {
2449 /* 2453 /*
@@ -4690,6 +4694,15 @@ int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry,
4690 generic_fillattr(inode, stat); 4694 generic_fillattr(inode, stat);
4691 4695
4692 /* 4696 /*
4697 * If there is inline data in the inode, the inode will normally not
4698 * have data blocks allocated (it may have an external xattr block).
4699 * Report at least one sector for such files, so tools like tar, rsync,
4700 * others doen't incorrectly think the file is completely sparse.
4701 */
4702 if (unlikely(ext4_has_inline_data(inode)))
4703 stat->blocks += (stat->size + 511) >> 9;
4704
4705 /*
4693 * We can't update i_blocks if the block allocation is delayed 4706 * We can't update i_blocks if the block allocation is delayed
4694 * otherwise in the case of system crash before the real block 4707 * otherwise in the case of system crash before the real block
4695 * allocation is done, we will have i_blocks inconsistent with 4708 * allocation is done, we will have i_blocks inconsistent with
@@ -4700,9 +4713,8 @@ int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry,
4700 * blocks for this file. 4713 * blocks for this file.
4701 */ 4714 */
4702 delalloc_blocks = EXT4_C2B(EXT4_SB(inode->i_sb), 4715 delalloc_blocks = EXT4_C2B(EXT4_SB(inode->i_sb),
4703 EXT4_I(inode)->i_reserved_data_blocks); 4716 EXT4_I(inode)->i_reserved_data_blocks);
4704 4717 stat->blocks += delalloc_blocks << (inode->i_sb->s_blocksize_bits - 9);
4705 stat->blocks += delalloc_blocks << (inode->i_sb->s_blocksize_bits-9);
4706 return 0; 4718 return 0;
4707} 4719}
4708 4720
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index a41e3ba8cfaa..4d113efa024c 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -4794,8 +4794,8 @@ do_more:
4794 " group:%d block:%d count:%lu failed" 4794 " group:%d block:%d count:%lu failed"
4795 " with %d", block_group, bit, count, 4795 " with %d", block_group, bit, count,
4796 err); 4796 err);
4797 } 4797 } else
4798 4798 EXT4_MB_GRP_CLEAR_TRIMMED(e4b.bd_info);
4799 4799
4800 ext4_lock_group(sb, block_group); 4800 ext4_lock_group(sb, block_group);
4801 mb_clear_bits(bitmap_bh->b_data, bit, count_clusters); 4801 mb_clear_bits(bitmap_bh->b_data, bit, count_clusters);
diff --git a/fs/ext4/mmp.c b/fs/ext4/mmp.c
index 214461e42a05..04434ad3e8e0 100644
--- a/fs/ext4/mmp.c
+++ b/fs/ext4/mmp.c
@@ -259,7 +259,7 @@ static unsigned int mmp_new_seq(void)
259 u32 new_seq; 259 u32 new_seq;
260 260
261 do { 261 do {
262 get_random_bytes(&new_seq, sizeof(u32)); 262 new_seq = prandom_u32();
263 } while (new_seq > EXT4_MMP_SEQ_MAX); 263 } while (new_seq > EXT4_MMP_SEQ_MAX);
264 264
265 return new_seq; 265 return new_seq;
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
index d7d0c7b46ed4..d488f80ee32d 100644
--- a/fs/ext4/page-io.c
+++ b/fs/ext4/page-io.c
@@ -197,14 +197,15 @@ static void dump_completed_IO(struct inode *inode, struct list_head *head)
197static void ext4_add_complete_io(ext4_io_end_t *io_end) 197static void ext4_add_complete_io(ext4_io_end_t *io_end)
198{ 198{
199 struct ext4_inode_info *ei = EXT4_I(io_end->inode); 199 struct ext4_inode_info *ei = EXT4_I(io_end->inode);
200 struct ext4_sb_info *sbi = EXT4_SB(io_end->inode->i_sb);
200 struct workqueue_struct *wq; 201 struct workqueue_struct *wq;
201 unsigned long flags; 202 unsigned long flags;
202 203
203 /* Only reserved conversions from writeback should enter here */ 204 /* Only reserved conversions from writeback should enter here */
204 WARN_ON(!(io_end->flag & EXT4_IO_END_UNWRITTEN)); 205 WARN_ON(!(io_end->flag & EXT4_IO_END_UNWRITTEN));
205 WARN_ON(!io_end->handle); 206 WARN_ON(!io_end->handle && sbi->s_journal);
206 spin_lock_irqsave(&ei->i_completed_io_lock, flags); 207 spin_lock_irqsave(&ei->i_completed_io_lock, flags);
207 wq = EXT4_SB(io_end->inode->i_sb)->rsv_conversion_wq; 208 wq = sbi->rsv_conversion_wq;
208 if (list_empty(&ei->i_rsv_conversion_list)) 209 if (list_empty(&ei->i_rsv_conversion_list))
209 queue_work(wq, &ei->i_rsv_conversion_work); 210 queue_work(wq, &ei->i_rsv_conversion_work);
210 list_add_tail(&io_end->list, &ei->i_rsv_conversion_list); 211 list_add_tail(&io_end->list, &ei->i_rsv_conversion_list);
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 2c2e6cbc6bed..c977f4e4e63b 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -411,20 +411,26 @@ static void ext4_handle_error(struct super_block *sb)
411 sb->s_id); 411 sb->s_id);
412} 412}
413 413
414#define ext4_error_ratelimit(sb) \
415 ___ratelimit(&(EXT4_SB(sb)->s_err_ratelimit_state), \
416 "EXT4-fs error")
417
414void __ext4_error(struct super_block *sb, const char *function, 418void __ext4_error(struct super_block *sb, const char *function,
415 unsigned int line, const char *fmt, ...) 419 unsigned int line, const char *fmt, ...)
416{ 420{
417 struct va_format vaf; 421 struct va_format vaf;
418 va_list args; 422 va_list args;
419 423
420 va_start(args, fmt); 424 if (ext4_error_ratelimit(sb)) {
421 vaf.fmt = fmt; 425 va_start(args, fmt);
422 vaf.va = &args; 426 vaf.fmt = fmt;
423 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: comm %s: %pV\n", 427 vaf.va = &args;
424 sb->s_id, function, line, current->comm, &vaf); 428 printk(KERN_CRIT
425 va_end(args); 429 "EXT4-fs error (device %s): %s:%d: comm %s: %pV\n",
430 sb->s_id, function, line, current->comm, &vaf);
431 va_end(args);
432 }
426 save_error_info(sb, function, line); 433 save_error_info(sb, function, line);
427
428 ext4_handle_error(sb); 434 ext4_handle_error(sb);
429} 435}
430 436
@@ -438,22 +444,23 @@ void __ext4_error_inode(struct inode *inode, const char *function,
438 444
439 es->s_last_error_ino = cpu_to_le32(inode->i_ino); 445 es->s_last_error_ino = cpu_to_le32(inode->i_ino);
440 es->s_last_error_block = cpu_to_le64(block); 446 es->s_last_error_block = cpu_to_le64(block);
447 if (ext4_error_ratelimit(inode->i_sb)) {
448 va_start(args, fmt);
449 vaf.fmt = fmt;
450 vaf.va = &args;
451 if (block)
452 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: "
453 "inode #%lu: block %llu: comm %s: %pV\n",
454 inode->i_sb->s_id, function, line, inode->i_ino,
455 block, current->comm, &vaf);
456 else
457 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: "
458 "inode #%lu: comm %s: %pV\n",
459 inode->i_sb->s_id, function, line, inode->i_ino,
460 current->comm, &vaf);
461 va_end(args);
462 }
441 save_error_info(inode->i_sb, function, line); 463 save_error_info(inode->i_sb, function, line);
442 va_start(args, fmt);
443 vaf.fmt = fmt;
444 vaf.va = &args;
445 if (block)
446 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: "
447 "inode #%lu: block %llu: comm %s: %pV\n",
448 inode->i_sb->s_id, function, line, inode->i_ino,
449 block, current->comm, &vaf);
450 else
451 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: "
452 "inode #%lu: comm %s: %pV\n",
453 inode->i_sb->s_id, function, line, inode->i_ino,
454 current->comm, &vaf);
455 va_end(args);
456
457 ext4_handle_error(inode->i_sb); 464 ext4_handle_error(inode->i_sb);
458} 465}
459 466
@@ -469,27 +476,28 @@ void __ext4_error_file(struct file *file, const char *function,
469 476
470 es = EXT4_SB(inode->i_sb)->s_es; 477 es = EXT4_SB(inode->i_sb)->s_es;
471 es->s_last_error_ino = cpu_to_le32(inode->i_ino); 478 es->s_last_error_ino = cpu_to_le32(inode->i_ino);
479 if (ext4_error_ratelimit(inode->i_sb)) {
480 path = d_path(&(file->f_path), pathname, sizeof(pathname));
481 if (IS_ERR(path))
482 path = "(unknown)";
483 va_start(args, fmt);
484 vaf.fmt = fmt;
485 vaf.va = &args;
486 if (block)
487 printk(KERN_CRIT
488 "EXT4-fs error (device %s): %s:%d: inode #%lu: "
489 "block %llu: comm %s: path %s: %pV\n",
490 inode->i_sb->s_id, function, line, inode->i_ino,
491 block, current->comm, path, &vaf);
492 else
493 printk(KERN_CRIT
494 "EXT4-fs error (device %s): %s:%d: inode #%lu: "
495 "comm %s: path %s: %pV\n",
496 inode->i_sb->s_id, function, line, inode->i_ino,
497 current->comm, path, &vaf);
498 va_end(args);
499 }
472 save_error_info(inode->i_sb, function, line); 500 save_error_info(inode->i_sb, function, line);
473 path = d_path(&(file->f_path), pathname, sizeof(pathname));
474 if (IS_ERR(path))
475 path = "(unknown)";
476 va_start(args, fmt);
477 vaf.fmt = fmt;
478 vaf.va = &args;
479 if (block)
480 printk(KERN_CRIT
481 "EXT4-fs error (device %s): %s:%d: inode #%lu: "
482 "block %llu: comm %s: path %s: %pV\n",
483 inode->i_sb->s_id, function, line, inode->i_ino,
484 block, current->comm, path, &vaf);
485 else
486 printk(KERN_CRIT
487 "EXT4-fs error (device %s): %s:%d: inode #%lu: "
488 "comm %s: path %s: %pV\n",
489 inode->i_sb->s_id, function, line, inode->i_ino,
490 current->comm, path, &vaf);
491 va_end(args);
492
493 ext4_handle_error(inode->i_sb); 501 ext4_handle_error(inode->i_sb);
494} 502}
495 503
@@ -543,11 +551,13 @@ void __ext4_std_error(struct super_block *sb, const char *function,
543 (sb->s_flags & MS_RDONLY)) 551 (sb->s_flags & MS_RDONLY))
544 return; 552 return;
545 553
546 errstr = ext4_decode_error(sb, errno, nbuf); 554 if (ext4_error_ratelimit(sb)) {
547 printk(KERN_CRIT "EXT4-fs error (device %s) in %s:%d: %s\n", 555 errstr = ext4_decode_error(sb, errno, nbuf);
548 sb->s_id, function, line, errstr); 556 printk(KERN_CRIT "EXT4-fs error (device %s) in %s:%d: %s\n",
549 save_error_info(sb, function, line); 557 sb->s_id, function, line, errstr);
558 }
550 559
560 save_error_info(sb, function, line);
551 ext4_handle_error(sb); 561 ext4_handle_error(sb);
552} 562}
553 563
@@ -597,6 +607,9 @@ void __ext4_msg(struct super_block *sb,
597 struct va_format vaf; 607 struct va_format vaf;
598 va_list args; 608 va_list args;
599 609
610 if (!___ratelimit(&(EXT4_SB(sb)->s_msg_ratelimit_state), "EXT4-fs"))
611 return;
612
600 va_start(args, fmt); 613 va_start(args, fmt);
601 vaf.fmt = fmt; 614 vaf.fmt = fmt;
602 vaf.va = &args; 615 vaf.va = &args;
@@ -610,6 +623,10 @@ void __ext4_warning(struct super_block *sb, const char *function,
610 struct va_format vaf; 623 struct va_format vaf;
611 va_list args; 624 va_list args;
612 625
626 if (!___ratelimit(&(EXT4_SB(sb)->s_warning_ratelimit_state),
627 "EXT4-fs warning"))
628 return;
629
613 va_start(args, fmt); 630 va_start(args, fmt);
614 vaf.fmt = fmt; 631 vaf.fmt = fmt;
615 vaf.va = &args; 632 vaf.va = &args;
@@ -633,18 +650,20 @@ __acquires(bitlock)
633 es->s_last_error_block = cpu_to_le64(block); 650 es->s_last_error_block = cpu_to_le64(block);
634 __save_error_info(sb, function, line); 651 __save_error_info(sb, function, line);
635 652
636 va_start(args, fmt); 653 if (ext4_error_ratelimit(sb)) {
637 654 va_start(args, fmt);
638 vaf.fmt = fmt; 655 vaf.fmt = fmt;
639 vaf.va = &args; 656 vaf.va = &args;
640 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: group %u, ", 657 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: group %u, ",
641 sb->s_id, function, line, grp); 658 sb->s_id, function, line, grp);
642 if (ino) 659 if (ino)
643 printk(KERN_CONT "inode %lu: ", ino); 660 printk(KERN_CONT "inode %lu: ", ino);
644 if (block) 661 if (block)
645 printk(KERN_CONT "block %llu:", (unsigned long long) block); 662 printk(KERN_CONT "block %llu:",
646 printk(KERN_CONT "%pV\n", &vaf); 663 (unsigned long long) block);
647 va_end(args); 664 printk(KERN_CONT "%pV\n", &vaf);
665 va_end(args);
666 }
648 667
649 if (test_opt(sb, ERRORS_CONT)) { 668 if (test_opt(sb, ERRORS_CONT)) {
650 ext4_commit_super(sb, 0); 669 ext4_commit_super(sb, 0);
@@ -2606,6 +2625,12 @@ EXT4_RW_ATTR_SBI_UI(mb_group_prealloc, s_mb_group_prealloc);
2606EXT4_DEPRECATED_ATTR(max_writeback_mb_bump, 128); 2625EXT4_DEPRECATED_ATTR(max_writeback_mb_bump, 128);
2607EXT4_RW_ATTR_SBI_UI(extent_max_zeroout_kb, s_extent_max_zeroout_kb); 2626EXT4_RW_ATTR_SBI_UI(extent_max_zeroout_kb, s_extent_max_zeroout_kb);
2608EXT4_ATTR(trigger_fs_error, 0200, NULL, trigger_test_error); 2627EXT4_ATTR(trigger_fs_error, 0200, NULL, trigger_test_error);
2628EXT4_RW_ATTR_SBI_UI(err_ratelimit_interval_ms, s_err_ratelimit_state.interval);
2629EXT4_RW_ATTR_SBI_UI(err_ratelimit_burst, s_err_ratelimit_state.burst);
2630EXT4_RW_ATTR_SBI_UI(warning_ratelimit_interval_ms, s_warning_ratelimit_state.interval);
2631EXT4_RW_ATTR_SBI_UI(warning_ratelimit_burst, s_warning_ratelimit_state.burst);
2632EXT4_RW_ATTR_SBI_UI(msg_ratelimit_interval_ms, s_msg_ratelimit_state.interval);
2633EXT4_RW_ATTR_SBI_UI(msg_ratelimit_burst, s_msg_ratelimit_state.burst);
2609 2634
2610static struct attribute *ext4_attrs[] = { 2635static struct attribute *ext4_attrs[] = {
2611 ATTR_LIST(delayed_allocation_blocks), 2636 ATTR_LIST(delayed_allocation_blocks),
@@ -2623,6 +2648,12 @@ static struct attribute *ext4_attrs[] = {
2623 ATTR_LIST(max_writeback_mb_bump), 2648 ATTR_LIST(max_writeback_mb_bump),
2624 ATTR_LIST(extent_max_zeroout_kb), 2649 ATTR_LIST(extent_max_zeroout_kb),
2625 ATTR_LIST(trigger_fs_error), 2650 ATTR_LIST(trigger_fs_error),
2651 ATTR_LIST(err_ratelimit_interval_ms),
2652 ATTR_LIST(err_ratelimit_burst),
2653 ATTR_LIST(warning_ratelimit_interval_ms),
2654 ATTR_LIST(warning_ratelimit_burst),
2655 ATTR_LIST(msg_ratelimit_interval_ms),
2656 ATTR_LIST(msg_ratelimit_burst),
2626 NULL, 2657 NULL,
2627}; 2658};
2628 2659
@@ -3037,7 +3068,6 @@ static struct ext4_li_request *ext4_li_request_new(struct super_block *sb,
3037{ 3068{
3038 struct ext4_sb_info *sbi = EXT4_SB(sb); 3069 struct ext4_sb_info *sbi = EXT4_SB(sb);
3039 struct ext4_li_request *elr; 3070 struct ext4_li_request *elr;
3040 unsigned long rnd;
3041 3071
3042 elr = kzalloc(sizeof(*elr), GFP_KERNEL); 3072 elr = kzalloc(sizeof(*elr), GFP_KERNEL);
3043 if (!elr) 3073 if (!elr)
@@ -3052,10 +3082,8 @@ static struct ext4_li_request *ext4_li_request_new(struct super_block *sb,
3052 * spread the inode table initialization requests 3082 * spread the inode table initialization requests
3053 * better. 3083 * better.
3054 */ 3084 */
3055 get_random_bytes(&rnd, sizeof(rnd)); 3085 elr->lr_next_sched = jiffies + (prandom_u32() %
3056 elr->lr_next_sched = jiffies + (unsigned long)rnd % 3086 (EXT4_DEF_LI_MAX_START_DELAY * HZ));
3057 (EXT4_DEF_LI_MAX_START_DELAY * HZ);
3058
3059 return elr; 3087 return elr;
3060} 3088}
3061 3089
@@ -4118,6 +4146,11 @@ no_journal:
4118 if (es->s_error_count) 4146 if (es->s_error_count)
4119 mod_timer(&sbi->s_err_report, jiffies + 300*HZ); /* 5 minutes */ 4147 mod_timer(&sbi->s_err_report, jiffies + 300*HZ); /* 5 minutes */
4120 4148
4149 /* Enable message ratelimiting. Default is 10 messages per 5 secs. */
4150 ratelimit_state_init(&sbi->s_err_ratelimit_state, 5 * HZ, 10);
4151 ratelimit_state_init(&sbi->s_warning_ratelimit_state, 5 * HZ, 10);
4152 ratelimit_state_init(&sbi->s_msg_ratelimit_state, 5 * HZ, 10);
4153
4121 kfree(orig_data); 4154 kfree(orig_data);
4122 return 0; 4155 return 0;
4123 4156
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
index 03e9bebba198..1423c4816a47 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
@@ -1352,6 +1352,7 @@ retry:
1352 new_extra_isize = s_min_extra_isize; 1352 new_extra_isize = s_min_extra_isize;
1353 kfree(is); is = NULL; 1353 kfree(is); is = NULL;
1354 kfree(bs); bs = NULL; 1354 kfree(bs); bs = NULL;
1355 brelse(bh);
1355 goto retry; 1356 goto retry;
1356 } 1357 }
1357 error = -1; 1358 error = -1;