diff options
| -rw-r--r-- | fs/xfs/support/debug.c | 37 | ||||
| -rw-r--r-- | fs/xfs/support/debug.h | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_error.c | 15 | ||||
| -rw-r--r-- | fs/xfs/xfs_error.h | 12 | 
4 files changed, 40 insertions, 26 deletions
diff --git a/fs/xfs/support/debug.c b/fs/xfs/support/debug.c index 636104254cf..ae548296542 100644 --- a/fs/xfs/support/debug.c +++ b/fs/xfs/support/debug.c @@ -18,6 +18,13 @@  #include <xfs.h>  #include "debug.h" +/* xfs_mount.h drags a lot of crap in, sorry.. */ +#include "xfs_sb.h" +#include "xfs_inum.h" +#include "xfs_ag.h" +#include "xfs_dmapi.h" +#include "xfs_mount.h" +  static char		message[1024];	/* keep it off the stack */  static DEFINE_SPINLOCK(xfs_err_lock); @@ -55,22 +62,42 @@ cmn_err(register int level, char *fmt, ...)  }  void -icmn_err(register int level, char *fmt, va_list ap) +xfs_fs_vcmn_err( +	int			level, +	struct xfs_mount	*mp, +	char			*fmt, +	va_list			ap)  { -	ulong	flags; -	int	len; +	unsigned long		flags; +	int			len = 0;  	level &= XFS_ERR_MASK; -	if(level > XFS_MAX_ERR_LEVEL) +	if (level > XFS_MAX_ERR_LEVEL)  		level = XFS_MAX_ERR_LEVEL; +  	spin_lock_irqsave(&xfs_err_lock,flags); -	len = vsnprintf(message, sizeof(message), fmt, ap); + +	if (mp) { +		len = sprintf(message, "Filesystem \"%s\": ", mp->m_fsname); + +		/* +		 * Skip the printk if we can't print anything useful +		 * due to an over-long device name. +		 */ +		if (len >= sizeof(message)) +			goto out; +	} + +	len = vsnprintf(message + len, sizeof(message) - len, fmt, ap);  	if (len >= sizeof(message))  		len = sizeof(message) - 1;  	if (message[len-1] == '\n')  		message[len-1] = 0; +  	printk("%s%s\n", err_level[level], message); + out:  	spin_unlock_irqrestore(&xfs_err_lock,flags); +  	BUG_ON(level == CE_PANIC);  } diff --git a/fs/xfs/support/debug.h b/fs/xfs/support/debug.h index 75845f95081..6f4fd37c67a 100644 --- a/fs/xfs/support/debug.h +++ b/fs/xfs/support/debug.h @@ -27,8 +27,6 @@  #define CE_ALERT        1               /* alert        */  #define CE_PANIC        0               /* panic        */ -extern void icmn_err(int, char *, va_list) -	__attribute__ ((format (printf, 2, 0)));  extern void cmn_err(int, char *, ...)  	__attribute__ ((format (printf, 2, 3)));  extern void assfail(char *expr, char *f, int l); diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c index f227ecd1a29..92d5cd5bf4f 100644 --- a/fs/xfs/xfs_error.c +++ b/fs/xfs/xfs_error.c @@ -153,21 +153,6 @@ xfs_errortag_clearall(xfs_mount_t *mp, int loud)  }  #endif /* DEBUG */ -static void -xfs_fs_vcmn_err(int level, xfs_mount_t *mp, char *fmt, va_list ap) -{ -	if (mp != NULL) { -		char	*newfmt; -		int	len = 16 + mp->m_fsname_len + strlen(fmt); - -		newfmt = kmem_alloc(len, KM_SLEEP); -		sprintf(newfmt, "Filesystem \"%s\": %s", mp->m_fsname, fmt); -		icmn_err(level, newfmt, ap); -		kmem_free(newfmt); -	} else { -		icmn_err(level, fmt, ap); -	} -}  void  xfs_fs_cmn_err(int level, xfs_mount_t *mp, char *fmt, ...) diff --git a/fs/xfs/xfs_error.h b/fs/xfs/xfs_error.h index 11543f10b0c..0c93051c465 100644 --- a/fs/xfs/xfs_error.h +++ b/fs/xfs/xfs_error.h @@ -159,11 +159,15 @@ extern int xfs_errortag_clearall(xfs_mount_t *mp, int loud);  #define		XFS_PTAG_FSBLOCK_ZERO		0x00000080  struct xfs_mount; -/* PRINTFLIKE4 */ + +extern void xfs_fs_vcmn_err(int level, struct xfs_mount *mp, +		char *fmt, va_list ap) +	__attribute__ ((format (printf, 3, 0)));  extern void xfs_cmn_err(int panic_tag, int level, struct xfs_mount *mp, -			char *fmt, ...); -/* PRINTFLIKE3 */ -extern void xfs_fs_cmn_err(int level, struct xfs_mount *mp, char *fmt, ...); +			char *fmt, ...) +	__attribute__ ((format (printf, 4, 5))); +extern void xfs_fs_cmn_err(int level, struct xfs_mount *mp, char *fmt, ...) +	__attribute__ ((format (printf, 3, 4)));  extern void xfs_hex_dump(void *p, int length);  |