--- linux-2.6.12.2/kernel/printk.c 2005-06-22 02:38:53 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/kernel/printk.c 2005-07-02 22:38:30 +0200 @@ -514,6 +510,8 @@ asmlinkage int printk(const char *fmt, . return r; } +static volatile int printk_cpu = -1; + asmlinkage int vprintk(const char *fmt, va_list args) { unsigned long flags; --- linux-2.6.12.2/kernel/printk.c 2005-06-22 02:38:53 +0200 +++ linux-2.6.12.2-vs2.0-rc6.1/kernel/printk.c 2005-07-02 22:38:30 +0200 @@ -522,11 +520,12 @@ asmlinkage int vprintk(const char *fmt, static char printk_buf[1024]; static int log_level_unknown = 1; - if (unlikely(oops_in_progress)) + if (unlikely(oops_in_progress && printk_cpu == smp_processor_id())) zap_locks(); /* This stops the holder of console_sem just where we want him */ spin_lock_irqsave(&logbuf_lock, flags); + printk_cpu = smp_processor_id(); /* Emit the output into the temporary buffer */ printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args); --- linux-2.6.12.2/fs/xfs/linux-2.6/xfs_iops.c 2005-03-02 12:38:46 +0100 +++ linux-2.6.12.2-vs2.0-rc6.1/fs/xfs/linux-2.6/xfs_iops.c 2005-07-09 04:09:20 +0200 @@ -479,6 +501,10 @@ linvfs_setattr( int flags = 0; int error; + error = inode_change_ok(inode, attr); + if (error) + return error; + memset(&vattr, 0, sizeof(vattr_t)); if (ia_valid & ATTR_UID) { vattr.va_mask |= XFS_AT_UID;