diff options
Diffstat (limited to 'fs/notify')
| -rw-r--r-- | fs/notify/fanotify/fanotify_user.c | 8 | ||||
| -rw-r--r-- | fs/notify/fsnotify.c | 15 | 
2 files changed, 10 insertions, 13 deletions
diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index 3568c8a8b13..d4380366973 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c @@ -61,8 +61,6 @@ static struct fsnotify_event *get_one_event(struct fsnotify_group *group,  static int create_fd(struct fsnotify_group *group, struct fsnotify_event *event)  {  	int client_fd; -	struct dentry *dentry; -	struct vfsmount *mnt;  	struct file *new_file;  	pr_debug("%s: group=%p event=%p\n", __func__, group, event); @@ -81,12 +79,10 @@ static int create_fd(struct fsnotify_group *group, struct fsnotify_event *event)  	 * we need a new file handle for the userspace program so it can read even if it was  	 * originally opened O_WRONLY.  	 */ -	dentry = dget(event->path.dentry); -	mnt = mntget(event->path.mnt);  	/* it's possible this event was an overflow event.  in that case dentry and mnt  	 * are NULL;  That's fine, just don't call dentry open */ -	if (dentry && mnt) -		new_file = dentry_open(dentry, mnt, +	if (event->path.dentry && event->path.mnt) +		new_file = dentry_open(&event->path,  				       group->fanotify_data.f_flags | FMODE_NONOTIFY,  				       current_cred());  	else diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c index ccb14d3fc0d..6baadb5a843 100644 --- a/fs/notify/fsnotify.c +++ b/fs/notify/fsnotify.c @@ -52,6 +52,7 @@ void __fsnotify_vfsmount_delete(struct vfsmount *mnt)  void __fsnotify_update_child_dentry_flags(struct inode *inode)  {  	struct dentry *alias; +	struct hlist_node *p;  	int watched;  	if (!S_ISDIR(inode->i_mode)) @@ -63,7 +64,7 @@ void __fsnotify_update_child_dentry_flags(struct inode *inode)  	spin_lock(&inode->i_lock);  	/* run all of the dentries associated with this inode.  Since this is a  	 * directory, there damn well better only be one item on this list */ -	list_for_each_entry(alias, &inode->i_dentry, d_alias) { +	hlist_for_each_entry(alias, p, &inode->i_dentry, d_alias) {  		struct dentry *child;  		/* run all of the children of the original inode and fix their @@ -123,7 +124,7 @@ int __fsnotify_parent(struct path *path, struct dentry *dentry, __u32 mask)  }  EXPORT_SYMBOL_GPL(__fsnotify_parent); -static int send_to_group(struct inode *to_tell, struct vfsmount *mnt, +static int send_to_group(struct inode *to_tell,  			 struct fsnotify_mark *inode_mark,  			 struct fsnotify_mark *vfsmount_mark,  			 __u32 mask, void *data, @@ -168,10 +169,10 @@ static int send_to_group(struct inode *to_tell, struct vfsmount *mnt,  			vfsmount_test_mask &= ~inode_mark->ignored_mask;  	} -	pr_debug("%s: group=%p to_tell=%p mnt=%p mask=%x inode_mark=%p" +	pr_debug("%s: group=%p to_tell=%p mask=%x inode_mark=%p"  		 " inode_test_mask=%x vfsmount_mark=%p vfsmount_test_mask=%x"  		 " data=%p data_is=%d cookie=%d event=%p\n", -		 __func__, group, to_tell, mnt, mask, inode_mark, +		 __func__, group, to_tell, mask, inode_mark,  		 inode_test_mask, vfsmount_mark, vfsmount_test_mask, data,  		 data_is, cookie, *event); @@ -258,16 +259,16 @@ int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is,  		if (inode_group > vfsmount_group) {  			/* handle inode */ -			ret = send_to_group(to_tell, NULL, inode_mark, NULL, mask, data, +			ret = send_to_group(to_tell, inode_mark, NULL, mask, data,  					    data_is, cookie, file_name, &event);  			/* we didn't use the vfsmount_mark */  			vfsmount_group = NULL;  		} else if (vfsmount_group > inode_group) { -			ret = send_to_group(to_tell, &mnt->mnt, NULL, vfsmount_mark, mask, data, +			ret = send_to_group(to_tell, NULL, vfsmount_mark, mask, data,  					    data_is, cookie, file_name, &event);  			inode_group = NULL;  		} else { -			ret = send_to_group(to_tell, &mnt->mnt, inode_mark, vfsmount_mark, +			ret = send_to_group(to_tell, inode_mark, vfsmount_mark,  					    mask, data, data_is, cookie, file_name,  					    &event);  		}  |