[lkml]   [2010]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: 2.6.34 echo j > /proc/sysrq-trigger causes inifnite unfreeze/Thaw event
    Dave Chinner wrote:
    > On Thu, Jun 03, 2010 at 11:30:30PM -0600, Jeffrey Merkey wrote:
    >> causes the FS Thaw stuff in fs/buffer.c to enter an infinite loop
    >> filling the /var/log/messages with junk and causing the hard drive to
    >> crank away endlessly.
    > Hmmm, looks pretty obvious what the 2.6.34 bug is:
    > while (sb->s_bdev && !thaw_bdev(sb->s_bdev, sb))
    > printk(KERN_WARNING "Emergency Thaw on %s\n",
    > bdevname(sb->s_bdev, b));
    > thaw_bdev() returns 0 on success or not frozen, and returns non-zero
    > only if the unfreeze failed. Looks like it was broken from the start
    > to me.

    thaw_bdev() used to return -EINVAL for not-frozen, but it no longer
    does. Seems commit 4504230a dropped this:

    - if (!bdev->bd_fsfreeze_count) {
    - mutex_unlock(&bdev->bd_fsfreeze_mutex);
    - return -EINVAL;
    - }

    in favor of this:

    + int error = -EINVAL;
    + if (!bdev->bd_fsfreeze_count)
    + goto out_unlock;
    return 0;

    and now we return 0 for a thaw of a non-frozen bdev ....
    this breaks the loop in the emergency thaw-er (which was
    just supposed to work its way through nested freezes,
    when I wrote it)


     \ /
      Last update: 2010-06-07 06:25    [W:0.025 / U:0.220 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site