rem: if (journal != NULL && journal->CurrentThread() == find_thread(NULL)) transaction = journal->CurrentTransaction(); else
add: if (transaction == NULL) { transaction = &localTransaction;
context: bfs_remove_vnode(void *_ns, void *_node, char reenter){	FUNCTION();	if (_ns == NULL || _node == NULL)		return B_BAD_VALUE;	Volume *volume = (Volume *)_ns;	Inode *inode = (Inode *)_node;	// The "chkbfs" functionality uses this flag to prevent the space used	// up by the inode from being freed - this flag is set only in situations	// where this is a good idea... (the block bitmap will get fixed anyway	// in this case).	if (inode->Flags() & INODE_DONT_FREE_SPACE) {		delete inode;		return B_OK;	}	// If the inode isn't in use anymore, we were called before	// bfs_unlink() returns - in this case, we can just use the	// transaction which has already deleted the inode.	Transaction localTransaction, *transaction = &localTransaction;	Journal *journal = volume->GetJournal(volume->ToBlock(inode->Parent()));	if (journal != NULL && journal->CurrentThread() == find_thread(NULL))		transaction = journal->CurrentTransaction();	else		localTransaction.Start(volume, inode->BlockNumber());	status_t status = inode->Free(transaction);	if (status == B_OK) {		if (transaction == &localTransaction)			localTransaction.Done();		delete inode;	}	return status;}