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 |
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