aboutsummaryrefslogtreecommitdiffstats
path: root/fs/notify/inotify
diff options
context:
space:
mode:
authorEric Paris <eparis@redhat.com>2009-12-17 21:24:33 -0500
committerEric Paris <eparis@redhat.com>2010-07-28 09:58:59 -0400
commit90b1e7a57880fb66437ab7db39e1e65ca0372822 (patch)
tree61b7195c84d9dfd057ed3dcb07c5fc831db6a3a9 /fs/notify/inotify
parent33d3dfff451a2ab6fe2f6aaabed9b24e91aad109 (diff)
fsnotify: allow marks to not pin inodes in core
inotify marks must pin inodes in core. dnotify doesn't technically need to since they are closed when the directory is closed. fanotify also need to pin inodes in core as it works today. But the next step is to introduce the concept of 'ignored masks' which is actually a mask of events for an inode of no interest. I claim that these should be liberally sent to the kernel and should not pin the inode in core. If the inode is brought back in the listener will get an event it may have thought excluded, but this is not a serious situation and one any listener should deal with. This patch lays the ground work for non-pinning inode marks by using lazy inode pinning. We do not pin a mark until it has a non-zero mask entry. If a listener new sets a mask we never pin the inode. Signed-off-by: Eric Paris <eparis@redhat.com>
Diffstat (limited to 'fs/notify/inotify')
-rw-r--r--fs/notify/inotify/inotify_user.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c
index a12315a7553d..19d274057bfa 100644
--- a/fs/notify/inotify/inotify_user.c
+++ b/fs/notify/inotify/inotify_user.c
@@ -575,13 +575,11 @@ static int inotify_update_existing_watch(struct fsnotify_group *group,
575 spin_lock(&fsn_mark->lock); 575 spin_lock(&fsn_mark->lock);
576 576
577 old_mask = fsn_mark->mask; 577 old_mask = fsn_mark->mask;
578 if (add) { 578 if (add)
579 fsn_mark->mask |= mask; 579 fsnotify_set_mark_mask_locked(fsn_mark, (fsn_mark->mask | mask));
580 new_mask = fsn_mark->mask; 580 else
581 } else { 581 fsnotify_set_mark_mask_locked(fsn_mark, mask);
582 fsn_mark->mask = mask; 582 new_mask = fsn_mark->mask;
583 new_mask = fsn_mark->mask;
584 }
585 583
586 spin_unlock(&fsn_mark->lock); 584 spin_unlock(&fsn_mark->lock);
587 585