Re: [PATCH 07/39] reiserfs: introduce reiserfs_error()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jeff Mahoney wrote:
>  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@xxxxxxxx>
> 
> --
>  fs/reiserfs/prints.c        |   33 +++++++++++++++++++++++++++++++++
>  include/linux/reiserfs_fs.h |    3 +++
>  2 files changed, 36 insertions(+)
> 
> --- a/fs/reiserfs/prints.c	2007-05-30 15:43:37.000000000 -0400
> +++ b/fs/reiserfs/prints.c	2007-05-30 17:55:06.000000000 -0400
> @@ -373,6 +373,39 @@ void __reiserfs_panic(struct super_block
>  		      id ? id : "", id ? " " : "", function, error_buf);
>  }
>  
> +void reiserfs_handle_error(struct super_block *sb, int errno)
> +{
> +
> +	if (sb->s_flags & MS_RDONLY)
> +		return;
> +
> +	if (reiserfs_error_ro(sb)) {
> +		reiserfs_info(sb, "Remounting filesystem read-only\n");
> +		sb->s_flags |= MS_RDONLY;
> +	} else {
> +		reiserfs_journal_abort(sb, errno);
> +	}

shouldn't reiserfs_journal_abort be called in either case?

> +
> +	if (reiserfs_error_panic(sb)) {
> +		reiserfs_panic (sb, "", "panic forced after error");
> +	}

{} should be ommitted om the above according to linux coding style

> +}
> +
> +void __reiserfs_error(struct super_block *sb, const char *id,
> +                      const char *function, const char *fmt, ...)
> +{
> +	do_reiserfs_warning(fmt);
> +
> +	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);
> +
> +	reiserfs_handle_error(sb, -EIO);
> +}
> +
>  void reiserfs_abort(struct super_block *sb, int errno, const char *fmt, ...)
>  {
>  	do_reiserfs_warning(fmt);
> --- a/include/linux/reiserfs_fs.h	2007-05-30 15:43:37.000000000 -0400
> +++ b/include/linux/reiserfs_fs.h	2007-05-30 17:55:09.000000000 -0400
> @@ -1992,6 +1992,9 @@ void __reiserfs_panic(struct super_block
>      __attribute__ ((noreturn));
>  #define reiserfs_panic(s, id, fmt, args...) \
>          __reiserfs_panic(s, id, __FUNCTION__, 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, __FUNCTION__, 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);
> 

-
To unsubscribe from this list: send the line "unsubscribe reiserfs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux File System Development]     [Linux BTRFS]     [Linux NFS]     [Linux Filesystems]     [Ext4 Filesystem]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Resources]

  Powered by Linux