diff options
| author | Eric Paris <eparis@redhat.com> | 2009-12-17 21:24:22 -0500 |
|---|---|---|
| committer | Eric Paris <eparis@redhat.com> | 2010-07-28 09:58:51 -0400 |
| commit | 220d14df0dc587c06b97762829a41157c9375b94 (patch) | |
| tree | cea58c9859b86ea112f4dfc0c6c2bbbb6504edcc /kernel | |
| parent | ffab83402f01555a5fa32efb48a4dd0ce8d12ef5 (diff) | |
Audit: only set group mask when something is being watched
Currently the audit watch group always sets a mask equal to all events it
might care about. We instead should only set the group mask if we are
actually watching inodes. This should be a perf win when audit watches are
compiled in.
Signed-off-by: Eric Paris <eparis@redhat.com>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/audit_watch.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c index 0f03a6ab96ed..87408b282118 100644 --- a/kernel/audit_watch.c +++ b/kernel/audit_watch.c | |||
| @@ -167,6 +167,8 @@ static struct audit_parent *audit_init_parent(struct nameidata *ndp) | |||
| 167 | return ERR_PTR(ret); | 167 | return ERR_PTR(ret); |
| 168 | } | 168 | } |
| 169 | 169 | ||
| 170 | fsnotify_recalc_group_mask(audit_watch_group); | ||
| 171 | |||
| 170 | return parent; | 172 | return parent; |
| 171 | } | 173 | } |
| 172 | 174 | ||
| @@ -353,6 +355,9 @@ static void audit_remove_parent_watches(struct audit_parent *parent) | |||
| 353 | mutex_unlock(&audit_filter_mutex); | 355 | mutex_unlock(&audit_filter_mutex); |
| 354 | 356 | ||
| 355 | fsnotify_destroy_mark_by_entry(&parent->mark); | 357 | fsnotify_destroy_mark_by_entry(&parent->mark); |
| 358 | |||
| 359 | fsnotify_recalc_group_mask(audit_watch_group); | ||
| 360 | |||
| 356 | } | 361 | } |
| 357 | 362 | ||
| 358 | /* Get path information necessary for adding watches. */ | 363 | /* Get path information necessary for adding watches. */ |
| @@ -503,6 +508,9 @@ void audit_remove_watch_rule(struct audit_krule *krule) | |||
| 503 | audit_put_parent(parent); | 508 | audit_put_parent(parent); |
| 504 | } | 509 | } |
| 505 | } | 510 | } |
| 511 | |||
| 512 | fsnotify_recalc_group_mask(audit_watch_group); | ||
| 513 | |||
| 506 | } | 514 | } |
| 507 | 515 | ||
| 508 | static bool audit_watch_should_send_event(struct fsnotify_group *group, struct inode *inode, | 516 | static bool audit_watch_should_send_event(struct fsnotify_group *group, struct inode *inode, |
| @@ -577,8 +585,7 @@ static const struct fsnotify_ops audit_watch_fsnotify_ops = { | |||
| 577 | 585 | ||
| 578 | static int __init audit_watch_init(void) | 586 | static int __init audit_watch_init(void) |
| 579 | { | 587 | { |
| 580 | audit_watch_group = fsnotify_alloc_group(AUDIT_FS_WATCH, | 588 | audit_watch_group = fsnotify_alloc_group(0, &audit_watch_fsnotify_ops); |
| 581 | &audit_watch_fsnotify_ops); | ||
| 582 | if (IS_ERR(audit_watch_group)) { | 589 | if (IS_ERR(audit_watch_group)) { |
| 583 | audit_watch_group = NULL; | 590 | audit_watch_group = NULL; |
| 584 | audit_panic("cannot create audit fsnotify group"); | 591 | audit_panic("cannot create audit fsnotify group"); |
