• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/fs/afs/

Lines Matching defs:volume

1 /* AFS volume management
24 * lookup a volume by name
26 * "%[cell:]volume[.]" R/W volume
27 * "#[cell:]volume[.]" R/O or R/W volume (rwparent=0),
28 * or R/W (rwparent=1) volume
29 * "%[cell:]volume.readonly" R/O volume
30 * "#[cell:]volume.readonly" R/O volume
31 * "%[cell:]volume.backup" Backup volume
32 * "#[cell:]volume.backup" Backup volume
40 * - Rule 2: If parent volume is R/O, then mount R/O volume by preference, R/W
42 * - Rule 3: If parent volume is R/W, then only mount R/W volume unless
48 struct afs_volume *volume = NULL;
56 /* lookup the volume location record */
87 /* is the volume already active? */
90 volume = vlocation->vols[params->type];
91 afs_get_volume(volume);
95 /* create a new volume record */
96 _debug("creating new volume record");
99 volume = kzalloc(sizeof(struct afs_volume), GFP_KERNEL);
100 if (!volume)
103 atomic_set(&volume->usage, 1);
104 volume->type = params->type;
105 volume->type_force = params->force;
106 volume->cell = params->cell;
107 volume->vid = vlocation->vldb.vid[params->type];
109 init_rwsem(&volume->server_sem);
113 if (vlocation->vldb.srvtmask[loop] & (1 << volume->type)) {
115 volume->cell, &vlocation->vldb.servers[loop]);
121 volume->servers[volume->nservers] = server;
122 volume->nservers++;
126 /* attach the cache and volume location */
130 volume,
131 &volume->cache);
135 volume->vlocation = vlocation;
137 vlocation->vols[volume->type] = volume;
140 _debug("kAFS selected %s volume %08x",
141 afs_voltypes[volume->type], volume->vid);
144 _leave(" = %p", volume);
145 return volume;
158 for (loop = volume->nservers - 1; loop >= 0; loop--)
159 afs_put_server(volume->servers[loop]);
161 kfree(volume);
166 * destroy a volume record
168 void afs_put_volume(struct afs_volume *volume)
173 if (!volume)
176 _enter("%p", volume);
178 ASSERTCMP(atomic_read(&volume->usage), >, 0);
180 vlocation = volume->vlocation;
186 if (likely(!atomic_dec_and_test(&volume->usage))) {
192 vlocation->vols[volume->type] = NULL;
196 /* finish cleaning up the volume */
198 cachefs_relinquish_cookie(volume->cache, 0);
202 for (loop = volume->nservers - 1; loop >= 0; loop--)
203 afs_put_server(volume->servers[loop]);
205 kfree(volume);
211 * pick a server to use to try accessing this volume
216 struct afs_volume *volume = vnode->volume;
220 _enter("%s", volume->vlocation->vldb.name);
229 down_read(&volume->server_sem);
232 if (volume->nservers == 0) {
233 ret = volume->rjservers ? -ENOMEDIUM : -ESTALE;
234 up_read(&volume->server_sem);
242 for (loop = 0; loop < volume->nservers; loop++) {
243 server = volume->servers[loop];
252 up_read(&volume->server_sem);
289 up_read(&volume->server_sem);
297 * - records result of using a particular server to access a volume
305 struct afs_volume *volume = vnode->volume;
309 volume->vlocation->vldb.name, ntohl(server->addr.s_addr),
320 /* the fileserver denied all knowledge of the volume */
323 down_write(&volume->server_sem);
327 for (loop = 0; loop < volume->nservers; loop++)
328 if (volume->servers[loop] == server)
335 volume->nservers--;
336 memmove(&volume->servers[loop],
337 &volume->servers[loop + 1],
338 sizeof(volume->servers[loop]) *
339 (volume->nservers - loop));
340 volume->servers[volume->nservers] = NULL;
342 volume->rjservers++;
344 if (volume->nservers > 0)
349 * volume
350 * - TODO: try asking the fileservers for volume information
351 * - TODO: contact the VL server again to see if the volume is
354 up_write(&volume->server_sem);
391 up_write(&volume->server_sem);