]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.suse/reiserfs-add-reiserfs_error.diff
Added missing Xen Kernel Patches which were not commited because
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.suse / reiserfs-add-reiserfs_error.diff
diff --git a/src/patches/suse-2.6.27.31/patches.suse/reiserfs-add-reiserfs_error.diff b/src/patches/suse-2.6.27.31/patches.suse/reiserfs-add-reiserfs_error.diff
new file mode 100644 (file)
index 0000000..04f95cf
--- /dev/null
@@ -0,0 +1,64 @@
+From: Jeff Mahoney <jeffm@suse.com>
+Subject: 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>
+
+--
+ fs/reiserfs/prints.c        |   25 +++++++++++++++++++++++++
+ include/linux/reiserfs_fs.h |    4 ++++
+ 2 files changed, 29 insertions(+)
+
+--- a/fs/reiserfs/prints.c
++++ b/fs/reiserfs/prints.c
+@@ -373,6 +373,31 @@ void __reiserfs_panic(struct super_block
+                     id ? id : "", id ? " " : "", function, error_buf);
+ }
++void __reiserfs_error(struct super_block *sb, const char *id,
++                    const char *function, const char *fmt, ...)
++{
++      do_reiserfs_warning(fmt);
++
++      BUG_ON(sb == NULL);
++
++      if (reiserfs_error_panic(sb))
++              __reiserfs_panic(sb, id, function, error_buf);
++
++      if (id && id[0])
++              printk(KERN_CRIT "REISERFS error (device %s): %s %s: %s\n",
++                     sb->s_id, id, function, error_buf);
++      else
++              printk(KERN_CRIT "REISERFS error (device %s): %s: %s\n",
++                     sb->s_id, function, error_buf);
++
++      if (sb->s_flags & MS_RDONLY)
++              return;
++
++      reiserfs_info(sb, "Remounting filesystem read-only\n");
++      sb->s_flags |= MS_RDONLY;
++      reiserfs_abort_journal(sb, -EIO);
++}
++
+ void reiserfs_abort(struct super_block *sb, int errno, const char *fmt, ...)
+ {
+       do_reiserfs_warning(fmt);
+--- a/include/linux/reiserfs_fs.h
++++ b/include/linux/reiserfs_fs.h
+@@ -2006,6 +2006,10 @@ void __reiserfs_panic(struct super_block
+     __attribute__ ((noreturn));
+ #define reiserfs_panic(s, id, fmt, args...) \
+       __reiserfs_panic(s, id, __func__, fmt, ##args)
++void __reiserfs_error(struct super_block *s, const char *id,
++                    const char *function, const char *fmt, ...);
++#define reiserfs_error(s, id, fmt, args...) \
++       __reiserfs_error(s, id, __func__, fmt, ##args)
+ void reiserfs_info(struct super_block *s, const char *fmt, ...);
+ void reiserfs_debug(struct super_block *s, int level, const char *fmt, ...);
+ void print_indirect_item(struct buffer_head *bh, int item_num);