if (EP_IS_LINKED(&epi->fllink)) EP_LIST_DEL(&epi->fllink); 
if (ep_is_linked(&epi->fllink)) ep_list_del(&epi->fllink); 
static int ep_remove(struct eventpoll *ep, struct epitem *epi){	int error;	unsigned long flags;	struct file *file = epi->ffd.file;	/*	 * Removes poll wait queue hooks. We _have_ to do this without holding	 * the "ep->lock" otherwise a deadlock might occur. This because of the	 * sequence of the lock acquisition. Here we do "ep->lock" then the wait	 * queue head lock when unregistering the wait queue. The wakeup callback	 * will run by holding the wait queue head lock and will call our callback	 * that will try to get "ep->lock".	 */	ep_unregister_pollwait(ep, epi);	/* Remove the current item from the list of epoll hooks */	spin_lock(&file->f_ep_lock);	if (EP_IS_LINKED(&epi->fllink))		EP_LIST_DEL(&epi->fllink);	spin_unlock(&file->f_ep_lock);	/* We need to acquire the write IRQ lock before calling ep_unlink() */	write_lock_irqsave(&ep->lock, flags);	/* Really unlink the item from the hash */	error = ep_unlink(ep, epi);	write_unlock_irqrestore(&ep->lock, flags);	if (error)		goto eexit_1;	/* At this point it is safe to free the eventpoll item */	ep_release_epitem(epi);	error = 0;eexit_1:	DNPRINTK(3, (KERN_INFO "[%p] eventpoll: ep_remove(%p, %p) = %d\n",		     current, ep, file, error));	return error;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/b030a4dd609e167da7f73c2d1fa5af864a0aea17/eventpoll.c/clean/fs/eventpoll.c