aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Mahoney <jeffm@suse.com>2009-03-30 14:02:27 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-03-30 15:16:36 -0400
commit1e5e59d431038c53954fe8f0b38bee0f0ad30349 (patch)
tree25e10648779424a85de6d368bd08c53c51c8f7a8
parent32e8b1062915d00d07d3b88a95174648e369b6a3 (diff)
reiserfs: introduce reiserfs_error()
Although reiserfs can currently handle severe errors such as journal failure, it cannot handle less severe errors like metadata i/o failure. The following patch adds a reiserfs_error() function akin to the one in ext3. Subsequent patches will use this new error handler to handle errors more gracefully in general. Signed-off-by: Jeff Mahoney <jeffm@suse.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--fs/reiserfs/prints.c25
-rw-r--r--include/linux/reiserfs_fs.h4
2 files changed, 29 insertions, 0 deletions
diff --git a/fs/reiserfs/prints.c b/fs/reiserfs/prints.c
index 84f3f69652e3..8e826c07cd21 100644
--- a/fs/reiserfs/prints.c
+++ b/fs/reiserfs/prints.c
@@ -370,6 +370,31 @@ void __reiserfs_panic(struct super_block *sb, const char *id,
370 id ? id : "", id ? " " : "", function, error_buf); 370 id ? id : "", id ? " " : "", function, error_buf);
371} 371}
372 372
373void __reiserfs_error(struct super_block *sb, const char *id,
374 const char *function, const char *fmt, ...)
375{
376 do_reiserfs_warning(fmt);
377
378 BUG_ON(sb == NULL);
379
380 if (reiserfs_error_panic(sb))
381 __reiserfs_panic(sb, id, function, error_buf);
382
383 if (id && id[0])
384 printk(KERN_CRIT "REISERFS error (device %s): %s %s: %s\n",
385 sb->s_id, id, function, error_buf);
386 else
387 printk(KERN_CRIT "REISERFS error (device %s): %s: %s\n",
388 sb->s_id, function, error_buf);
389
390 if (sb->s_flags & MS_RDONLY)
391 return;
392
393 reiserfs_info(sb, "Remounting filesystem read-only\n");
394 sb->s_flags |= MS_RDONLY;
395 reiserfs_abort_journal(sb, -EIO);
396}
397
373void reiserfs_abort(struct super_block *sb, int errno, const char *fmt, ...) 398void reiserfs_abort(struct super_block *sb, int errno, const char *fmt, ...)
374{ 399{
375 do_reiserfs_warning(fmt); 400 do_reiserfs_warning(fmt);
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h
index d097966bbd91..6c4af98b6767 100644
--- a/include/linux/reiserfs_fs.h
+++ b/include/linux/reiserfs_fs.h
@@ -2006,6 +2006,10 @@ void __reiserfs_panic(struct super_block *s, const char *id,
2006 __attribute__ ((noreturn)); 2006 __attribute__ ((noreturn));
2007#define reiserfs_panic(s, id, fmt, args...) \ 2007#define reiserfs_panic(s, id, fmt, args...) \
2008 __reiserfs_panic(s, id, __func__, fmt, ##args) 2008 __reiserfs_panic(s, id, __func__, fmt, ##args)
2009void __reiserfs_error(struct super_block *s, const char *id,
2010 const char *function, const char *fmt, ...);
2011#define reiserfs_error(s, id, fmt, args...) \
2012 __reiserfs_error(s, id, __func__, fmt, ##args)
2009void reiserfs_info(struct super_block *s, const char *fmt, ...); 2013void reiserfs_info(struct super_block *s, const char *fmt, ...);
2010void reiserfs_debug(struct super_block *s, int level, const char *fmt, ...); 2014void reiserfs_debug(struct super_block *s, int level, const char *fmt, ...);
2011void print_indirect_item(struct buffer_head *bh, int item_num); 2015void print_indirect_item(struct buffer_head *bh, int item_num);