• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/kernel/

Lines Matching defs:chunk

42  * One struct chunk is attached to each inode of interest.
43 * We replace struct chunk on tagging/untagging.
47 * References to struct chunk are collected at audit_inode{,_child}()
53 * tree.chunks anchors chunk.owners[].list hash_lock
55 * chunk.trees anchors tree.same_root hash_lock
56 * chunk.hash is a hash with middle bits of watch.inode as
60 * it", one for each chunk with pointer to it.
62 * chunk is refcounted by embedded fsnotify_mark + .refs (non-zero refcount
65 * node.index allows to get from node.list to containing chunk.
114 static void free_chunk(struct audit_chunk *chunk)
118 for (i = 0; i < chunk->count; i++) {
119 if (chunk->owners[i].owner)
120 put_tree(chunk->owners[i].owner);
122 kfree(chunk);
125 void audit_put_chunk(struct audit_chunk *chunk)
127 if (atomic_long_dec_and_test(&chunk->refs))
128 free_chunk(chunk);
133 struct audit_chunk *chunk = container_of(rcu, struct audit_chunk, head);
134 audit_put_chunk(chunk);
139 struct audit_chunk *chunk = container_of(entry, struct audit_chunk, mark);
140 call_rcu(&chunk->head, __put_chunk);
145 struct audit_chunk *chunk;
150 chunk = kzalloc(size, GFP_KERNEL);
151 if (!chunk)
154 INIT_LIST_HEAD(&chunk->hash);
155 INIT_LIST_HEAD(&chunk->trees);
156 chunk->count = count;
157 atomic_long_set(&chunk->refs, 1);
159 INIT_LIST_HEAD(&chunk->owners[i].list);
160 chunk->owners[i].index = i;
162 fsnotify_init_mark(&chunk->mark, audit_tree_destroy_watch);
163 return chunk;
177 static void insert_hash(struct audit_chunk *chunk)
179 struct fsnotify_mark *entry = &chunk->mark;
185 list_add_rcu(&chunk->hash, list);
204 int audit_tree_match(struct audit_chunk *chunk, struct audit_tree *tree)
207 for (n = 0; n < chunk->count; n++)
208 if (chunk->owners[n].owner == tree)
224 struct audit_chunk *chunk = find_chunk(p);
225 struct fsnotify_mark *entry = &chunk->mark;
228 int size = chunk->count - 1;
236 if (chunk->dead || !entry->i.inode) {
244 chunk->dead = 1;
246 list_del_init(&chunk->trees);
247 if (owner->root == chunk)
250 list_del_rcu(&chunk->hash);
267 chunk->dead = 1;
269 list_replace_init(&chunk->trees, &new->trees);
270 if (owner->root == chunk) {
277 if (&chunk->owners[j] == p) {
282 s = chunk->owners[j].owner;
284 new->owners[i].index = chunk->owners[j].index - j + i;
288 list_replace_init(&chunk->owners[j].list, &new->owners[i].list);
291 list_replace_rcu(&chunk->hash, &new->hash);
303 if (owner->root == chunk) {
320 struct audit_chunk *chunk = alloc_chunk(1);
321 if (!chunk)
324 entry = &chunk->mark;
326 free_chunk(chunk);
334 chunk->dead = 1;
340 chunk->owners[0].index = (1U << 31);
341 chunk->owners[0].owner = tree;
343 list_add(&chunk->owners[0].list, &tree->chunks);
345 tree->root = chunk;
346 list_add(&tree->same_root, &chunk->trees);
348 insert_hash(chunk);
359 struct audit_chunk *chunk, *old;
380 chunk = alloc_chunk(old->count + 1);
381 if (!chunk) {
386 chunk_entry = &chunk->mark;
393 free_chunk(chunk);
400 free_chunk(chunk);
412 chunk->dead = 1;
422 list_replace_init(&old->trees, &chunk->trees);
423 for (n = 0, p = chunk->owners; n < old->count; n++, p++) {
432 p->index = (chunk->count - 1) | (1U<<31);
436 list_replace_rcu(&old->hash, &chunk->hash);
437 list_for_each_entry(owner, &chunk->trees, same_root)
438 owner->root = chunk;
441 tree->root = chunk;
442 list_add(&tree->same_root, &chunk->trees);
604 struct audit_chunk *chunk = find_chunk(node);
606 struct inode *inode = chunk->mark.i.inode;
868 static void evict_chunk(struct audit_chunk *chunk)
875 if (chunk->dead)
878 chunk->dead = 1;
881 while (!list_empty(&chunk->trees)) {
882 owner = list_entry(chunk->trees.next,
897 list_del_rcu(&chunk->hash);
898 for (n = 0; n < chunk->count; n++)
899 list_del_init(&chunk->owners[n].list);
917 struct audit_chunk *chunk = container_of(entry, struct audit_chunk, mark);
919 evict_chunk(chunk);