diff options
Diffstat (limited to 'fs/xfs/support/debug.c')
| -rw-r--r-- | fs/xfs/support/debug.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/fs/xfs/support/debug.c b/fs/xfs/support/debug.c index 4363512d2f90..08bbd3cb87ae 100644 --- a/fs/xfs/support/debug.c +++ b/fs/xfs/support/debug.c | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | #include "debug.h" | 19 | #include "debug.h" |
| 20 | #include "spin.h" | 20 | #include "spin.h" |
| 21 | 21 | ||
| 22 | static char message[256]; /* keep it off the stack */ | 22 | static char message[1024]; /* keep it off the stack */ |
| 23 | static DEFINE_SPINLOCK(xfs_err_lock); | 23 | static DEFINE_SPINLOCK(xfs_err_lock); |
| 24 | 24 | ||
| 25 | /* Translate from CE_FOO to KERN_FOO, err_level(CE_FOO) == KERN_FOO */ | 25 | /* Translate from CE_FOO to KERN_FOO, err_level(CE_FOO) == KERN_FOO */ |
| @@ -44,13 +44,14 @@ cmn_err(register int level, char *fmt, ...) | |||
| 44 | spin_lock_irqsave(&xfs_err_lock,flags); | 44 | spin_lock_irqsave(&xfs_err_lock,flags); |
| 45 | va_start(ap, fmt); | 45 | va_start(ap, fmt); |
| 46 | if (*fmt == '!') fp++; | 46 | if (*fmt == '!') fp++; |
| 47 | len = vsprintf(message, fp, ap); | 47 | len = vsnprintf(message, sizeof(message), fp, ap); |
| 48 | if (level != CE_DEBUG && message[len-1] != '\n') | 48 | if (len >= sizeof(message)) |
| 49 | strcat(message, "\n"); | 49 | len = sizeof(message) - 1; |
| 50 | printk("%s%s", err_level[level], message); | 50 | if (message[len-1] == '\n') |
| 51 | message[len-1] = 0; | ||
| 52 | printk("%s%s\n", err_level[level], message); | ||
| 51 | va_end(ap); | 53 | va_end(ap); |
| 52 | spin_unlock_irqrestore(&xfs_err_lock,flags); | 54 | spin_unlock_irqrestore(&xfs_err_lock,flags); |
| 53 | |||
| 54 | BUG_ON(level == CE_PANIC); | 55 | BUG_ON(level == CE_PANIC); |
| 55 | } | 56 | } |
| 56 | 57 | ||
| @@ -64,11 +65,13 @@ icmn_err(register int level, char *fmt, va_list ap) | |||
| 64 | if(level > XFS_MAX_ERR_LEVEL) | 65 | if(level > XFS_MAX_ERR_LEVEL) |
| 65 | level = XFS_MAX_ERR_LEVEL; | 66 | level = XFS_MAX_ERR_LEVEL; |
| 66 | spin_lock_irqsave(&xfs_err_lock,flags); | 67 | spin_lock_irqsave(&xfs_err_lock,flags); |
| 67 | len = vsprintf(message, fmt, ap); | 68 | len = vsnprintf(message, sizeof(message), fmt, ap); |
| 68 | if (level != CE_DEBUG && message[len-1] != '\n') | 69 | if (len >= sizeof(message)) |
| 69 | strcat(message, "\n"); | 70 | len = sizeof(message) - 1; |
| 71 | if (message[len-1] == '\n') | ||
| 72 | message[len-1] = 0; | ||
| 73 | printk("%s%s\n", err_level[level], message); | ||
| 70 | spin_unlock_irqrestore(&xfs_err_lock,flags); | 74 | spin_unlock_irqrestore(&xfs_err_lock,flags); |
| 71 | printk("%s%s", err_level[level], message); | ||
| 72 | BUG_ON(level == CE_PANIC); | 75 | BUG_ON(level == CE_PANIC); |
| 73 | } | 76 | } |
| 74 | 77 | ||
