66
67
68
69static struct afs_server *afs_alloc_server(struct afs_cell *cell,
70 const struct in_addr *addr)
71{
72 struct afs_server *server;
73
74 _enter("");
75
76 server = kzalloc(sizeof(struct afs_server), GFP_KERNEL);
77 if (server) {
78 atomic_set(&server->usage, 1);
79 server->cell = cell;
80
81 INIT_LIST_HEAD(&server->link);
82 INIT_LIST_HEAD(&server->grave);
83 init_rwsem(&server->sem);
84 spin_lock_init(&server->fs_lock);
85 server->fs_vnodes = RB_ROOT;
86 server->cb_promises = RB_ROOT;
87 spin_lock_init(&server->cb_lock);
88 init_waitqueue_head(&server->cb_break_waitq);
89 INIT_DELAYED_WORK(&server->cb_break_work,
90 afs_dispatch_give_up_callbacks);
91
92 memcpy(&server->addr, addr, sizeof(struct in_addr));
93 server->addr.s_addr = addr->s_addr;
94 }
95
96 _leave(" = %p{%d}", server, atomic_read(&server->usage));
97 return server;
98}
99
100
101
102
103struct afs_server *afs_lookup_server(struct afs_cell *cell,
104 const struct in_addr *addr)
105{
106 struct afs_server *server, *candidate;