Lines Matching refs:volume
48 struct afs_volume *volume = NULL; in afs_volume_lookup() local
90 volume = vlocation->vols[params->type]; in afs_volume_lookup()
91 afs_get_volume(volume); in afs_volume_lookup()
99 volume = kzalloc(sizeof(struct afs_volume), GFP_KERNEL); in afs_volume_lookup()
100 if (!volume) in afs_volume_lookup()
103 atomic_set(&volume->usage, 1); in afs_volume_lookup()
104 volume->type = params->type; in afs_volume_lookup()
105 volume->type_force = params->force; in afs_volume_lookup()
106 volume->cell = params->cell; in afs_volume_lookup()
107 volume->vid = vlocation->vldb.vid[params->type]; in afs_volume_lookup()
109 ret = bdi_setup_and_register(&volume->bdi, "afs"); in afs_volume_lookup()
113 init_rwsem(&volume->server_sem); in afs_volume_lookup()
117 if (vlocation->vldb.srvtmask[loop] & (1 << volume->type)) { in afs_volume_lookup()
119 volume->cell, &vlocation->vldb.servers[loop]); in afs_volume_lookup()
125 volume->servers[volume->nservers] = server; in afs_volume_lookup()
126 volume->nservers++; in afs_volume_lookup()
132 volume->cache = fscache_acquire_cookie(vlocation->cache, in afs_volume_lookup()
134 volume, true); in afs_volume_lookup()
137 volume->vlocation = vlocation; in afs_volume_lookup()
139 vlocation->vols[volume->type] = volume; in afs_volume_lookup()
143 afs_voltypes[volume->type], volume->vid); in afs_volume_lookup()
146 _leave(" = %p", volume); in afs_volume_lookup()
147 return volume; in afs_volume_lookup()
158 bdi_destroy(&volume->bdi); in afs_volume_lookup()
162 for (loop = volume->nservers - 1; loop >= 0; loop--) in afs_volume_lookup()
163 afs_put_server(volume->servers[loop]); in afs_volume_lookup()
165 kfree(volume); in afs_volume_lookup()
172 void afs_put_volume(struct afs_volume *volume) in afs_put_volume() argument
177 if (!volume) in afs_put_volume()
180 _enter("%p", volume); in afs_put_volume()
182 ASSERTCMP(atomic_read(&volume->usage), >, 0); in afs_put_volume()
184 vlocation = volume->vlocation; in afs_put_volume()
190 if (likely(!atomic_dec_and_test(&volume->usage))) { in afs_put_volume()
196 vlocation->vols[volume->type] = NULL; in afs_put_volume()
202 fscache_relinquish_cookie(volume->cache, 0); in afs_put_volume()
206 for (loop = volume->nservers - 1; loop >= 0; loop--) in afs_put_volume()
207 afs_put_server(volume->servers[loop]); in afs_put_volume()
209 bdi_destroy(&volume->bdi); in afs_put_volume()
210 kfree(volume); in afs_put_volume()
221 struct afs_volume *volume = vnode->volume; in afs_volume_pick_fileserver() local
225 _enter("%s", volume->vlocation->vldb.name); in afs_volume_pick_fileserver()
234 down_read(&volume->server_sem); in afs_volume_pick_fileserver()
237 if (volume->nservers == 0) { in afs_volume_pick_fileserver()
238 ret = volume->rjservers ? -ENOMEDIUM : -ESTALE; in afs_volume_pick_fileserver()
239 up_read(&volume->server_sem); in afs_volume_pick_fileserver()
247 for (loop = 0; loop < volume->nservers; loop++) { in afs_volume_pick_fileserver()
248 server = volume->servers[loop]; in afs_volume_pick_fileserver()
257 up_read(&volume->server_sem); in afs_volume_pick_fileserver()
294 up_read(&volume->server_sem); in afs_volume_pick_fileserver()
310 struct afs_volume *volume = vnode->volume; in afs_volume_release_fileserver() local
314 volume->vlocation->vldb.name, ntohl(server->addr.s_addr), in afs_volume_release_fileserver()
328 down_write(&volume->server_sem); in afs_volume_release_fileserver()
332 for (loop = 0; loop < volume->nservers; loop++) in afs_volume_release_fileserver()
333 if (volume->servers[loop] == server) in afs_volume_release_fileserver()
340 volume->nservers--; in afs_volume_release_fileserver()
341 memmove(&volume->servers[loop], in afs_volume_release_fileserver()
342 &volume->servers[loop + 1], in afs_volume_release_fileserver()
343 sizeof(volume->servers[loop]) * in afs_volume_release_fileserver()
344 (volume->nservers - loop)); in afs_volume_release_fileserver()
345 volume->servers[volume->nservers] = NULL; in afs_volume_release_fileserver()
347 volume->rjservers++; in afs_volume_release_fileserver()
349 if (volume->nservers > 0) in afs_volume_release_fileserver()
359 up_write(&volume->server_sem); in afs_volume_release_fileserver()
396 up_write(&volume->server_sem); in afs_volume_release_fileserver()