refrigerator(PF_FREEZE); 
refrigerator(); 
int jfs_lazycommit(void *arg){	int WorkDone;	struct tblock *tblk;	unsigned long flags;	struct jfs_sb_info *sbi;	daemonize("jfsCommit");	complete(&jfsIOwait);	do {		LAZY_LOCK(flags);		jfs_commit_thread_waking = 0;	/* OK to wake another thread */		while (!list_empty(&TxAnchor.unlock_queue)) {			WorkDone = 0;			list_for_each_entry(tblk, &TxAnchor.unlock_queue,					    cqueue) {				sbi = JFS_SBI(tblk->sb);				/*				 * For each volume, the transactions must be				 * handled in order.  If another commit thread				 * is handling a tblk for this superblock,				 * skip it				 */				if (sbi->commit_state & IN_LAZYCOMMIT)					continue;				sbi->commit_state |= IN_LAZYCOMMIT;				WorkDone = 1;				/*				 * Remove transaction from queue				 */				list_del(&tblk->cqueue);				LAZY_UNLOCK(flags);				txLazyCommit(tblk);				LAZY_LOCK(flags);				sbi->commit_state &= ~IN_LAZYCOMMIT;				/*				 * Don't continue in the for loop.  (We can't				 * anyway, it's unsafe!)  We want to go back to				 * the beginning of the list.				 */				break;			}			/* If there was nothing to do, don't continue */			if (!WorkDone)				break;		}		/* In case a wakeup came while all threads were active */		jfs_commit_thread_waking = 0;		if (current->flags & PF_FREEZE) {			LAZY_UNLOCK(flags);			refrigerator(PF_FREEZE);		} else {			DECLARE_WAITQUEUE(wq, current);			add_wait_queue(&jfs_commit_thread_wait, &wq);			set_current_state(TASK_INTERRUPTIBLE);			LAZY_UNLOCK(flags);			schedule();			current->state = TASK_RUNNING;			remove_wait_queue(&jfs_commit_thread_wait, &wq);		}	} while (!jfs_stop_threads);	if (!list_empty(&TxAnchor.unlock_queue))		jfs_err("jfs_lazycommit being killed w/pending transactions!");	else		jfs_info("jfs_lazycommit being killed\n");	complete_and_exit(&jfsIOwait, 0);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/3e1d1d28d99dabe63c64f7f40f1ca1d646de1f73/jfs_txnmgr.c/buggy/fs/jfs/jfs_txnmgr.c