Lines Matching refs:chunk
109 static void free_chunk(struct audit_chunk *chunk) in free_chunk() argument
113 for (i = 0; i < chunk->count; i++) { in free_chunk()
114 if (chunk->owners[i].owner) in free_chunk()
115 put_tree(chunk->owners[i].owner); in free_chunk()
117 kfree(chunk); in free_chunk()
120 void audit_put_chunk(struct audit_chunk *chunk) in audit_put_chunk() argument
122 if (atomic_long_dec_and_test(&chunk->refs)) in audit_put_chunk()
123 free_chunk(chunk); in audit_put_chunk()
128 struct audit_chunk *chunk = container_of(rcu, struct audit_chunk, head); in __put_chunk() local
129 audit_put_chunk(chunk); in __put_chunk()
134 struct audit_chunk *chunk = container_of(entry, struct audit_chunk, mark); in audit_tree_destroy_watch() local
135 call_rcu(&chunk->head, __put_chunk); in audit_tree_destroy_watch()
140 struct audit_chunk *chunk; in alloc_chunk() local
145 chunk = kzalloc(size, GFP_KERNEL); in alloc_chunk()
146 if (!chunk) in alloc_chunk()
149 INIT_LIST_HEAD(&chunk->hash); in alloc_chunk()
150 INIT_LIST_HEAD(&chunk->trees); in alloc_chunk()
151 chunk->count = count; in alloc_chunk()
152 atomic_long_set(&chunk->refs, 1); in alloc_chunk()
154 INIT_LIST_HEAD(&chunk->owners[i].list); in alloc_chunk()
155 chunk->owners[i].index = i; in alloc_chunk()
157 fsnotify_init_mark(&chunk->mark, audit_tree_destroy_watch); in alloc_chunk()
158 chunk->mark.mask = FS_IN_IGNORED; in alloc_chunk()
159 return chunk; in alloc_chunk()
173 static void insert_hash(struct audit_chunk *chunk) in insert_hash() argument
175 struct fsnotify_mark *entry = &chunk->mark; in insert_hash()
181 list_add_rcu(&chunk->hash, list); in insert_hash()
200 int audit_tree_match(struct audit_chunk *chunk, struct audit_tree *tree) in audit_tree_match() argument
203 for (n = 0; n < chunk->count; n++) in audit_tree_match()
204 if (chunk->owners[n].owner == tree) in audit_tree_match()
220 struct audit_chunk *chunk = find_chunk(p); in untag_chunk() local
221 struct fsnotify_mark *entry = &chunk->mark; in untag_chunk()
224 int size = chunk->count - 1; in untag_chunk()
235 if (chunk->dead || !entry->inode) { in untag_chunk()
245 chunk->dead = 1; in untag_chunk()
247 list_del_init(&chunk->trees); in untag_chunk()
248 if (owner->root == chunk) in untag_chunk()
251 list_del_rcu(&chunk->hash); in untag_chunk()
267 chunk->dead = 1; in untag_chunk()
269 list_replace_init(&chunk->trees, &new->trees); in untag_chunk()
270 if (owner->root == chunk) { in untag_chunk()
277 if (&chunk->owners[j] == p) { in untag_chunk()
282 s = chunk->owners[j].owner; in untag_chunk()
284 new->owners[i].index = chunk->owners[j].index - j + i; in untag_chunk()
288 list_replace_init(&chunk->owners[j].list, &new->owners[i].list); in untag_chunk()
291 list_replace_rcu(&chunk->hash, &new->hash); in untag_chunk()
303 if (owner->root == chunk) { in untag_chunk()
320 struct audit_chunk *chunk = alloc_chunk(1); in create_chunk() local
321 if (!chunk) in create_chunk()
324 entry = &chunk->mark; in create_chunk()
334 chunk->dead = 1; in create_chunk()
340 chunk->owners[0].index = (1U << 31); in create_chunk()
341 chunk->owners[0].owner = tree; in create_chunk()
343 list_add(&chunk->owners[0].list, &tree->chunks); in create_chunk()
345 tree->root = chunk; in create_chunk()
346 list_add(&tree->same_root, &chunk->trees); in create_chunk()
348 insert_hash(chunk); in create_chunk()
360 struct audit_chunk *chunk, *old; in tag_chunk() local
381 chunk = alloc_chunk(old->count + 1); in tag_chunk()
382 if (!chunk) { in tag_chunk()
387 chunk_entry = &chunk->mark; in tag_chunk()
394 free_chunk(chunk); in tag_chunk()
413 chunk->dead = 1; in tag_chunk()
423 list_replace_init(&old->trees, &chunk->trees); in tag_chunk()
424 for (n = 0, p = chunk->owners; n < old->count; n++, p++) { in tag_chunk()
433 p->index = (chunk->count - 1) | (1U<<31); in tag_chunk()
437 list_replace_rcu(&old->hash, &chunk->hash); in tag_chunk()
438 list_for_each_entry(owner, &chunk->trees, same_root) in tag_chunk()
439 owner->root = chunk; in tag_chunk()
442 tree->root = chunk; in tag_chunk()
443 list_add(&tree->same_root, &chunk->trees); in tag_chunk()
613 struct audit_chunk *chunk = find_chunk(node); in audit_trim_trees() local
615 struct inode *inode = chunk->mark.inode; in audit_trim_trees()
909 static void evict_chunk(struct audit_chunk *chunk) in evict_chunk() argument
916 if (chunk->dead) in evict_chunk()
919 chunk->dead = 1; in evict_chunk()
922 while (!list_empty(&chunk->trees)) { in evict_chunk()
923 owner = list_entry(chunk->trees.next, in evict_chunk()
938 list_del_rcu(&chunk->hash); in evict_chunk()
939 for (n = 0; n < chunk->count; n++) in evict_chunk()
940 list_del_init(&chunk->owners[n].list); in evict_chunk()
959 struct audit_chunk *chunk = container_of(entry, struct audit_chunk, mark); in audit_tree_freeing_mark() local
961 evict_chunk(chunk); in audit_tree_freeing_mark()