Showing error 581

User: Jiri Slaby
Error type: Double Lock
Error type description: Some lock is locked twice unintentionally in a sequence
File location: fs/xfs/xfs_log.c
Line in file: 3628
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2011-11-07 22:19:59 UTC


Source:

3598        /*
3599         * We don't want anybody waiting for log reservations
3600         * after this. That means we have to wake up everybody
3601         * queued up on reserve_headq as well as write_headq.
3602         * In addition, we make sure in xlog_{re}grant_log_space
3603         * that we don't enqueue anything once the SHUTDOWN flag
3604         * is set, and this action is protected by the GRANTLOCK.
3605         */
3606        if ((tic = log->l_reserve_headq)) {
3607                do {
3608                        sv_signal(&tic->t_wait);
3609                        tic = tic->t_next;
3610                } while (tic != log->l_reserve_headq);
3611        }
3612
3613        if ((tic = log->l_write_headq)) {
3614                do {
3615                        sv_signal(&tic->t_wait);
3616                        tic = tic->t_next;
3617                } while (tic != log->l_write_headq);
3618        }
3619        spin_unlock(&log->l_grant_lock);
3620
3621        if (! (log->l_iclog->ic_state & XLOG_STATE_IOERROR)) {
3622                ASSERT(!logerror);
3623                /*
3624                 * Force the incore logs to disk before shutting the
3625                 * log down completely.
3626                 */
3627                xlog_state_sync_all(log, XFS_LOG_FORCE|XFS_LOG_SYNC, &dummy);
3628                spin_lock(&log->l_icloglock);
3629                retval = xlog_state_ioerror(log);
3630                spin_unlock(&log->l_icloglock);
3631        }
3632        /*
3633         * Wake up everybody waiting on xfs_log_force.
3634         * Callback all log item committed functions as if the
3635         * log writes were completed.
3636         */
3637        xlog_state_do_callback(log, XFS_LI_ABORTED, NULL);
3638
Show full sources