ret = find_inode ((const char __user*)path, &nd); 
ret = find_inode((const char __user*) path, &nd); 
asmlinkage long sys_inotify_add_watch(int fd, const char *path, u32 mask){	struct inotify_watch *watch, *old;	struct inode *inode;	struct inotify_device *dev;	struct nameidata nd;	struct file *filp;	int ret;	filp = fget(fd);	if (!filp)		return -EBADF;	dev = filp->private_data;	ret = find_inode ((const char __user*)path, &nd);	if (ret)		goto fput_and_out;	/* Held in place by reference in nd */	inode = nd.dentry->d_inode;	down(&inode->inotify_sem);	down(&dev->sem);	/* don't let user-space set invalid bits: we don't want flags set */	mask &= IN_ALL_EVENTS;	if (!mask) {		ret = -EINVAL;		goto out;	}	/*	 * Handle the case of re-adding a watch on an (inode,dev) pair that we	 * are already watching.  We just update the mask and return its wd.	 */	old = inode_find_dev(inode, dev);	if (unlikely(old)) {		old->mask = mask;		ret = old->wd;		goto out;	}	watch = create_watch(dev, mask, inode);	if (unlikely(IS_ERR(watch))) {		ret = PTR_ERR(watch);		goto out;	}	/* Add the watch to the device's and the inode's list */	list_add(&watch->d_list, &dev->watches);	list_add(&watch->i_list, &inode->inotify_watches);	ret = watch->wd;out:	path_release (&nd);	up(&dev->sem);	up(&inode->inotify_sem);fput_and_out:	fput(filp);	return ret;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/9a556e89081b0c1c2f83cee915363b15a68a6f2d/inotify.c/clean/fs/inotify.c