1 diff -urpN linux-stage.orig/fs/ext4/balloc.c linux-stage/fs/ext4/balloc.c
2 --- linux-stage.orig/fs/ext4/balloc.c 2011-12-28 08:18:31.000000000 -0500
3 +++ linux-stage/fs/ext4/balloc.c 2011-12-28 11:24:07.000000000 -0500
4 @@ -97,7 +97,7 @@ unsigned ext4_init_block_bitmap(struct s
5 /* If checksum is bad mark all blocks used to prevent allocation
6 * essentially implementing a per-group read-only flag. */
7 if (!ext4_group_desc_csum_verify(sbi, block_group, gdp)) {
8 - ext4_error(sb, __func__,
10 "Checksum bad for group %u", block_group);
11 ext4_free_blks_set(sb, gdp, 0);
12 ext4_free_inodes_set(sb, gdp, 0);
13 @@ -207,10 +207,8 @@ struct ext4_group_desc * ext4_get_group_
14 struct ext4_sb_info *sbi = EXT4_SB(sb);
16 if (block_group >= ngroups) {
17 - ext4_error(sb, "ext4_get_group_desc",
18 - "block_group >= groups_count - "
19 - "block_group = %u, groups_count = %u",
20 - block_group, ngroups);
21 + ext4_error(sb, "block_group >= groups_count - block_group = %u,"
22 + " groups_count = %u", block_group, ngroups);
26 @@ -218,8 +216,7 @@ struct ext4_group_desc * ext4_get_group_
27 group_desc = block_group >> EXT4_DESC_PER_BLOCK_BITS(sb);
28 offset = block_group & (EXT4_DESC_PER_BLOCK(sb) - 1);
29 if (!sbi->s_group_desc[group_desc]) {
30 - ext4_error(sb, "ext4_get_group_desc",
31 - "Group descriptor not loaded - "
32 + ext4_error(sb, "Group descriptor not loaded - "
33 "block_group = %u, group_desc = %u, desc = %u",
34 block_group, group_desc, offset);
36 @@ -280,7 +277,7 @@ static int ext4_valid_block_bitmap(struc
40 - ext4_error(sb, __func__,
42 "Invalid block bitmap - "
43 "block_group = %d, block = %llu",
44 block_group, bitmap_blk);
45 @@ -309,7 +306,7 @@ ext4_read_block_bitmap(struct super_bloc
46 bitmap_blk = ext4_block_bitmap(sb, desc);
47 bh = sb_getblk(sb, bitmap_blk);
49 - ext4_error(sb, __func__,
51 "Cannot read block bitmap - "
52 "block_group = %u, block_bitmap = %llu",
53 block_group, bitmap_blk);
54 @@ -352,7 +349,7 @@ ext4_read_block_bitmap(struct super_bloc
55 set_bitmap_uptodate(bh);
56 if (bh_submit_read(bh) < 0) {
58 - ext4_error(sb, __func__,
60 "Cannot read block bitmap - "
61 "block_group = %u, block_bitmap = %llu",
62 block_group, bitmap_blk);
63 @@ -417,7 +414,7 @@ void ext4_add_groupblocks(handle_t *hand
64 in_range(block, ext4_inode_table(sb, desc), sbi->s_itb_per_group) ||
65 in_range(block + count - 1, ext4_inode_table(sb, desc),
66 sbi->s_itb_per_group)) {
67 - ext4_error(sb, __func__,
69 "Adding blocks in system zones - "
70 "Block = %llu, count = %lu",
72 @@ -451,7 +448,7 @@ void ext4_add_groupblocks(handle_t *hand
73 BUFFER_TRACE(bitmap_bh, "clear bit");
74 if (!ext4_clear_bit_atomic(ext4_group_lock_ptr(sb, block_group),
75 bit + i, bitmap_bh->b_data)) {
76 - ext4_error(sb, __func__,
78 "bit already cleared for block %llu",
79 (ext4_fsblk_t)(block + i));
80 BUFFER_TRACE(bitmap_bh, "bit already cleared");
81 diff -urpN linux-stage.orig/fs/ext4/dir.c linux-stage/fs/ext4/dir.c
82 --- linux-stage.orig/fs/ext4/dir.c 2011-12-28 08:18:31.000000000 -0500
83 +++ linux-stage/fs/ext4/dir.c 2011-12-28 11:24:07.000000000 -0500
84 @@ -83,7 +83,7 @@ int ext4_check_dir_entry(const char *fun
85 error_msg = "inode out of bounds";
87 if (error_msg != NULL)
88 - ext4_error(dir->i_sb, function,
89 + ext4_error(dir->i_sb,
90 "bad entry in directory #%lu: %s - block=%llu"
91 "offset=%u(%u), inode=%u, rec_len=%d, name_len=%d",
92 dir->i_ino, error_msg,
93 @@ -152,7 +152,7 @@ static int ext4_readdir(struct file *fil
97 - ext4_error(sb, __func__, "directory #%lu "
98 + ext4_error(sb, "directory #%lu "
99 "contains a hole at offset %Lu",
101 (unsigned long long) filp->f_pos);
102 diff -urpN linux-stage.orig/fs/ext4/ext4_extents.h linux-stage/fs/ext4/ext4_extents.h
103 --- linux-stage.orig/fs/ext4/ext4_extents.h 2011-12-28 08:18:31.000000000 -0500
104 +++ linux-stage/fs/ext4/ext4_extents.h 2011-12-28 11:24:07.000000000 -0500
105 @@ -138,7 +138,7 @@ typedef int (*ext_prepare_callback)(stru
108 /* Maximum logical block in a file; ext4_extent's ee_block is __le32 */
109 -#define EXT_MAX_BLOCK 0xffffffff
110 +#define EXT_MAX_BLOCKS 0xffffffff
113 * EXT_INIT_MAX_LEN is the maximum number of blocks we can have in an
114 diff -urpN linux-stage.orig/fs/ext4/ext4.h linux-stage/fs/ext4/ext4.h
115 --- linux-stage.orig/fs/ext4/ext4.h 2011-12-28 08:18:31.000000000 -0500
116 +++ linux-stage/fs/ext4/ext4.h 2011-12-28 11:24:07.000000000 -0500
118 #include <linux/quota.h>
119 #include <linux/rwsem.h>
120 #include <linux/rbtree.h>
121 +#include <linux/kernel.h>
122 #include <linux/seqlock.h>
123 #include <linux/mutex.h>
124 #include <linux/timer.h>
126 #define ext4_debug(f, a...) do {} while (0)
129 +#define EXT4_ERROR_INODE(inode, fmt, a...) \
130 + ext4_error_inode(__func__, (inode), (fmt), ## a);
132 +#define EXT4_ERROR_FILE(file, fmt, a...) \
133 + ext4_error_file(__func__, (file), (fmt), ## a);
135 /* data type for block offset of block group */
136 typedef int ext4_grpblk_t;
138 @@ -1509,6 +1516,7 @@ extern struct buffer_head *ext4_read_ino
139 ext4_group_t block_group);
142 +struct fstrim_range;
143 extern long ext4_mb_stats;
144 extern long ext4_mb_max_to_scan;
145 extern int ext4_mb_init(struct super_block *, int);
146 @@ -1526,6 +1534,8 @@ extern int ext4_mb_add_groupinfo(struct
147 extern int ext4_mb_get_buddy_cache_lock(struct super_block *, ext4_group_t);
148 extern void ext4_mb_put_buddy_cache_lock(struct super_block *,
150 +extern int ext4_trim_fs(struct super_block *, struct fstrim_range *);
153 int ext4_forget(handle_t *handle, int is_metadata, struct inode *inode,
154 struct buffer_head *bh, ext4_fsblk_t blocknr);
155 @@ -1586,13 +1596,17 @@ extern int ext4_group_extend(struct supe
156 ext4_fsblk_t n_blocks_count);
159 -extern void ext4_error(struct super_block *, const char *, const char *, ...)
160 +extern void __ext4_error(struct super_block *, const char *, const char *, ...)
161 + __attribute__ ((format (printf, 3, 4)));
162 +#define ext4_error(sb, message...) __ext4_error(sb, __func__, ## message)
163 +extern void ext4_error_inode(const char *, struct inode *, const char *, ...)
164 __attribute__ ((format (printf, 3, 4)));
165 extern void __ext4_std_error(struct super_block *, const char *, int);
166 extern void ext4_abort(struct super_block *, const char *, const char *, ...)
167 __attribute__ ((format (printf, 3, 4)));
168 -extern void ext4_warning(struct super_block *, const char *, const char *, ...)
169 +extern void __ext4_warning(struct super_block *, const char *, const char *, ...)
170 __attribute__ ((format (printf, 3, 4)));
171 +#define ext4_warning(sb, message...) __ext4_warning(sb, __func__, ## message)
172 extern void ext4_msg(struct super_block *, const char *, const char *, ...)
173 __attribute__ ((format (printf, 3, 4)));
174 extern void ext4_grp_locked_error(struct super_block *, ext4_group_t,
175 diff -urpN linux-stage.orig/fs/ext4/ext4_jbd2.c linux-stage/fs/ext4/ext4_jbd2.c
176 --- linux-stage.orig/fs/ext4/ext4_jbd2.c 2011-12-28 08:18:31.000000000 -0500
177 +++ linux-stage/fs/ext4/ext4_jbd2.c 2011-12-28 11:24:07.000000000 -0500
178 @@ -96,7 +96,7 @@ int __ext4_handle_dirty_metadata(const c
179 if (inode && inode_needs_sync(inode)) {
180 sync_dirty_buffer(bh);
181 if (buffer_req(bh) && !buffer_uptodate(bh)) {
182 - ext4_error(inode->i_sb, __func__,
183 + ext4_error(inode->i_sb,
184 "IO error syncing inode, "
185 "inode=%lu, block=%llu",
187 diff -urpN linux-stage.orig/fs/ext4/extents.c linux-stage/fs/ext4/extents.c
188 --- linux-stage.orig/fs/ext4/extents.c 2011-12-28 08:18:31.000000000 -0500
189 +++ linux-stage/fs/ext4/extents.c 2011-12-28 11:24:07.000000000 -0500
190 @@ -437,7 +437,7 @@ static int __ext4_ext_check(const char *
194 - ext4_error(inode->i_sb, function,
195 + ext4_error(inode->i_sb,
196 "bad header/extent in inode #%lu: %s - magic %x, "
197 "entries %u, max %u(%u), depth %u(%u)",
198 inode->i_ino, error_msg, le16_to_cpu(eh->eh_magic),
199 @@ -1329,7 +1329,7 @@ got_index:
202 * ext4_ext_next_allocated_block:
203 - * returns allocated block in subsequent extent or EXT_MAX_BLOCK.
204 + * returns allocated block in subsequent extent or EXT_MAX_BLOCKS.
205 * NOTE: it considers block number from index entry as
206 * allocated block. Thus, index entries have to be consistent
208 @@ -1343,7 +1343,7 @@ ext4_ext_next_allocated_block(struct ext
209 depth = path->p_depth;
211 if (depth == 0 && path->p_ext == NULL)
212 - return EXT_MAX_BLOCK;
213 + return EXT_MAX_BLOCKS;
216 if (depth == path->p_depth) {
217 @@ -1360,12 +1360,12 @@ ext4_ext_next_allocated_block(struct ext
221 - return EXT_MAX_BLOCK;
222 + return EXT_MAX_BLOCKS;
226 * ext4_ext_next_leaf_block:
227 - * returns first allocated block from next leaf or EXT_MAX_BLOCK
228 + * returns first allocated block from next leaf or EXT_MAX_BLOCKS
230 static ext4_lblk_t ext4_ext_next_leaf_block(struct inode *inode,
231 struct ext4_ext_path *path)
232 @@ -1377,7 +1377,7 @@ static ext4_lblk_t ext4_ext_next_leaf_bl
234 /* zero-tree has no leaf blocks at all */
236 - return EXT_MAX_BLOCK;
237 + return EXT_MAX_BLOCKS;
239 /* go to index block */
241 @@ -1390,7 +1390,7 @@ static ext4_lblk_t ext4_ext_next_leaf_bl
245 - return EXT_MAX_BLOCK;
246 + return EXT_MAX_BLOCKS;
250 @@ -1534,7 +1534,7 @@ int ext4_ext_try_to_merge(struct inode *
252 WARN_ON(eh->eh_entries == 0);
254 - ext4_error(inode->i_sb, "ext4_ext_try_to_merge",
255 + ext4_error(inode->i_sb,
256 "inode#%lu, eh->eh_entries = 0!", inode->i_ino);
259 @@ -1570,13 +1570,13 @@ unsigned int ext4_ext_check_overlap(stru
262 b2 = ext4_ext_next_allocated_block(path);
263 - if (b2 == EXT_MAX_BLOCK)
264 + if (b2 == EXT_MAX_BLOCKS)
268 /* check for wrap through zero on extent logical start block*/
269 if (b1 + len1 < b1) {
270 - len1 = EXT_MAX_BLOCK - b1;
271 + len1 = EXT_MAX_BLOCKS - b1;
272 newext->ee_len = cpu_to_le16(len1);
275 @@ -1652,7 +1652,7 @@ repeat:
276 fex = EXT_LAST_EXTENT(eh);
277 next = ext4_ext_next_leaf_block(inode, path);
278 if (le32_to_cpu(newext->ee_block) > le32_to_cpu(fex->ee_block)
279 - && next != EXT_MAX_BLOCK) {
280 + && next != EXT_MAX_BLOCKS) {
281 ext_debug("next leaf block - %d\n", next);
282 BUG_ON(npath != NULL);
283 npath = ext4_ext_find_extent(inode, next, NULL);
284 @@ -1771,7 +1771,7 @@ int ext4_ext_walk_space(struct inode *in
285 BUG_ON(func == NULL);
286 BUG_ON(inode == NULL);
288 - while (block < last && block != EXT_MAX_BLOCK) {
289 + while (block < last && block != EXT_MAX_BLOCKS) {
291 /* find extent for this block */
292 down_read(&EXT4_I(inode)->i_data_sem);
293 @@ -1784,7 +1784,11 @@ int ext4_ext_walk_space(struct inode *in
296 depth = ext_depth(inode);
297 - BUG_ON(path[depth].p_hdr == NULL);
298 + if (unlikely(path[depth].p_hdr == NULL)) {
299 + EXT4_ERROR_INODE(inode, "path[%d].p_hdr == NULL", depth);
303 ex = path[depth].p_ext;
304 next = ext4_ext_next_allocated_block(path);
306 @@ -1835,7 +1839,11 @@ int ext4_ext_walk_space(struct inode *in
307 cbex.ec_type = EXT4_EXT_CACHE_EXTENT;
310 - BUG_ON(cbex.ec_len == 0);
311 + if (unlikely(cbex.ec_len == 0)) {
312 + EXT4_ERROR_INODE(inode, "cbex.ec_len == 0");
316 err = func(inode, path, &cbex, ex, cbdata);
317 ext4_ext_drop_refs(path);
319 @@ -1899,7 +1907,7 @@ ext4_ext_put_gap_in_cache(struct inode *
321 /* there is no extent yet, so gap is [0;-] */
323 - len = EXT_MAX_BLOCK;
324 + len = EXT_MAX_BLOCKS;
325 ext_debug("cache gap(whole file):");
326 } else if (block < le32_to_cpu(ex->ee_block)) {
328 @@ -2144,8 +2152,8 @@ ext4_ext_rm_leaf(handle_t *handle, struc
329 path[depth].p_ext = ex;
331 a = ex_ee_block > start ? ex_ee_block : start;
332 - b = ex_ee_block + ex_ee_len - 1 < EXT_MAX_BLOCK ?
333 - ex_ee_block + ex_ee_len - 1 : EXT_MAX_BLOCK;
334 + b = ex_ee_block + ex_ee_len - 1 < EXT_MAX_BLOCKS ?
335 + ex_ee_block + ex_ee_len - 1 : EXT_MAX_BLOCKS;
337 ext_debug(" border %u:%u\n", a, b);
339 @@ -3284,7 +3292,7 @@ int ext4_ext_get_blocks(handle_t *handle
340 * this is why assert can't be put in ext4_ext_find_extent()
342 if (path[depth].p_ext == NULL && depth != 0) {
343 - ext4_error(inode->i_sb, __func__, "bad extent address "
344 + ext4_error(inode->i_sb, "bad extent address "
345 "inode: %lu, iblock: %lu, depth: %d",
346 inode->i_ino, (unsigned long) iblock, depth);
348 @@ -3415,7 +3423,7 @@ int ext4_ext_get_blocks(handle_t *handle
350 if (unlikely(ext4_test_inode_flag(inode, EXT4_INODE_EOFBLOCKS))) {
351 if (unlikely(!eh->eh_entries)) {
352 - ext4_error(inode->i_sb, __func__,
353 + ext4_error(inode->i_sb,
354 "inode#%lu, eh->eh_entries = 0 and "
355 "EOFBLOCKS_FL set", inode->i_ino);
357 @@ -3782,15 +3790,15 @@ static int ext4_ext_fiemap_cb(struct ino
358 flags |= FIEMAP_EXTENT_UNWRITTEN;
361 - * If this extent reaches EXT_MAX_BLOCK, it must be last.
362 + * If this extent reaches EXT_MAX_BLOCKS, it must be last.
364 - * Or if ext4_ext_next_allocated_block is EXT_MAX_BLOCK,
365 + * Or if ext4_ext_next_allocated_block is EXT_MAX_BLOCKS,
366 * this also indicates no more allocated blocks.
368 - * XXX this might miss a single-block extent at EXT_MAX_BLOCK
369 + * XXX this might miss a single-block extent at EXT_MAX_BLOCKS
371 - if (ext4_ext_next_allocated_block(path) == EXT_MAX_BLOCK ||
372 - newex->ec_block + newex->ec_len - 1 == EXT_MAX_BLOCK) {
373 + if (ext4_ext_next_allocated_block(path) == EXT_MAX_BLOCKS ||
374 + newex->ec_block + newex->ec_len - 1 == EXT_MAX_BLOCKS) {
375 loff_t size = i_size_read(inode);
376 loff_t bs = EXT4_BLOCK_SIZE(inode->i_sb);
378 @@ -3870,8 +3878,8 @@ int ext4_fiemap(struct inode *inode, str
380 start_blk = start >> inode->i_sb->s_blocksize_bits;
381 last_blk = (start + len - 1) >> inode->i_sb->s_blocksize_bits;
382 - if (last_blk >= EXT_MAX_BLOCK)
383 - last_blk = EXT_MAX_BLOCK-1;
384 + if (last_blk >= EXT_MAX_BLOCKS)
385 + last_blk = EXT_MAX_BLOCKS-1;
386 len_blks = ((ext4_lblk_t) last_blk) - start_blk + 1;
389 diff -urpN linux-stage.orig/fs/ext4/ialloc.c linux-stage/fs/ext4/ialloc.c
390 --- linux-stage.orig/fs/ext4/ialloc.c 2011-12-28 08:18:31.000000000 -0500
391 +++ linux-stage/fs/ext4/ialloc.c 2011-12-28 11:24:07.000000000 -0500
392 @@ -76,7 +76,7 @@ unsigned ext4_init_inode_bitmap(struct s
393 /* If checksum is bad mark all blocks and inodes use to prevent
394 * allocation, essentially implementing a per-group read-only flag. */
395 if (!ext4_group_desc_csum_verify(sbi, block_group, gdp)) {
396 - ext4_error(sb, __func__, "Checksum bad for group %u",
397 + ext4_error(sb, "Checksum bad for group %u",
399 ext4_free_blks_set(sb, gdp, 0);
400 ext4_free_inodes_set(sb, gdp, 0);
401 @@ -111,7 +111,7 @@ ext4_read_inode_bitmap(struct super_bloc
402 bitmap_blk = ext4_inode_bitmap(sb, desc);
403 bh = sb_getblk(sb, bitmap_blk);
405 - ext4_error(sb, __func__,
407 "Cannot read inode bitmap - "
408 "block_group = %u, inode_bitmap = %llu",
409 block_group, bitmap_blk);
410 @@ -153,7 +153,7 @@ ext4_read_inode_bitmap(struct super_bloc
411 set_bitmap_uptodate(bh);
412 if (bh_submit_read(bh) < 0) {
414 - ext4_error(sb, __func__,
416 "Cannot read inode bitmap - "
417 "block_group = %u, inode_bitmap = %llu",
418 block_group, bitmap_blk);
419 @@ -230,8 +230,7 @@ void ext4_free_inode(handle_t *handle, s
421 es = EXT4_SB(sb)->s_es;
422 if (ino < EXT4_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) {
423 - ext4_error(sb, "ext4_free_inode",
424 - "reserved or nonexistent inode %lu", ino);
425 + ext4_error(sb, "reserved or nonexistent inode %lu", ino);
428 block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb);
429 @@ -286,11 +285,10 @@ out:
433 - ext4_error(sb, "ext4_free_inode",
434 - "bit already cleared for inode %lu", ino);
435 + ext4_error(sb, "bit already cleared for inode %lu", ino);
440 ext4_std_error(sb, fatal);
443 @@ -730,7 +728,7 @@ static int ext4_claim_inode(struct super
444 if ((group == 0 && ino < EXT4_FIRST_INO(sb)) ||
445 ino > EXT4_INODES_PER_GROUP(sb)) {
446 ext4_unlock_group(sb, group);
447 - ext4_error(sb, __func__,
449 "reserved inode or inode > inodes count - "
450 "block_group = %u, inode=%lu", group,
451 ino + group * EXT4_INODES_PER_GROUP(sb));
452 @@ -1094,7 +1092,7 @@ struct inode *ext4_orphan_get(struct sup
454 /* Error cases - e2fsck has already cleaned up for us */
456 - ext4_warning(sb, __func__,
458 "bad orphan ino %lu! e2fsck was run?", ino);
461 @@ -1103,7 +1101,7 @@ struct inode *ext4_orphan_get(struct sup
462 bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb);
463 bitmap_bh = ext4_read_inode_bitmap(sb, block_group);
465 - ext4_warning(sb, __func__,
467 "inode bitmap error for orphan %lu", ino);
470 @@ -1136,7 +1134,7 @@ iget_failed:
471 err = PTR_ERR(inode);
474 - ext4_warning(sb, __func__,
476 "bad orphan inode %lu! e2fsck was run?", ino);
477 printk(KERN_NOTICE "ext4_test_bit(bit=%d, block=%llu) = %d\n",
478 bit, (unsigned long long)bitmap_bh->b_blocknr,
479 diff -urpN linux-stage.orig/fs/ext4/inode.c linux-stage/fs/ext4/inode.c
480 --- linux-stage.orig/fs/ext4/inode.c 2011-12-28 08:18:31.000000000 -0500
481 +++ linux-stage/fs/ext4/inode.c 2011-12-28 11:24:07.000000000 -0500
482 @@ -246,7 +246,7 @@ void ext4_delete_inode(struct inode *ino
484 err = ext4_mark_inode_dirty(handle, inode);
486 - ext4_warning(inode->i_sb, __func__,
487 + ext4_warning(inode->i_sb,
488 "couldn't mark inode dirty (err %d)", err);
491 @@ -264,7 +264,7 @@ void ext4_delete_inode(struct inode *ino
493 err = ext4_journal_restart(handle, 3);
495 - ext4_warning(inode->i_sb, __func__,
496 + ext4_warning(inode->i_sb,
497 "couldn't extend journal (err %d)", err);
499 ext4_journal_stop(handle);
500 @@ -375,8 +375,7 @@ static int ext4_block_to_path(struct ino
501 offsets[n++] = i_block & (ptrs - 1);
504 - ext4_warning(inode->i_sb, "ext4_block_to_path",
505 - "block %lu > max in inode %lu",
506 + ext4_warning(inode->i_sb, "block %lu > max in inode %lu",
507 i_block + direct_blocks +
508 indirect_blocks + double_blocks, inode->i_ino);
510 @@ -396,7 +395,7 @@ static int __ext4_check_blockref(const c
512 unlikely(!ext4_data_block_valid(EXT4_SB(inode->i_sb),
514 - ext4_error(inode->i_sb, function,
515 + ext4_error(inode->i_sb,
516 "invalid block reference %u "
517 "in inode #%lu", blk, inode->i_ino);
519 @@ -1167,7 +1166,7 @@ static int check_block_validity(struct i
520 sector_t logical, sector_t phys, int len)
522 if (!ext4_data_block_valid(EXT4_SB(inode->i_sb), phys, len)) {
523 - ext4_error(inode->i_sb, msg,
524 + ext4_error(inode->i_sb,
525 "inode #%lu logical block %llu mapped to %llu "
526 "(size %d)", inode->i_ino,
527 (unsigned long long) logical,
528 @@ -4316,7 +4315,7 @@ static void ext4_free_data(handle_t *han
529 if ((EXT4_JOURNAL(inode) == NULL) || bh2jh(this_bh))
530 ext4_handle_dirty_metadata(handle, inode, this_bh);
532 - ext4_error(inode->i_sb, __func__,
533 + ext4_error(inode->i_sb,
534 "circular indirect block detected, "
535 "inode=%lu, block=%llu",
537 @@ -4364,7 +4363,7 @@ static void ext4_free_branches(handle_t
541 - ext4_error(inode->i_sb, "ext4_free_branches",
542 + ext4_error(inode->i_sb,
543 "Read failure, inode=%lu, block=%llu",
546 @@ -4680,9 +4679,8 @@ static int __ext4_get_inode_loc(struct i
548 bh = sb_getblk(sb, block);
550 - ext4_error(sb, "ext4_get_inode_loc", "unable to read "
551 - "inode block - inode=%lu, block=%llu",
552 - inode->i_ino, block);
553 + ext4_error(sb, "unable to read inode block - "
554 + "inode=%lu, block=%llu", inode->i_ino, block);
557 if (!buffer_uptodate(bh)) {
558 @@ -4780,7 +4778,7 @@ make_io:
559 submit_bh(READ_META, bh);
561 if (!buffer_uptodate(bh)) {
562 - ext4_error(sb, __func__,
564 "unable to read inode block - inode=%lu, "
565 "block=%llu", inode->i_ino, block);
567 @@ -4999,7 +4997,7 @@ struct inode *ext4_iget(struct super_blo
569 if (ei->i_file_acl &&
570 !ext4_data_block_valid(EXT4_SB(sb), ei->i_file_acl, 1)) {
571 - ext4_error(sb, __func__,
573 "bad extended attribute block %llu in inode #%lu",
574 ei->i_file_acl, inode->i_ino);
576 @@ -5046,7 +5044,7 @@ struct inode *ext4_iget(struct super_blo
577 new_decode_dev(le32_to_cpu(raw_inode->i_block[1])));
580 - ext4_error(inode->i_sb, __func__,
581 + ext4_error(inode->i_sb,
582 "bogus i_mode (%o) for inode=%lu",
583 inode->i_mode, inode->i_ino);
585 @@ -5286,7 +5284,7 @@ int ext4_write_inode(struct inode *inode
587 sync_dirty_buffer(iloc.bh);
588 if (buffer_req(iloc.bh) && !buffer_uptodate(iloc.bh)) {
589 - ext4_error(inode->i_sb, __func__,
590 + ext4_error(inode->i_sb,
591 "IO error syncing inode, "
592 "inode=%lu, block=%llu",
594 @@ -5707,7 +5705,7 @@ int ext4_mark_inode_dirty(handle_t *hand
595 EXT4_STATE_NO_EXPAND);
597 le16_to_cpu(sbi->s_es->s_mnt_count)) {
598 - ext4_warning(inode->i_sb, __func__,
599 + ext4_warning(inode->i_sb,
600 "Unable to expand inode %lu. Delete"
601 " some EAs or run e2fsck.",
603 diff -urpN linux-stage.orig/fs/ext4/mballoc.c linux-stage/fs/ext4/mballoc.c
604 --- linux-stage.orig/fs/ext4/mballoc.c 2011-12-28 08:18:31.000000000 -0500
605 +++ linux-stage/fs/ext4/mballoc.c 2011-12-28 11:24:07.000000000 -0500
606 @@ -1862,7 +1862,6 @@ void ext4_mb_scan_aligned(struct ext4_al
610 -/* This is now called BEFORE we load the buddy bitmap. */
611 static int ext4_mb_good_group(struct ext4_allocation_context *ac,
612 ext4_group_t group, int cr)
614 @@ -2162,6 +2161,11 @@ static void *ext4_mb_seq_groups_next(str
615 return (void *) ((unsigned long) group);
618 +static inline void ext4_mb_release_desc(struct ext4_buddy *e4b)
620 + ext4_mb_unload_buddy(e4b);
623 static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)
625 struct super_block *sb = seq->private;
626 @@ -2193,7 +2197,7 @@ static int ext4_mb_seq_groups_show(struc
627 ext4_lock_group(sb, group);
628 memcpy(&sg, ext4_get_group_info(sb, group), i);
629 ext4_unlock_group(sb, group);
630 - ext4_mb_unload_buddy(&e4b);
631 + ext4_mb_release_desc(&e4b);
633 seq_printf(seq, "#%-5u: %-5u %-5u %-5u [", group, sg.info.bb_free,
634 sg.info.bb_fragments, sg.info.bb_first_free);
635 @@ -2562,6 +2566,17 @@ int ext4_mb_release(struct super_block *
639 +static inline int ext4_issue_discard(struct super_block *sb,
640 + ext4_group_t block_group, ext4_grpblk_t block, int count)
642 + ext4_fsblk_t discard_block;
644 + discard_block = block + ext4_group_first_block_no(sb, block_group);
645 + trace_ext4_discard_blocks(sb,
646 + (unsigned long long) discard_block, count);
647 + return sb_issue_discard(sb, discard_block, count);
651 * This function is called by the jbd2 layer once the commit has finished,
652 * so we know we can free the blocks that were released with that commit.
653 @@ -2583,17 +2598,11 @@ static void release_blocks_on_commit(jou
655 if (test_opt(sb, DISCARD)) {
657 - ext4_fsblk_t discard_block;
659 - discard_block = entry->start_blk +
660 - ext4_group_first_block_no(sb, entry->group);
661 - trace_ext4_discard_blocks(sb,
662 - (unsigned long long)discard_block,
664 - ret = sb_issue_discard(sb, discard_block, entry->count);
665 - if (ret == EOPNOTSUPP) {
666 - ext4_warning(sb, __func__,
667 - "discard not supported, disabling");
668 + ret = ext4_issue_discard(sb, entry->group,
669 + entry->start_blk, entry->count);
670 + if (unlikely(ret == -EOPNOTSUPP)) {
671 + ext4_warning(sb, "discard not supported, "
673 clear_opt(EXT4_SB(sb)->s_mount_opt, DISCARD);
676 @@ -2620,7 +2629,7 @@ static void release_blocks_on_commit(jou
678 ext4_unlock_group(sb, entry->group);
679 kmem_cache_free(ext4_free_ext_cachep, entry);
680 - ext4_mb_unload_buddy(&e4b);
681 + ext4_mb_release_desc(&e4b);
684 mb_debug(1, "freed %u blocks in %u structures\n", count, count2);
685 @@ -2757,7 +2766,7 @@ ext4_mb_mark_diskspace_used(struct ext4_
687 len = ac->ac_b_ex.fe_len;
688 if (!ext4_data_block_valid(sbi, block, len)) {
689 - ext4_error(sb, __func__,
691 "Allocating blocks %llu-%llu which overlap "
692 "fs metadata\n", block, block+len);
693 /* File system mounted not to panic on error
694 @@ -3671,14 +3680,14 @@ ext4_mb_discard_group_preallocations(str
696 bitmap_bh = ext4_read_block_bitmap(sb, group);
697 if (bitmap_bh == NULL) {
698 - ext4_error(sb, __func__, "Error in reading block "
699 + ext4_error(sb, "Error in reading block "
700 "bitmap for %u", group);
704 err = ext4_mb_load_buddy(sb, group, &e4b);
706 - ext4_error(sb, __func__, "Error in loading buddy "
707 + ext4_error(sb, "Error in loading buddy "
708 "information for %u", group);
711 @@ -3852,14 +3861,14 @@ repeat:
713 err = ext4_mb_load_buddy(sb, group, &e4b);
715 - ext4_error(sb, __func__, "Error in loading buddy "
716 - "information for %u", group);
717 + ext4_error(sb, "Error in loading buddy information for %u",
722 bitmap_bh = ext4_read_block_bitmap(sb, group);
723 if (bitmap_bh == NULL) {
724 - ext4_error(sb, __func__, "Error in reading block "
725 + ext4_error(sb, "Error in reading block "
726 "bitmap for %u", group);
727 ext4_mb_unload_buddy(&e4b);
729 @@ -4125,7 +4134,7 @@ ext4_mb_discard_lg_preallocations(struct
731 ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, NULL);
732 if (ext4_mb_load_buddy(sb, group, &e4b)) {
733 - ext4_error(sb, __func__, "Error in loading buddy "
734 + ext4_error(sb, "Error in loading buddy "
735 "information for %u", group);
738 @@ -4516,7 +4525,7 @@ void ext4_mb_free_blocks(handle_t *handl
739 if (block < le32_to_cpu(es->s_first_data_block) ||
740 block + count < block ||
741 block + count > ext4_blocks_count(es)) {
742 - ext4_error(sb, __func__,
744 "Freeing blocks not in datazone - "
745 "block = %llu, count = %lu", block, count);
747 @@ -4561,7 +4570,7 @@ do_more:
748 in_range(block + count - 1, ext4_inode_table(sb, gdp),
749 EXT4_SB(sb)->s_itb_per_group)) {
751 - ext4_error(sb, __func__,
753 "Freeing blocks in system zone - "
754 "Block = %llu, count = %lu", block, count);
755 /* err = 0. ext4_std_error should be a no op */
756 diff -urpN linux-stage.orig/fs/ext4/move_extent.c linux-stage/fs/ext4/move_extent.c
757 --- linux-stage.orig/fs/ext4/move_extent.c 2011-12-28 08:18:31.000000000 -0500
758 +++ linux-stage/fs/ext4/move_extent.c 2011-12-28 11:24:07.000000000 -0500
759 @@ -152,12 +152,12 @@ mext_check_null_inode(struct inode *inod
762 if (inode1 == NULL) {
763 - ext4_error(inode2->i_sb, function,
764 + ext4_error(inode2->i_sb,
765 "Both inodes should not be NULL: "
766 "inode1 NULL inode2 %lu", inode2->i_ino);
768 } else if (inode2 == NULL) {
769 - ext4_error(inode1->i_sb, function,
770 + ext4_error(inode1->i_sb,
771 "Both inodes should not be NULL: "
772 "inode1 %lu inode2 NULL", inode1->i_ino);
774 @@ -528,7 +528,7 @@ mext_leaf_block(handle_t *handle, struct
777 if (le32_to_cpu(oext->ee_block) + oext_alen - 1 < new_ext_end) {
778 - ext4_error(orig_inode->i_sb, __func__,
779 + ext4_error(orig_inode->i_sb,
780 "new_ext_end(%u) should be less than or equal to "
781 "oext->ee_block(%u) + oext_alen(%d) - 1",
782 new_ext_end, le32_to_cpu(oext->ee_block),
783 @@ -691,12 +691,12 @@ mext_replace_branches(handle_t *handle,
785 /* The extent for donor must be found. */
787 - ext4_error(donor_inode->i_sb, __func__,
788 + ext4_error(donor_inode->i_sb,
789 "The extent for donor must be found");
792 } else if (donor_off != le32_to_cpu(tmp_dext.ee_block)) {
793 - ext4_error(donor_inode->i_sb, __func__,
794 + ext4_error(donor_inode->i_sb,
795 "Donor offset(%u) and the first block of donor "
796 "extent(%u) should be equal",
798 @@ -1001,12 +1001,12 @@ mext_check_arguments(struct inode *orig_
802 - if ((orig_start > EXT_MAX_BLOCK) ||
803 - (donor_start > EXT_MAX_BLOCK) ||
804 - (*len > EXT_MAX_BLOCK) ||
805 - (orig_start + *len > EXT_MAX_BLOCK)) {
806 + if ((orig_start > EXT_MAX_BLOCKS) ||
807 + (donor_start > EXT_MAX_BLOCKS) ||
808 + (*len > EXT_MAX_BLOCKS) ||
809 + (orig_start + *len > EXT_MAX_BLOCKS)) {
810 ext4_debug("ext4 move extent: Can't handle over [%u] blocks "
811 - "[ino:orig %lu, donor %lu]\n", EXT_MAX_BLOCK,
812 + "[ino:orig %lu, donor %lu]\n", EXT_MAX_BLOCKS,
813 orig_inode->i_ino, donor_inode->i_ino);
816 @@ -1356,7 +1356,7 @@ ext4_move_extents(struct file *o_filp, s
819 if (*moved_len > len) {
820 - ext4_error(orig_inode->i_sb, __func__,
821 + ext4_error(orig_inode->i_sb,
822 "We replaced blocks too much! "
823 "sum of replaced: %llu requested: %llu",
825 diff -urpN linux-stage.orig/fs/ext4/namei.c linux-stage/fs/ext4/namei.c
826 --- linux-stage.orig/fs/ext4/namei.c 2011-12-28 08:18:31.000000000 -0500
827 +++ linux-stage/fs/ext4/namei.c 2011-12-28 11:28:51.000000000 -0500
828 @@ -394,8 +394,7 @@ dx_probe(const struct qstr *d_name, stru
829 if (root->info.hash_version != DX_HASH_TEA &&
830 root->info.hash_version != DX_HASH_HALF_MD4 &&
831 root->info.hash_version != DX_HASH_LEGACY) {
832 - ext4_warning(dir->i_sb, __func__,
833 - "Unrecognised inode hash code %d",
834 + ext4_warning(dir->i_sb, "Unrecognised inode hash code %d",
835 root->info.hash_version);
837 *err = ERR_BAD_DX_DIR;
838 @@ -410,8 +409,7 @@ dx_probe(const struct qstr *d_name, stru
841 if (root->info.unused_flags & 1) {
842 - ext4_warning(dir->i_sb, __func__,
843 - "Unimplemented inode hash flags: %#06x",
844 + ext4_warning(dir->i_sb, "Unimplemented inode hash flags: %#06x",
845 root->info.unused_flags);
847 *err = ERR_BAD_DX_DIR;
848 @@ -419,8 +417,7 @@ dx_probe(const struct qstr *d_name, stru
851 if ((indirect = root->info.indirect_levels) > 1) {
852 - ext4_warning(dir->i_sb, __func__,
853 - "Unimplemented inode hash depth: %#06x",
854 + ext4_warning(dir->i_sb, "Unimplemented inode hash depth: %#06x",
855 root->info.indirect_levels);
857 *err = ERR_BAD_DX_DIR;
858 @@ -432,8 +429,7 @@ dx_probe(const struct qstr *d_name, stru
860 if (dx_get_limit(entries) != dx_root_limit(dir,
861 root->info.info_length)) {
862 - ext4_warning(dir->i_sb, __func__,
863 - "dx entry: limit != root limit");
864 + ext4_warning(dir->i_sb, "dx entry: limit != root limit");
866 *err = ERR_BAD_DX_DIR;
868 @@ -444,7 +440,7 @@ dx_probe(const struct qstr *d_name, stru
870 count = dx_get_count(entries);
871 if (!count || count > dx_get_limit(entries)) {
872 - ext4_warning(dir->i_sb, __func__,
873 + ext4_warning(dir->i_sb,
874 "dx entry: no count or count > limit");
876 *err = ERR_BAD_DX_DIR;
877 @@ -489,7 +485,7 @@ dx_probe(const struct qstr *d_name, stru
879 at = entries = ((struct dx_node *) bh->b_data)->entries;
880 if (dx_get_limit(entries) != dx_node_limit (dir)) {
881 - ext4_warning(dir->i_sb, __func__,
882 + ext4_warning(dir->i_sb,
883 "dx entry: limit != node limit");
885 *err = ERR_BAD_DX_DIR;
886 @@ -505,7 +501,7 @@ fail2:
889 if (*err == ERR_BAD_DX_DIR)
890 - ext4_warning(dir->i_sb, __func__,
891 + ext4_warning(dir->i_sb,
892 "Corrupt dir inode %ld, running e2fsck is "
893 "recommended.", dir->i_ino);
895 @@ -969,7 +965,7 @@ restart:
897 if (!buffer_uptodate(bh)) {
898 /* read error, skip block & hope for the best */
899 - ext4_error(sb, __func__, "reading directory #%lu "
900 + ext4_error(sb, "reading directory #%lu "
901 "offset %lu", dir->i_ino,
902 (unsigned long)block);
904 @@ -1012,8 +1008,9 @@ cleanup_and_exit:
905 static struct buffer_head * ext4_dx_find_entry(struct inode *dir, const struct qstr *d_name,
906 struct ext4_dir_entry_2 **res_dir, int *err)
908 - struct super_block * sb = dir->i_sb;
909 + struct super_block * sb;
910 struct dx_hash_info hinfo;
912 struct dx_frame frames[2], *frame;
913 struct ext4_dir_entry_2 *de, *top;
914 struct buffer_head *bh;
915 @@ -1022,8 +1019,18 @@ static struct buffer_head * ext4_dx_find
916 int namelen = d_name->len;
917 const u8 *name = d_name->name;
919 - if (!(frame = dx_probe(d_name, dir, &hinfo, frames, err)))
922 + /* NFS may look up ".." - look at dx_root directory block */
923 + if (namelen > 2 || name[0] != '.'||(name[1] != '.' && name[1] != '\0')){
924 + if (!(frame = dx_probe(d_name, dir, &hinfo, frames, err)))
928 + frame->bh = NULL; /* for dx_release() */
929 + frame->at = (struct dx_entry *)frames; /* hack for zero entry*/
930 + dx_set_block(frame->at, 0); /* dx_root block is 0 */
934 block = dx_get_block(frame->at);
935 if (!(bh = ext4_bread (NULL,dir, block, 0, err)))
936 @@ -1049,10 +1056,10 @@ static struct buffer_head * ext4_dx_find
939 /* Check to see if we should continue to search */
940 - retval = ext4_htree_next_block(dir, hinfo.hash, frame,
941 + retval = ext4_htree_next_block(dir, hash, frame,
944 - ext4_warning(sb, __func__,
946 "error reading index page in directory #%lu",
949 @@ -1082,14 +1089,13 @@ static struct dentry *ext4_lookup(struct
950 __u32 ino = le32_to_cpu(de->inode);
952 if (!ext4_valid_inum(dir->i_sb, ino)) {
953 - ext4_error(dir->i_sb, "ext4_lookup",
954 - "bad inode number: %u", ino);
955 + ext4_error(dir->i_sb, "bad inode number: %u", ino);
956 return ERR_PTR(-EIO);
958 inode = ext4_iget(dir->i_sb, ino);
959 if (unlikely(IS_ERR(inode))) {
960 if (PTR_ERR(inode) == -ESTALE) {
961 - ext4_error(dir->i_sb, __func__,
962 + ext4_error(dir->i_sb,
963 "deleted inode referenced: %u",
965 return ERR_PTR(-EIO);
966 @@ -1121,7 +1127,7 @@ struct dentry *ext4_get_parent(struct de
969 if (!ext4_valid_inum(child->d_inode->i_sb, ino)) {
970 - ext4_error(child->d_inode->i_sb, "ext4_get_parent",
971 + ext4_error(child->d_inode->i_sb,
972 "bad inode number: %u", ino);
973 return ERR_PTR(-EIO);
975 @@ -1421,7 +1427,7 @@ static int make_indexed_dir(handle_t *ha
976 de = (struct ext4_dir_entry_2 *)((char *)fde +
977 ext4_rec_len_from_disk(fde->rec_len, blocksize));
978 if ((char *) de >= (((char *) root) + blocksize)) {
979 - ext4_error(dir->i_sb, __func__,
980 + ext4_error(dir->i_sb,
981 "invalid rec_len for '..' in inode %lu",
984 @@ -1588,8 +1594,7 @@ static int ext4_dx_add_entry(handle_t *h
986 if (levels && (dx_get_count(frames->entries) ==
987 dx_get_limit(frames->entries))) {
988 - ext4_warning(sb, __func__,
989 - "Directory index full!");
990 + ext4_warning(sb, "Directory index full!");
994 @@ -1943,11 +1948,11 @@ static int empty_dir(struct inode *inode
995 if (inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2) ||
996 !(bh = ext4_bread(NULL, inode, 0, 0, &err))) {
998 - ext4_error(inode->i_sb, __func__,
999 + ext4_error(inode->i_sb,
1000 "error %d reading directory #%lu offset 0",
1003 - ext4_warning(inode->i_sb, __func__,
1004 + ext4_warning(inode->i_sb,
1005 "bad directory (dir #%lu) - no data block",
1008 @@ -1958,7 +1963,7 @@ static int empty_dir(struct inode *inode
1009 !le32_to_cpu(de1->inode) ||
1010 strcmp(".", de->name) ||
1011 strcmp("..", de1->name)) {
1012 - ext4_warning(inode->i_sb, "empty_dir",
1013 + ext4_warning(inode->i_sb,
1014 "bad directory (dir #%lu) - no `.' or `..'",
1017 @@ -1976,7 +1981,7 @@ static int empty_dir(struct inode *inode
1018 offset >> EXT4_BLOCK_SIZE_BITS(sb), 0, &err);
1021 - ext4_error(sb, __func__,
1023 "error %d reading directory"
1025 err, inode->i_ino, offset);
1026 @@ -2198,7 +2203,7 @@ static int ext4_rmdir(struct inode *dir,
1029 if (!EXT4_DIR_LINK_EMPTY(inode))
1030 - ext4_warning(inode->i_sb, "ext4_rmdir",
1031 + ext4_warning(inode->i_sb,
1032 "empty directory has too many links (%d)",
1035 @@ -2250,7 +2255,7 @@ static int ext4_unlink(struct inode *dir
1038 if (!inode->i_nlink) {
1039 - ext4_warning(inode->i_sb, "ext4_unlink",
1040 + ext4_warning(inode->i_sb,
1041 "Deleting nonexistent file (%lu), %d",
1042 inode->i_ino, inode->i_nlink);
1044 @@ -2497,7 +2502,7 @@ static int ext4_rename(struct inode *old
1048 - ext4_warning(old_dir->i_sb, "ext4_rename",
1049 + ext4_warning(old_dir->i_sb,
1050 "Deleting old file (%lu), %d, error=%d",
1051 old_dir->i_ino, old_dir->i_nlink, retval);
1053 diff -urpN linux-stage.orig/fs/ext4/resize.c linux-stage/fs/ext4/resize.c
1054 --- linux-stage.orig/fs/ext4/resize.c 2011-12-28 08:18:31.000000000 -0500
1055 +++ linux-stage/fs/ext4/resize.c 2011-12-28 11:24:07.000000000 -0500
1056 @@ -48,63 +48,63 @@ static int verify_group_input(struct sup
1058 ext4_get_group_no_and_offset(sb, start, NULL, &offset);
1059 if (group != sbi->s_groups_count)
1060 - ext4_warning(sb, __func__,
1062 "Cannot add at group %u (only %u groups)",
1063 input->group, sbi->s_groups_count);
1064 else if (offset != 0)
1065 - ext4_warning(sb, __func__, "Last group not full");
1066 + ext4_warning(sb, "Last group not full");
1067 else if (input->reserved_blocks > input->blocks_count / 5)
1068 - ext4_warning(sb, __func__, "Reserved blocks too high (%u)",
1069 + ext4_warning(sb, "Reserved blocks too high (%u)",
1070 input->reserved_blocks);
1071 else if (free_blocks_count < 0)
1072 - ext4_warning(sb, __func__, "Bad blocks count %u",
1073 + ext4_warning(sb, "Bad blocks count %u",
1074 input->blocks_count);
1075 else if (!(bh = sb_bread(sb, end - 1)))
1076 - ext4_warning(sb, __func__,
1078 "Cannot read last block (%llu)",
1080 else if (outside(input->block_bitmap, start, end))
1081 - ext4_warning(sb, __func__,
1083 "Block bitmap not in group (block %llu)",
1084 (unsigned long long)input->block_bitmap);
1085 else if (outside(input->inode_bitmap, start, end))
1086 - ext4_warning(sb, __func__,
1088 "Inode bitmap not in group (block %llu)",
1089 (unsigned long long)input->inode_bitmap);
1090 else if (outside(input->inode_table, start, end) ||
1091 outside(itend - 1, start, end))
1092 - ext4_warning(sb, __func__,
1094 "Inode table not in group (blocks %llu-%llu)",
1095 (unsigned long long)input->inode_table, itend - 1);
1096 else if (input->inode_bitmap == input->block_bitmap)
1097 - ext4_warning(sb, __func__,
1099 "Block bitmap same as inode bitmap (%llu)",
1100 (unsigned long long)input->block_bitmap);
1101 else if (inside(input->block_bitmap, input->inode_table, itend))
1102 - ext4_warning(sb, __func__,
1104 "Block bitmap (%llu) in inode table (%llu-%llu)",
1105 (unsigned long long)input->block_bitmap,
1106 (unsigned long long)input->inode_table, itend - 1);
1107 else if (inside(input->inode_bitmap, input->inode_table, itend))
1108 - ext4_warning(sb, __func__,
1110 "Inode bitmap (%llu) in inode table (%llu-%llu)",
1111 (unsigned long long)input->inode_bitmap,
1112 (unsigned long long)input->inode_table, itend - 1);
1113 else if (inside(input->block_bitmap, start, metaend))
1114 - ext4_warning(sb, __func__,
1116 "Block bitmap (%llu) in GDT table"
1118 (unsigned long long)input->block_bitmap,
1119 start, metaend - 1);
1120 else if (inside(input->inode_bitmap, start, metaend))
1121 - ext4_warning(sb, __func__,
1123 "Inode bitmap (%llu) in GDT table"
1125 (unsigned long long)input->inode_bitmap,
1126 start, metaend - 1);
1127 else if (inside(input->inode_table, start, metaend) ||
1128 inside(itend - 1, start, metaend))
1129 - ext4_warning(sb, __func__,
1131 "Inode table (%llu-%llu) overlaps"
1132 "GDT table (%llu-%llu)",
1133 (unsigned long long)input->inode_table,
1134 @@ -364,7 +364,7 @@ static int verify_reserved_gdb(struct su
1135 while ((grp = ext4_list_backups(sb, &three, &five, &seven)) < end) {
1136 if (le32_to_cpu(*p++) !=
1137 grp * EXT4_BLOCKS_PER_GROUP(sb) + blk){
1138 - ext4_warning(sb, __func__,
1141 " missing grp %d (%llu)",
1143 @@ -420,7 +420,7 @@ static int add_new_gdb(handle_t *handle,
1145 if (EXT4_SB(sb)->s_sbh->b_blocknr !=
1146 le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block)) {
1147 - ext4_warning(sb, __func__,
1149 "won't resize using backup superblock at %llu",
1150 (unsigned long long)EXT4_SB(sb)->s_sbh->b_blocknr);
1152 @@ -444,7 +444,7 @@ static int add_new_gdb(handle_t *handle,
1154 data = (__le32 *)dind->b_data;
1155 if (le32_to_cpu(data[gdb_num % EXT4_ADDR_PER_BLOCK(sb)]) != gdblock) {
1156 - ext4_warning(sb, __func__,
1158 "new group %u GDT block %llu not reserved",
1159 input->group, gdblock);
1161 @@ -468,7 +468,7 @@ static int add_new_gdb(handle_t *handle,
1163 if (!n_group_desc) {
1165 - ext4_warning(sb, __func__,
1167 "not enough memory for %lu groups", gdb_num + 1);
1170 @@ -567,7 +567,7 @@ static int reserve_backup_gdb(handle_t *
1171 /* Get each reserved primary GDT block and verify it holds backups */
1172 for (res = 0; res < reserved_gdb; res++, blk++) {
1173 if (le32_to_cpu(*data) != blk) {
1174 - ext4_warning(sb, __func__,
1176 "reserved block %llu"
1177 " not at offset %ld",
1179 @@ -713,7 +713,7 @@ static void update_backups(struct super_
1183 - ext4_warning(sb, __func__,
1185 "can't update backup for group %u (err %d), "
1186 "forcing fsck on next reboot", group, err);
1187 sbi->s_mount_state &= ~EXT4_VALID_FS;
1188 @@ -753,20 +753,20 @@ int ext4_group_add(struct super_block *s
1190 if (gdb_off == 0 && !EXT4_HAS_RO_COMPAT_FEATURE(sb,
1191 EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER)) {
1192 - ext4_warning(sb, __func__,
1194 "Can't resize non-sparse filesystem further");
1198 if (ext4_blocks_count(es) + input->blocks_count <
1199 ext4_blocks_count(es)) {
1200 - ext4_warning(sb, __func__, "blocks_count overflow");
1201 + ext4_warning(sb, "blocks_count overflow");
1205 if (le32_to_cpu(es->s_inodes_count) + EXT4_INODES_PER_GROUP(sb) <
1206 le32_to_cpu(es->s_inodes_count)) {
1207 - ext4_warning(sb, __func__, "inodes_count overflow");
1208 + ext4_warning(sb, "inodes_count overflow");
1212 @@ -774,13 +774,13 @@ int ext4_group_add(struct super_block *s
1213 if (!EXT4_HAS_COMPAT_FEATURE(sb,
1214 EXT4_FEATURE_COMPAT_RESIZE_INODE)
1215 || !le16_to_cpu(es->s_reserved_gdt_blocks)) {
1216 - ext4_warning(sb, __func__,
1218 "No reserved GDT blocks, can't resize");
1221 inode = ext4_iget(sb, EXT4_RESIZE_INO);
1222 if (IS_ERR(inode)) {
1223 - ext4_warning(sb, __func__,
1225 "Error opening resize inode");
1226 return PTR_ERR(inode);
1228 @@ -810,7 +810,7 @@ int ext4_group_add(struct super_block *s
1230 mutex_lock(&sbi->s_resize_lock);
1231 if (input->group != sbi->s_groups_count) {
1232 - ext4_warning(sb, __func__,
1234 "multiple resizers run on filesystem!");
1237 @@ -998,12 +998,12 @@ int ext4_group_extend(struct super_block
1238 " too large to resize to %llu blocks safely\n",
1239 sb->s_id, n_blocks_count);
1240 if (sizeof(sector_t) < 8)
1241 - ext4_warning(sb, __func__, "CONFIG_LBDAF not enabled");
1242 + ext4_warning(sb, "CONFIG_LBDAF not enabled");
1246 if (n_blocks_count < o_blocks_count) {
1247 - ext4_warning(sb, __func__,
1249 "can't shrink FS - resize aborted");
1252 @@ -1012,7 +1012,7 @@ int ext4_group_extend(struct super_block
1253 ext4_get_group_no_and_offset(sb, o_blocks_count, &group, &last);
1256 - ext4_warning(sb, __func__,
1258 "need to use ext2online to resize further");
1261 @@ -1020,7 +1020,7 @@ int ext4_group_extend(struct super_block
1262 add = EXT4_BLOCKS_PER_GROUP(sb) - last;
1264 if (o_blocks_count + add < o_blocks_count) {
1265 - ext4_warning(sb, __func__, "blocks_count overflow");
1266 + ext4_warning(sb, "blocks_count overflow");
1270 @@ -1028,7 +1028,7 @@ int ext4_group_extend(struct super_block
1271 add = n_blocks_count - o_blocks_count;
1273 if (o_blocks_count + add < n_blocks_count)
1274 - ext4_warning(sb, __func__,
1276 "will only finish group (%llu"
1278 o_blocks_count + add, add);
1279 @@ -1036,7 +1036,7 @@ int ext4_group_extend(struct super_block
1280 /* See if the device is actually as big as what was requested */
1281 bh = sb_bread(sb, o_blocks_count + add - 1);
1283 - ext4_warning(sb, __func__,
1285 "can't read last block, resize aborted");
1288 @@ -1048,13 +1048,13 @@ int ext4_group_extend(struct super_block
1289 handle = ext4_journal_start_sb(sb, 3);
1290 if (IS_ERR(handle)) {
1291 err = PTR_ERR(handle);
1292 - ext4_warning(sb, __func__, "error %d on journal start", err);
1293 + ext4_warning(sb, "error %d on journal start", err);
1297 mutex_lock(&EXT4_SB(sb)->s_resize_lock);
1298 if (o_blocks_count != ext4_blocks_count(es)) {
1299 - ext4_warning(sb, __func__,
1301 "multiple resizers run on filesystem!");
1302 mutex_unlock(&EXT4_SB(sb)->s_resize_lock);
1303 ext4_journal_stop(handle);
1304 @@ -1064,7 +1064,7 @@ int ext4_group_extend(struct super_block
1306 if ((err = ext4_journal_get_write_access(handle,
1307 EXT4_SB(sb)->s_sbh))) {
1308 - ext4_warning(sb, __func__,
1310 "error %d on journal write access", err);
1311 mutex_unlock(&EXT4_SB(sb)->s_resize_lock);
1312 ext4_journal_stop(handle);
1313 diff -urpN linux-stage.orig/fs/ext4/super.c linux-stage/fs/ext4/super.c
1314 --- linux-stage.orig/fs/ext4/super.c 2011-12-28 08:18:31.000000000 -0500
1315 +++ linux-stage/fs/ext4/super.c 2011-12-28 11:24:07.000000000 -0500
1316 @@ -337,7 +337,7 @@ static void ext4_handle_error(struct sup
1320 -void ext4_error(struct super_block *sb, const char *function,
1321 +void __ext4_error(struct super_block *sb, const char *function,
1322 const char *fmt, ...)
1325 @@ -351,6 +351,42 @@ void ext4_error(struct super_block *sb,
1326 ext4_handle_error(sb);
1329 +void ext4_error_inode(const char *function, struct inode *inode,
1330 + const char *fmt, ...)
1334 + va_start(args, fmt);
1335 + printk(KERN_CRIT "EXT4-fs error (device %s): %s: inode #%lu: (comm %s) ",
1336 + inode->i_sb->s_id, function, inode->i_ino, current->comm);
1337 + vprintk(fmt, args);
1341 + ext4_handle_error(inode->i_sb);
1344 +void ext4_error_file(const char *function, struct file *file,
1345 + const char *fmt, ...)
1348 + struct inode *inode = file->f_dentry->d_inode;
1349 + char pathname[80], *path;
1351 + va_start(args, fmt);
1352 + path = d_path(&(file->f_path), pathname, sizeof(pathname));
1354 + path = "(unknown)";
1356 + "EXT4-fs error (device %s): %s: inode #%lu (comm %s path %s): ",
1357 + inode->i_sb->s_id, function, inode->i_ino, current->comm, path);
1358 + vprintk(fmt, args);
1362 + ext4_handle_error(inode->i_sb);
1365 static const char *ext4_decode_error(struct super_block *sb, int errno,
1368 @@ -454,7 +490,7 @@ void ext4_msg (struct super_block * sb,
1372 -void ext4_warning(struct super_block *sb, const char *function,
1373 +void __ext4_warning(struct super_block *sb, const char *function,
1374 const char *fmt, ...)
1377 @@ -511,7 +547,7 @@ void ext4_update_dynamic_rev(struct supe
1378 if (le32_to_cpu(es->s_rev_level) > EXT4_GOOD_OLD_REV)
1381 - ext4_warning(sb, __func__,
1383 "updating to rev %d because of new feature flag, "
1384 "running e2fsck is recommended",
1386 @@ -1096,9 +1132,9 @@ enum {
1387 Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
1388 Opt_data_err_abort, Opt_data_err_ignore,
1389 Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
1390 - Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota,
1391 - Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err, Opt_resize,
1392 - Opt_usrquota, Opt_grpquota, Opt_i_version,
1393 + Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
1394 + Opt_noquota, Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err,
1395 + Opt_resize, Opt_usrquota, Opt_grpquota, Opt_i_version,
1396 Opt_stripe, Opt_delalloc, Opt_nodelalloc,
1397 Opt_block_validity, Opt_noblock_validity,
1398 Opt_inode_readahead_blks, Opt_journal_ioprio,
1399 @@ -2709,6 +2745,21 @@ static int ext4_fill_super(struct super_
1400 get_random_bytes(&sbi->s_next_generation, sizeof(u32));
1401 spin_lock_init(&sbi->s_next_gen_lock);
1403 + err = percpu_counter_init(&sbi->s_freeblocks_counter,
1404 + ext4_count_free_blocks(sb));
1406 + err = percpu_counter_init(&sbi->s_freeinodes_counter,
1407 + ext4_count_free_inodes(sb));
1409 + err = percpu_counter_init(&sbi->s_dirs_counter,
1410 + ext4_count_dirs(sb));
1412 + err = percpu_counter_init(&sbi->s_dirtyblocks_counter, 0);
1414 + ext4_msg(sb, KERN_ERR, "insufficient memory");
1415 + goto failed_mount3;
1418 sbi->s_stripe = ext4_get_stripe_size(sbi);
1419 sbi->s_max_writeback_mb_bump = 128;
1421 @@ -2828,20 +2879,6 @@ static int ext4_fill_super(struct super_
1422 set_task_ioprio(sbi->s_journal->j_task, journal_ioprio);
1425 - err = percpu_counter_init(&sbi->s_freeblocks_counter,
1426 - ext4_count_free_blocks(sb));
1428 - err = percpu_counter_init(&sbi->s_freeinodes_counter,
1429 - ext4_count_free_inodes(sb));
1431 - err = percpu_counter_init(&sbi->s_dirs_counter,
1432 - ext4_count_dirs(sb));
1434 - err = percpu_counter_init(&sbi->s_dirtyblocks_counter, 0);
1436 - ext4_msg(sb, KERN_ERR, "insufficient memory");
1437 - goto failed_mount_wq;
1439 if (test_opt(sb, NOBH)) {
1440 if (!(test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA)) {
1441 ext4_msg(sb, KERN_WARNING, "Ignoring nobh option - "
1442 @@ -2974,10 +3011,6 @@ failed_mount_wq:
1443 jbd2_journal_destroy(sbi->s_journal);
1444 sbi->s_journal = NULL;
1446 - percpu_counter_destroy(&sbi->s_freeblocks_counter);
1447 - percpu_counter_destroy(&sbi->s_freeinodes_counter);
1448 - percpu_counter_destroy(&sbi->s_dirs_counter);
1449 - percpu_counter_destroy(&sbi->s_dirtyblocks_counter);
1451 if (sbi->s_flex_groups) {
1452 if (is_vmalloc_addr(sbi->s_flex_groups))
1453 @@ -2985,6 +3018,10 @@ failed_mount3:
1455 kfree(sbi->s_flex_groups);
1457 + percpu_counter_destroy(&sbi->s_freeblocks_counter);
1458 + percpu_counter_destroy(&sbi->s_freeinodes_counter);
1459 + percpu_counter_destroy(&sbi->s_dirs_counter);
1460 + percpu_counter_destroy(&sbi->s_dirtyblocks_counter);
1462 for (i = 0; i < db_count; i++)
1463 brelse(sbi->s_group_desc[i]);
1464 @@ -3377,9 +3414,9 @@ static void ext4_clear_journal_err(struc
1467 errstr = ext4_decode_error(sb, j_errno, nbuf);
1468 - ext4_warning(sb, __func__, "Filesystem error recorded "
1469 + ext4_warning(sb, "Filesystem error recorded "
1470 "from previous mount: %s", errstr);
1471 - ext4_warning(sb, __func__, "Marking fs in need of "
1472 + ext4_warning(sb, "Marking fs in need of "
1473 "filesystem check.");
1475 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
1476 diff -urpN linux-stage.orig/fs/ext4/xattr.c linux-stage/fs/ext4/xattr.c
1477 --- linux-stage.orig/fs/ext4/xattr.c 2011-12-28 08:18:31.000000000 -0500
1478 +++ linux-stage/fs/ext4/xattr.c 2011-12-28 11:24:07.000000000 -0500
1479 @@ -227,7 +227,7 @@ ext4_xattr_block_get(struct inode *inode
1480 ea_bdebug(bh, "b_count=%d, refcount=%d",
1481 atomic_read(&(bh->b_count)), le32_to_cpu(BHDR(bh)->h_refcount));
1482 if (ext4_xattr_check_block(bh)) {
1483 -bad_block: ext4_error(inode->i_sb, __func__,
1484 +bad_block: ext4_error(inode->i_sb,
1485 "inode %lu: bad block %llu", inode->i_ino,
1486 EXT4_I(inode)->i_file_acl);
1488 @@ -369,7 +369,7 @@ ext4_xattr_block_list(struct inode *inod
1489 ea_bdebug(bh, "b_count=%d, refcount=%d",
1490 atomic_read(&(bh->b_count)), le32_to_cpu(BHDR(bh)->h_refcount));
1491 if (ext4_xattr_check_block(bh)) {
1492 - ext4_error(inode->i_sb, __func__,
1493 + ext4_error(inode->i_sb,
1494 "inode %lu: bad block %llu", inode->i_ino,
1495 EXT4_I(inode)->i_file_acl);
1497 @@ -661,7 +661,7 @@ ext4_xattr_block_find(struct inode *inod
1498 atomic_read(&(bs->bh->b_count)),
1499 le32_to_cpu(BHDR(bs->bh)->h_refcount));
1500 if (ext4_xattr_check_block(bs->bh)) {
1501 - ext4_error(sb, __func__,
1503 "inode %lu: bad block %llu", inode->i_ino,
1504 EXT4_I(inode)->i_file_acl);
1506 @@ -875,7 +875,7 @@ cleanup_dquot:
1510 - ext4_error(inode->i_sb, __func__,
1511 + ext4_error(inode->i_sb,
1512 "inode %lu: bad block %llu", inode->i_ino,
1513 EXT4_I(inode)->i_file_acl);
1515 @@ -1190,7 +1190,7 @@ retry:
1518 if (ext4_xattr_check_block(bh)) {
1519 - ext4_error(inode->i_sb, __func__,
1520 + ext4_error(inode->i_sb,
1521 "inode %lu: bad block %llu", inode->i_ino,
1522 EXT4_I(inode)->i_file_acl);
1524 @@ -1367,14 +1367,14 @@ ext4_xattr_delete_inode(handle_t *handle
1526 bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl);
1528 - ext4_error(inode->i_sb, __func__,
1529 + ext4_error(inode->i_sb,
1530 "inode %lu: block %llu read error", inode->i_ino,
1531 EXT4_I(inode)->i_file_acl);
1534 if (BHDR(bh)->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC) ||
1535 BHDR(bh)->h_blocks != cpu_to_le32(1)) {
1536 - ext4_error(inode->i_sb, __func__,
1537 + ext4_error(inode->i_sb,
1538 "inode %lu: bad block %llu", inode->i_ino,
1539 EXT4_I(inode)->i_file_acl);
1541 @@ -1501,7 +1501,7 @@ again:
1543 bh = sb_bread(inode->i_sb, ce->e_block);
1545 - ext4_error(inode->i_sb, __func__,
1546 + ext4_error(inode->i_sb,
1547 "inode %lu: block %lu read error",
1548 inode->i_ino, (unsigned long) ce->e_block);
1549 } else if (le32_to_cpu(BHDR(bh)->h_refcount) >=