Lines Matching refs:cell

37 	struct afs_cell *cell;  in afs_cell_alloc()  local
54 cell = kzalloc(sizeof(struct afs_cell) + namelen + 1, GFP_KERNEL); in afs_cell_alloc()
55 if (!cell) { in afs_cell_alloc()
60 memcpy(cell->name, name, namelen); in afs_cell_alloc()
61 cell->name[namelen] = 0; in afs_cell_alloc()
63 atomic_set(&cell->usage, 1); in afs_cell_alloc()
64 INIT_LIST_HEAD(&cell->link); in afs_cell_alloc()
65 rwlock_init(&cell->servers_lock); in afs_cell_alloc()
66 INIT_LIST_HEAD(&cell->servers); in afs_cell_alloc()
67 init_rwsem(&cell->vl_sem); in afs_cell_alloc()
68 INIT_LIST_HEAD(&cell->vl_list); in afs_cell_alloc()
69 spin_lock_init(&cell->vl_lock); in afs_cell_alloc()
105 cell->vl_addrs[cell->vl_naddrs++].s_addr = in afs_cell_alloc()
108 } while (cell->vl_naddrs < AFS_CELL_MAX_ADDRS && (_vllist = next)); in afs_cell_alloc()
113 cp = cell->name; in afs_cell_alloc()
124 cell->anonymous_key = key; in afs_cell_alloc()
127 cell->anonymous_key, key_serial(cell->anonymous_key)); in afs_cell_alloc()
129 _leave(" = %p", cell); in afs_cell_alloc()
130 return cell; in afs_cell_alloc()
136 key_put(cell->anonymous_key); in afs_cell_alloc()
138 kfree(cell); in afs_cell_alloc()
153 struct afs_cell *cell; in afs_cell_create() local
160 list_for_each_entry(cell, &afs_cells, link) { in afs_cell_create()
161 if (strncasecmp(cell->name, name, namesz) == 0) in afs_cell_create()
166 cell = afs_cell_alloc(name, namesz, vllist); in afs_cell_create()
167 if (IS_ERR(cell)) { in afs_cell_create()
168 _leave(" = %ld", PTR_ERR(cell)); in afs_cell_create()
170 return cell; in afs_cell_create()
174 ret = afs_proc_cell_setup(cell); in afs_cell_create()
180 cell->cache = fscache_acquire_cookie(afs_cache_netfs.primary_index, in afs_cell_create()
182 cell, true); in afs_cell_create()
187 list_add_tail(&cell->link, &afs_cells); in afs_cell_create()
191 list_add_tail(&cell->proc_link, &afs_proc_cells); in afs_cell_create()
195 _leave(" = %p", cell); in afs_cell_create()
196 return cell; in afs_cell_create()
200 key_put(cell->anonymous_key); in afs_cell_create()
201 kfree(cell); in afs_cell_create()
206 if (retref && !IS_ERR(cell)) in afs_cell_create()
207 afs_get_cell(cell); in afs_cell_create()
213 _leave(" = %p", cell); in afs_cell_create()
214 return cell; in afs_cell_create()
271 struct afs_cell *cell; in afs_cell_lookup() local
280 list_for_each_entry(cell, &afs_cells, link) { in afs_cell_lookup()
281 if (strncmp(cell->name, name, namesz) == 0) { in afs_cell_lookup()
282 afs_get_cell(cell); in afs_cell_lookup()
286 cell = ERR_PTR(-ENOENT); in afs_cell_lookup()
292 cell = afs_cell_root; in afs_cell_lookup()
293 if (!cell) { in afs_cell_lookup()
300 cell = ERR_PTR(-EDESTADDRREQ); in afs_cell_lookup()
302 afs_get_cell(cell); in afs_cell_lookup()
309 _leave(" = %p", cell); in afs_cell_lookup()
310 return cell; in afs_cell_lookup()
316 cell = afs_cell_create(name, namesz, NULL, true); in afs_cell_lookup()
318 _leave(" = %p", cell); in afs_cell_lookup()
319 return cell; in afs_cell_lookup()
326 struct afs_cell *afs_get_cell_maybe(struct afs_cell *cell)
330 if (cell && !list_empty(&cell->link))
331 afs_get_cell(cell);
333 cell = NULL;
336 return cell;
343 void afs_put_cell(struct afs_cell *cell) in afs_put_cell() argument
345 if (!cell) in afs_put_cell()
348 _enter("%p{%d,%s}", cell, atomic_read(&cell->usage), cell->name); in afs_put_cell()
350 ASSERTCMP(atomic_read(&cell->usage), >, 0); in afs_put_cell()
356 if (likely(!atomic_dec_and_test(&cell->usage))) { in afs_put_cell()
362 ASSERT(list_empty(&cell->servers)); in afs_put_cell()
363 ASSERT(list_empty(&cell->vl_list)); in afs_put_cell()
377 static void afs_cell_destroy(struct afs_cell *cell) in afs_cell_destroy() argument
379 _enter("%p{%d,%s}", cell, atomic_read(&cell->usage), cell->name); in afs_cell_destroy()
381 ASSERTCMP(atomic_read(&cell->usage), >=, 0); in afs_cell_destroy()
382 ASSERT(list_empty(&cell->link)); in afs_cell_destroy()
385 if (atomic_read(&cell->usage) > 0) { in afs_cell_destroy()
388 _debug("wait for cell %s", cell->name); in afs_cell_destroy()
392 while (atomic_read(&cell->usage) > 0) { in afs_cell_destroy()
402 ASSERTCMP(atomic_read(&cell->usage), ==, 0); in afs_cell_destroy()
403 ASSERT(list_empty(&cell->servers)); in afs_cell_destroy()
404 ASSERT(list_empty(&cell->vl_list)); in afs_cell_destroy()
406 afs_proc_cell_remove(cell); in afs_cell_destroy()
409 list_del_init(&cell->proc_link); in afs_cell_destroy()
413 fscache_relinquish_cookie(cell->cache, 0); in afs_cell_destroy()
415 key_put(cell->anonymous_key); in afs_cell_destroy()
416 kfree(cell); in afs_cell_destroy()
427 struct afs_cell *cell; in afs_cell_purge() local
436 cell = NULL; in afs_cell_purge()
442 cell = list_entry(afs_cells.next, in afs_cell_purge()
444 list_del_init(&cell->link); in afs_cell_purge()
449 if (cell) { in afs_cell_purge()
451 cell->name, atomic_read(&cell->usage)); in afs_cell_purge()
454 afs_cell_destroy(cell); in afs_cell_purge()