aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/dir.c7
-rw-r--r--fs/ext4/ext4.h44
-rw-r--r--fs/ext4/ext4_jbd2.c12
-rw-r--r--fs/ext4/ext4_jbd2.h4
-rw-r--r--fs/ext4/extents.c10
-rw-r--r--fs/ext4/inode.c44
-rw-r--r--fs/ext4/move_extent.c10
-rw-r--r--fs/ext4/super.c47
8 files changed, 98 insertions, 80 deletions
diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c
index af581f08fe3a..62e8af04ed1e 100644
--- a/fs/ext4/dir.c
+++ b/fs/ext4/dir.c
@@ -84,11 +84,10 @@ int __ext4_check_dir_entry(const char *function, unsigned int line,
84 error_msg = "inode out of bounds"; 84 error_msg = "inode out of bounds";
85 85
86 if (error_msg != NULL) 86 if (error_msg != NULL)
87 ext4_error_inode(function, dir, 87 ext4_error_inode(dir, function, line, bh->b_blocknr,
88 "bad entry in directory: %s - block=%llu" 88 "bad entry in directory: %s - "
89 "offset=%u(%u), inode=%u, rec_len=%d, name_len=%d", 89 "offset=%u(%u), inode=%u, rec_len=%d, name_len=%d",
90 error_msg, (unsigned long long) bh->b_blocknr, 90 error_msg, (unsigned) (offset%bh->b_size), offset,
91 (unsigned) (offset%bh->b_size), offset,
92 le32_to_cpu(de->inode), 91 le32_to_cpu(de->inode),
93 rlen, de->name_len); 92 rlen, de->name_len);
94 return error_msg == NULL ? 1 : 0; 93 return error_msg == NULL ? 1 : 0;
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 73465b26976d..088938148f5c 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -57,10 +57,13 @@
57#endif 57#endif
58 58
59#define EXT4_ERROR_INODE(inode, fmt, a...) \ 59#define EXT4_ERROR_INODE(inode, fmt, a...) \
60 ext4_error_inode(__func__, (inode), (fmt), ## a) 60 ext4_error_inode((inode), __func__, __LINE__, 0, (fmt), ## a)
61
62#define EXT4_ERROR_INODE_BLOCK(inode, block, fmt, a...) \
63 ext4_error_inode((inode), __func__, __LINE__, (block), (fmt), ## a)
61 64
62#define EXT4_ERROR_FILE(file, fmt, a...) \ 65#define EXT4_ERROR_FILE(file, fmt, a...) \
63 ext4_error_file(__func__, (file), (fmt), ## a) 66 ext4_error_file(__func__, __LINE__, (file), (fmt), ## a)
64 67
65/* data type for block offset of block group */ 68/* data type for block offset of block group */
66typedef int ext4_grpblk_t; 69typedef int ext4_grpblk_t;
@@ -1623,22 +1626,29 @@ extern int ext4_group_extend(struct super_block *sb,
1623 ext4_fsblk_t n_blocks_count); 1626 ext4_fsblk_t n_blocks_count);
1624 1627
1625/* super.c */ 1628/* super.c */
1626extern void __ext4_error(struct super_block *, const char *, const char *, ...) 1629extern void __ext4_error(struct super_block *, const char *, unsigned int,
1627 __attribute__ ((format (printf, 3, 4))); 1630 const char *, ...)
1628#define ext4_error(sb, message...) __ext4_error(sb, __func__, ## message) 1631 __attribute__ ((format (printf, 4, 5)));
1629extern void ext4_error_inode(const char *, struct inode *, const char *, ...) 1632#define ext4_error(sb, message...) __ext4_error(sb, __func__, \
1630 __attribute__ ((format (printf, 3, 4))); 1633 __LINE__, ## message)
1631extern void ext4_error_file(const char *, struct file *, const char *, ...) 1634extern void ext4_error_inode(struct inode *, const char *, unsigned int,
1632 __attribute__ ((format (printf, 3, 4))); 1635 ext4_fsblk_t, const char *, ...)
1633extern void __ext4_std_error(struct super_block *, const char *, int); 1636 __attribute__ ((format (printf, 5, 6)));
1634extern void __ext4_abort(struct super_block *, const char *, const char *, ...) 1637extern void ext4_error_file(struct file *, const char *, unsigned int,
1635 __attribute__ ((format (printf, 3, 4))); 1638 const char *, ...)
1639 __attribute__ ((format (printf, 4, 5)));
1640extern void __ext4_std_error(struct super_block *, const char *,
1641 unsigned int, int);
1642extern void __ext4_abort(struct super_block *, const char *, unsigned int,
1643 const char *, ...)
1644 __attribute__ ((format (printf, 4, 5)));
1636#define ext4_abort(sb, message...) __ext4_abort(sb, __func__, \ 1645#define ext4_abort(sb, message...) __ext4_abort(sb, __func__, \
1637 ## message) 1646 __LINE__, ## message)
1638extern void __ext4_warning(struct super_block *, const char *, 1647extern void __ext4_warning(struct super_block *, const char *, unsigned int,
1639 const char *, ...) 1648 const char *, ...)
1640 __attribute__ ((format (printf, 3, 4))); 1649 __attribute__ ((format (printf, 4, 5)));
1641#define ext4_warning(sb, message...) __ext4_warning(sb, __func__, ## message) 1650#define ext4_warning(sb, message...) __ext4_warning(sb, __func__, \
1651 __LINE__, ## message)
1642extern void ext4_msg(struct super_block *, const char *, const char *, ...) 1652extern void ext4_msg(struct super_block *, const char *, const char *, ...)
1643 __attribute__ ((format (printf, 3, 4))); 1653 __attribute__ ((format (printf, 3, 4)));
1644extern void __ext4_grp_locked_error(const char *, unsigned int, \ 1654extern void __ext4_grp_locked_error(const char *, unsigned int, \
@@ -1781,7 +1791,7 @@ static inline unsigned int ext4_flex_bg_size(struct ext4_sb_info *sbi)
1781#define ext4_std_error(sb, errno) \ 1791#define ext4_std_error(sb, errno) \
1782do { \ 1792do { \
1783 if ((errno)) \ 1793 if ((errno)) \
1784 __ext4_std_error((sb), __func__, (errno)); \ 1794 __ext4_std_error((sb), __func__, __LINE__, (errno)); \
1785} while (0) 1795} while (0)
1786 1796
1787#ifdef CONFIG_SMP 1797#ifdef CONFIG_SMP
diff --git a/fs/ext4/ext4_jbd2.c b/fs/ext4/ext4_jbd2.c
index 9de37b9e177a..23425cd68daa 100644
--- a/fs/ext4/ext4_jbd2.c
+++ b/fs/ext4/ext4_jbd2.c
@@ -94,8 +94,8 @@ int __ext4_forget(const char *where, unsigned int line, handle_t *handle,
94 if (err) { 94 if (err) {
95 ext4_journal_abort_handle(where, line, __func__, 95 ext4_journal_abort_handle(where, line, __func__,
96 bh, handle, err); 96 bh, handle, err);
97 __ext4_abort(inode->i_sb, where, 97 __ext4_abort(inode->i_sb, where, line,
98 "error %d when attempting revoke", err); 98 "error %d when attempting revoke", err);
99 } 99 }
100 BUFFER_TRACE(bh, "exit"); 100 BUFFER_TRACE(bh, "exit");
101 return err; 101 return err;
@@ -134,11 +134,9 @@ int __ext4_handle_dirty_metadata(const char *where, unsigned int line,
134 if (inode && inode_needs_sync(inode)) { 134 if (inode && inode_needs_sync(inode)) {
135 sync_dirty_buffer(bh); 135 sync_dirty_buffer(bh);
136 if (buffer_req(bh) && !buffer_uptodate(bh)) { 136 if (buffer_req(bh) && !buffer_uptodate(bh)) {
137 ext4_error(inode->i_sb, 137 ext4_error_inode(inode, where, line,
138 "IO error syncing inode, " 138 bh->b_blocknr,
139 "inode=%lu, block=%llu", 139 "IO error syncing itable block");
140 inode->i_ino,
141 (unsigned long long) bh->b_blocknr);
142 err = -EIO; 140 err = -EIO;
143 } 141 }
144 } 142 }
diff --git a/fs/ext4/ext4_jbd2.h b/fs/ext4/ext4_jbd2.h
index 6883c6be5b8d..b0bd792c58c5 100644
--- a/fs/ext4/ext4_jbd2.h
+++ b/fs/ext4/ext4_jbd2.h
@@ -162,7 +162,7 @@ int __ext4_handle_dirty_super(const char *where, unsigned int line,
162 __ext4_handle_dirty_super(__func__, __LINE__, (handle), (sb)) 162 __ext4_handle_dirty_super(__func__, __LINE__, (handle), (sb))
163 163
164handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks); 164handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks);
165int __ext4_journal_stop(const char *where, handle_t *handle); 165int __ext4_journal_stop(const char *where, unsigned int line, handle_t *handle);
166 166
167#define EXT4_NOJOURNAL_MAX_REF_COUNT ((unsigned long) 4096) 167#define EXT4_NOJOURNAL_MAX_REF_COUNT ((unsigned long) 4096)
168 168
@@ -215,7 +215,7 @@ static inline handle_t *ext4_journal_start(struct inode *inode, int nblocks)
215} 215}
216 216
217#define ext4_journal_stop(handle) \ 217#define ext4_journal_stop(handle) \
218 __ext4_journal_stop(__func__, (handle)) 218 __ext4_journal_stop(__func__, __LINE__, (handle))
219 219
220static inline handle_t *ext4_journal_current_handle(void) 220static inline handle_t *ext4_journal_current_handle(void)
221{ 221{
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 346de3daab79..2c01d7391f1e 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -401,9 +401,9 @@ static int ext4_valid_extent_entries(struct inode *inode,
401 return 1; 401 return 1;
402} 402}
403 403
404static int __ext4_ext_check(const char *function, struct inode *inode, 404static int __ext4_ext_check(const char *function, unsigned int line,
405 struct ext4_extent_header *eh, 405 struct inode *inode, struct ext4_extent_header *eh,
406 int depth) 406 int depth)
407{ 407{
408 const char *error_msg; 408 const char *error_msg;
409 int max = 0; 409 int max = 0;
@@ -436,7 +436,7 @@ static int __ext4_ext_check(const char *function, struct inode *inode,
436 return 0; 436 return 0;
437 437
438corrupted: 438corrupted:
439 ext4_error_inode(function, inode, 439 ext4_error_inode(inode, function, line, 0,
440 "bad header/extent: %s - magic %x, " 440 "bad header/extent: %s - magic %x, "
441 "entries %u, max %u(%u), depth %u(%u)", 441 "entries %u, max %u(%u), depth %u(%u)",
442 error_msg, le16_to_cpu(eh->eh_magic), 442 error_msg, le16_to_cpu(eh->eh_magic),
@@ -447,7 +447,7 @@ corrupted:
447} 447}
448 448
449#define ext4_ext_check(inode, eh, depth) \ 449#define ext4_ext_check(inode, eh, depth) \
450 __ext4_ext_check(__func__, inode, eh, depth) 450 __ext4_ext_check(__func__, __LINE__, inode, eh, depth)
451 451
452int ext4_ext_check_inode(struct inode *inode) 452int ext4_ext_check_inode(struct inode *inode)
453{ 453{
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 64baadb4956d..69ea663ef03e 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -337,7 +337,8 @@ static int ext4_block_to_path(struct inode *inode,
337 return n; 337 return n;
338} 338}
339 339
340static int __ext4_check_blockref(const char *function, struct inode *inode, 340static int __ext4_check_blockref(const char *function, unsigned int line,
341 struct inode *inode,
341 __le32 *p, unsigned int max) 342 __le32 *p, unsigned int max)
342{ 343{
343 __le32 *bref = p; 344 __le32 *bref = p;
@@ -348,8 +349,8 @@ static int __ext4_check_blockref(const char *function, struct inode *inode,
348 if (blk && 349 if (blk &&
349 unlikely(!ext4_data_block_valid(EXT4_SB(inode->i_sb), 350 unlikely(!ext4_data_block_valid(EXT4_SB(inode->i_sb),
350 blk, 1))) { 351 blk, 1))) {
351 ext4_error_inode(function, inode, 352 ext4_error_inode(inode, function, line, blk,
352 "invalid block reference %u", blk); 353 "invalid block");
353 return -EIO; 354 return -EIO;
354 } 355 }
355 } 356 }
@@ -358,11 +359,13 @@ static int __ext4_check_blockref(const char *function, struct inode *inode,
358 359
359 360
360#define ext4_check_indirect_blockref(inode, bh) \ 361#define ext4_check_indirect_blockref(inode, bh) \
361 __ext4_check_blockref(__func__, inode, (__le32 *)(bh)->b_data, \ 362 __ext4_check_blockref(__func__, __LINE__, inode, \
363 (__le32 *)(bh)->b_data, \
362 EXT4_ADDR_PER_BLOCK((inode)->i_sb)) 364 EXT4_ADDR_PER_BLOCK((inode)->i_sb))
363 365
364#define ext4_check_inode_blockref(inode) \ 366#define ext4_check_inode_blockref(inode) \
365 __ext4_check_blockref(__func__, inode, EXT4_I(inode)->i_data, \ 367 __ext4_check_blockref(__func__, __LINE__, inode, \
368 EXT4_I(inode)->i_data, \
366 EXT4_NDIR_BLOCKS) 369 EXT4_NDIR_BLOCKS)
367 370
368/** 371/**
@@ -1129,21 +1132,22 @@ void ext4_da_update_reserve_space(struct inode *inode,
1129} 1132}
1130 1133
1131static int __check_block_validity(struct inode *inode, const char *func, 1134static int __check_block_validity(struct inode *inode, const char *func,
1132 struct ext4_map_blocks *map) 1135 unsigned int line,
1136 struct ext4_map_blocks *map)
1133{ 1137{
1134 if (!ext4_data_block_valid(EXT4_SB(inode->i_sb), map->m_pblk, 1138 if (!ext4_data_block_valid(EXT4_SB(inode->i_sb), map->m_pblk,
1135 map->m_len)) { 1139 map->m_len)) {
1136 ext4_error_inode(func, inode, 1140 ext4_error_inode(inode, func, line, map->m_pblk,
1137 "lblock %lu mapped to illegal pblock %llu " 1141 "lblock %lu mapped to illegal pblock "
1138 "(length %d)", (unsigned long) map->m_lblk, 1142 "(length %d)", (unsigned long) map->m_lblk,
1139 map->m_pblk, map->m_len); 1143 map->m_len);
1140 return -EIO; 1144 return -EIO;
1141 } 1145 }
1142 return 0; 1146 return 0;
1143} 1147}
1144 1148
1145#define check_block_validity(inode, map) \ 1149#define check_block_validity(inode, map) \
1146 __check_block_validity((inode), __func__, (map)) 1150 __check_block_validity((inode), __func__, __LINE__, (map))
1147 1151
1148/* 1152/*
1149 * Return the number of contiguous dirty pages in a given inode 1153 * Return the number of contiguous dirty pages in a given inode
@@ -4471,9 +4475,8 @@ static void ext4_free_branches(handle_t *handle, struct inode *inode,
4471 * (should be rare). 4475 * (should be rare).
4472 */ 4476 */
4473 if (!bh) { 4477 if (!bh) {
4474 EXT4_ERROR_INODE(inode, 4478 EXT4_ERROR_INODE_BLOCK(inode, nr,
4475 "Read failure block=%llu", 4479 "Read failure");
4476 (unsigned long long) nr);
4477 continue; 4480 continue;
4478 } 4481 }
4479 4482
@@ -4788,8 +4791,8 @@ static int __ext4_get_inode_loc(struct inode *inode,
4788 4791
4789 bh = sb_getblk(sb, block); 4792 bh = sb_getblk(sb, block);
4790 if (!bh) { 4793 if (!bh) {
4791 EXT4_ERROR_INODE(inode, "unable to read inode block - " 4794 EXT4_ERROR_INODE_BLOCK(inode, block,
4792 "block %llu", block); 4795 "unable to read itable block");
4793 return -EIO; 4796 return -EIO;
4794 } 4797 }
4795 if (!buffer_uptodate(bh)) { 4798 if (!buffer_uptodate(bh)) {
@@ -4887,8 +4890,8 @@ make_io:
4887 submit_bh(READ_META, bh); 4890 submit_bh(READ_META, bh);
4888 wait_on_buffer(bh); 4891 wait_on_buffer(bh);
4889 if (!buffer_uptodate(bh)) { 4892 if (!buffer_uptodate(bh)) {
4890 EXT4_ERROR_INODE(inode, "unable to read inode " 4893 EXT4_ERROR_INODE_BLOCK(inode, block,
4891 "block %llu", block); 4894 "unable to read itable block");
4892 brelse(bh); 4895 brelse(bh);
4893 return -EIO; 4896 return -EIO;
4894 } 4897 }
@@ -5389,9 +5392,8 @@ int ext4_write_inode(struct inode *inode, struct writeback_control *wbc)
5389 if (wbc->sync_mode == WB_SYNC_ALL) 5392 if (wbc->sync_mode == WB_SYNC_ALL)
5390 sync_dirty_buffer(iloc.bh); 5393 sync_dirty_buffer(iloc.bh);
5391 if (buffer_req(iloc.bh) && !buffer_uptodate(iloc.bh)) { 5394 if (buffer_req(iloc.bh) && !buffer_uptodate(iloc.bh)) {
5392 EXT4_ERROR_INODE(inode, 5395 EXT4_ERROR_INODE_BLOCK(inode, iloc.bh->b_blocknr,
5393 "IO error syncing inode (block=%llu)", 5396 "IO error syncing inode");
5394 (unsigned long long) iloc.bh->b_blocknr);
5395 err = -EIO; 5397 err = -EIO;
5396 } 5398 }
5397 brelse(iloc.bh); 5399 brelse(iloc.bh);
diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c
index 52abfa12762a..5f1ed9fc913c 100644
--- a/fs/ext4/move_extent.c
+++ b/fs/ext4/move_extent.c
@@ -148,17 +148,17 @@ mext_next_extent(struct inode *inode, struct ext4_ext_path *path,
148 */ 148 */
149static int 149static int
150mext_check_null_inode(struct inode *inode1, struct inode *inode2, 150mext_check_null_inode(struct inode *inode1, struct inode *inode2,
151 const char *function) 151 const char *function, unsigned int line)
152{ 152{
153 int ret = 0; 153 int ret = 0;
154 154
155 if (inode1 == NULL) { 155 if (inode1 == NULL) {
156 __ext4_error(inode2->i_sb, function, 156 __ext4_error(inode2->i_sb, function, line,
157 "Both inodes should not be NULL: " 157 "Both inodes should not be NULL: "
158 "inode1 NULL inode2 %lu", inode2->i_ino); 158 "inode1 NULL inode2 %lu", inode2->i_ino);
159 ret = -EIO; 159 ret = -EIO;
160 } else if (inode2 == NULL) { 160 } else if (inode2 == NULL) {
161 __ext4_error(inode1->i_sb, function, 161 __ext4_error(inode1->i_sb, function, line,
162 "Both inodes should not be NULL: " 162 "Both inodes should not be NULL: "
163 "inode1 %lu inode2 NULL", inode1->i_ino); 163 "inode1 %lu inode2 NULL", inode1->i_ino);
164 ret = -EIO; 164 ret = -EIO;
@@ -1084,7 +1084,7 @@ mext_inode_double_lock(struct inode *inode1, struct inode *inode2)
1084 1084
1085 BUG_ON(inode1 == NULL && inode2 == NULL); 1085 BUG_ON(inode1 == NULL && inode2 == NULL);
1086 1086
1087 ret = mext_check_null_inode(inode1, inode2, __func__); 1087 ret = mext_check_null_inode(inode1, inode2, __func__, __LINE__);
1088 if (ret < 0) 1088 if (ret < 0)
1089 goto out; 1089 goto out;
1090 1090
@@ -1121,7 +1121,7 @@ mext_inode_double_unlock(struct inode *inode1, struct inode *inode2)
1121 1121
1122 BUG_ON(inode1 == NULL && inode2 == NULL); 1122 BUG_ON(inode1 == NULL && inode2 == NULL);
1123 1123
1124 ret = mext_check_null_inode(inode1, inode2, __func__); 1124 ret = mext_check_null_inode(inode1, inode2, __func__, __LINE__);
1125 if (ret < 0) 1125 if (ret < 0)
1126 goto out; 1126 goto out;
1127 1127
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 87db5ecfccb4..bcf74b31d014 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -262,7 +262,7 @@ handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks)
262 * that sync() will call the filesystem's write_super callback if 262 * that sync() will call the filesystem's write_super callback if
263 * appropriate. 263 * appropriate.
264 */ 264 */
265int __ext4_journal_stop(const char *where, handle_t *handle) 265int __ext4_journal_stop(const char *where, unsigned int line, handle_t *handle)
266{ 266{
267 struct super_block *sb; 267 struct super_block *sb;
268 int err; 268 int err;
@@ -279,7 +279,7 @@ int __ext4_journal_stop(const char *where, handle_t *handle)
279 if (!err) 279 if (!err)
280 err = rc; 280 err = rc;
281 if (err) 281 if (err)
282 __ext4_std_error(sb, where, err); 282 __ext4_std_error(sb, where, line, err);
283 return err; 283 return err;
284} 284}
285 285
@@ -350,12 +350,13 @@ static void ext4_handle_error(struct super_block *sb)
350} 350}
351 351
352void __ext4_error(struct super_block *sb, const char *function, 352void __ext4_error(struct super_block *sb, const char *function,
353 const char *fmt, ...) 353 unsigned int line, const char *fmt, ...)
354{ 354{
355 va_list args; 355 va_list args;
356 356
357 va_start(args, fmt); 357 va_start(args, fmt);
358 printk(KERN_CRIT "EXT4-fs error (device %s): %s: ", sb->s_id, function); 358 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: comm %s: ",
359 sb->s_id, function, line, current->comm);
359 vprintk(fmt, args); 360 vprintk(fmt, args);
360 printk("\n"); 361 printk("\n");
361 va_end(args); 362 va_end(args);
@@ -363,14 +364,18 @@ void __ext4_error(struct super_block *sb, const char *function,
363 ext4_handle_error(sb); 364 ext4_handle_error(sb);
364} 365}
365 366
366void ext4_error_inode(const char *function, struct inode *inode, 367void ext4_error_inode(struct inode *inode, const char *function,
368 unsigned int line, ext4_fsblk_t block,
367 const char *fmt, ...) 369 const char *fmt, ...)
368{ 370{
369 va_list args; 371 va_list args;
370 372
371 va_start(args, fmt); 373 va_start(args, fmt);
372 printk(KERN_CRIT "EXT4-fs error (device %s): %s: inode #%lu: (comm %s) ", 374 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: inode #%lu: ",
373 inode->i_sb->s_id, function, inode->i_ino, current->comm); 375 inode->i_sb->s_id, function, line, inode->i_ino);
376 if (block)
377 printk("block %llu: ", block);
378 printk("comm %s: ", current->comm);
374 vprintk(fmt, args); 379 vprintk(fmt, args);
375 printk("\n"); 380 printk("\n");
376 va_end(args); 381 va_end(args);
@@ -378,8 +383,8 @@ void ext4_error_inode(const char *function, struct inode *inode,
378 ext4_handle_error(inode->i_sb); 383 ext4_handle_error(inode->i_sb);
379} 384}
380 385
381void ext4_error_file(const char *function, struct file *file, 386void ext4_error_file(struct file *file, const char *function,
382 const char *fmt, ...) 387 unsigned int line, const char *fmt, ...)
383{ 388{
384 va_list args; 389 va_list args;
385 struct inode *inode = file->f_dentry->d_inode; 390 struct inode *inode = file->f_dentry->d_inode;
@@ -390,8 +395,10 @@ void ext4_error_file(const char *function, struct file *file,
390 if (!path) 395 if (!path)
391 path = "(unknown)"; 396 path = "(unknown)";
392 printk(KERN_CRIT 397 printk(KERN_CRIT
393 "EXT4-fs error (device %s): %s: inode #%lu (comm %s path %s): ", 398 "EXT4-fs error (device %s): %s:%d: inode #%lu "
394 inode->i_sb->s_id, function, inode->i_ino, current->comm, path); 399 "(comm %s path %s): ",
400 inode->i_sb->s_id, function, line, inode->i_ino,
401 current->comm, path);
395 vprintk(fmt, args); 402 vprintk(fmt, args);
396 printk("\n"); 403 printk("\n");
397 va_end(args); 404 va_end(args);
@@ -436,7 +443,8 @@ static const char *ext4_decode_error(struct super_block *sb, int errno,
436/* __ext4_std_error decodes expected errors from journaling functions 443/* __ext4_std_error decodes expected errors from journaling functions
437 * automatically and invokes the appropriate error response. */ 444 * automatically and invokes the appropriate error response. */
438 445
439void __ext4_std_error(struct super_block *sb, const char *function, int errno) 446void __ext4_std_error(struct super_block *sb, const char *function,
447 unsigned int line, int errno)
440{ 448{
441 char nbuf[16]; 449 char nbuf[16];
442 const char *errstr; 450 const char *errstr;
@@ -449,8 +457,8 @@ void __ext4_std_error(struct super_block *sb, const char *function, int errno)
449 return; 457 return;
450 458
451 errstr = ext4_decode_error(sb, errno, nbuf); 459 errstr = ext4_decode_error(sb, errno, nbuf);
452 printk(KERN_CRIT "EXT4-fs error (device %s) in %s: %s\n", 460 printk(KERN_CRIT "EXT4-fs error (device %s) in %s:%d: %s\n",
453 sb->s_id, function, errstr); 461 sb->s_id, function, line, errstr);
454 462
455 ext4_handle_error(sb); 463 ext4_handle_error(sb);
456} 464}
@@ -466,12 +474,13 @@ void __ext4_std_error(struct super_block *sb, const char *function, int errno)
466 */ 474 */
467 475
468void __ext4_abort(struct super_block *sb, const char *function, 476void __ext4_abort(struct super_block *sb, const char *function,
469 const char *fmt, ...) 477 unsigned int line, const char *fmt, ...)
470{ 478{
471 va_list args; 479 va_list args;
472 480
473 va_start(args, fmt); 481 va_start(args, fmt);
474 printk(KERN_CRIT "EXT4-fs error (device %s): %s: ", sb->s_id, function); 482 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: ", sb->s_id,
483 function, line);
475 vprintk(fmt, args); 484 vprintk(fmt, args);
476 printk("\n"); 485 printk("\n");
477 va_end(args); 486 va_end(args);
@@ -503,13 +512,13 @@ void ext4_msg (struct super_block * sb, const char *prefix,
503} 512}
504 513
505void __ext4_warning(struct super_block *sb, const char *function, 514void __ext4_warning(struct super_block *sb, const char *function,
506 const char *fmt, ...) 515 unsigned int line, const char *fmt, ...)
507{ 516{
508 va_list args; 517 va_list args;
509 518
510 va_start(args, fmt); 519 va_start(args, fmt);
511 printk(KERN_WARNING "EXT4-fs warning (device %s): %s: ", 520 printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: ",
512 sb->s_id, function); 521 sb->s_id, function, line);
513 vprintk(fmt, args); 522 vprintk(fmt, args);
514 printk("\n"); 523 printk("\n");
515 va_end(args); 524 va_end(args);