diff options
Diffstat (limited to 'fs/afs/vlocation.c')
-rw-r--r-- | fs/afs/vlocation.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/fs/afs/vlocation.c b/fs/afs/vlocation.c index 60cb2f408c75..7d9815e9ae0f 100644 --- a/fs/afs/vlocation.c +++ b/fs/afs/vlocation.c | |||
@@ -33,6 +33,7 @@ static struct workqueue_struct *afs_vlocation_update_worker; | |||
33 | * about the volume in question | 33 | * about the volume in question |
34 | */ | 34 | */ |
35 | static int afs_vlocation_access_vl_by_name(struct afs_vlocation *vl, | 35 | static int afs_vlocation_access_vl_by_name(struct afs_vlocation *vl, |
36 | struct key *key, | ||
36 | struct afs_cache_vlocation *vldb) | 37 | struct afs_cache_vlocation *vldb) |
37 | { | 38 | { |
38 | struct afs_cell *cell = vl->cell; | 39 | struct afs_cell *cell = vl->cell; |
@@ -49,7 +50,7 @@ static int afs_vlocation_access_vl_by_name(struct afs_vlocation *vl, | |||
49 | _debug("CellServ[%hu]: %08x", cell->vl_curr_svix, addr.s_addr); | 50 | _debug("CellServ[%hu]: %08x", cell->vl_curr_svix, addr.s_addr); |
50 | 51 | ||
51 | /* attempt to access the VL server */ | 52 | /* attempt to access the VL server */ |
52 | ret = afs_vl_get_entry_by_name(&addr, vl->vldb.name, vldb, | 53 | ret = afs_vl_get_entry_by_name(&addr, key, vl->vldb.name, vldb, |
53 | &afs_sync_call); | 54 | &afs_sync_call); |
54 | switch (ret) { | 55 | switch (ret) { |
55 | case 0: | 56 | case 0: |
@@ -86,6 +87,7 @@ out: | |||
86 | * about the volume in question | 87 | * about the volume in question |
87 | */ | 88 | */ |
88 | static int afs_vlocation_access_vl_by_id(struct afs_vlocation *vl, | 89 | static int afs_vlocation_access_vl_by_id(struct afs_vlocation *vl, |
90 | struct key *key, | ||
89 | afs_volid_t volid, | 91 | afs_volid_t volid, |
90 | afs_voltype_t voltype, | 92 | afs_voltype_t voltype, |
91 | struct afs_cache_vlocation *vldb) | 93 | struct afs_cache_vlocation *vldb) |
@@ -104,7 +106,7 @@ static int afs_vlocation_access_vl_by_id(struct afs_vlocation *vl, | |||
104 | _debug("CellServ[%hu]: %08x", cell->vl_curr_svix, addr.s_addr); | 106 | _debug("CellServ[%hu]: %08x", cell->vl_curr_svix, addr.s_addr); |
105 | 107 | ||
106 | /* attempt to access the VL server */ | 108 | /* attempt to access the VL server */ |
107 | ret = afs_vl_get_entry_by_id(&addr, volid, voltype, vldb, | 109 | ret = afs_vl_get_entry_by_id(&addr, key, volid, voltype, vldb, |
108 | &afs_sync_call); | 110 | &afs_sync_call); |
109 | switch (ret) { | 111 | switch (ret) { |
110 | case 0: | 112 | case 0: |
@@ -188,6 +190,7 @@ static struct afs_vlocation *afs_vlocation_alloc(struct afs_cell *cell, | |||
188 | * update record if we found it in the cache | 190 | * update record if we found it in the cache |
189 | */ | 191 | */ |
190 | static int afs_vlocation_update_record(struct afs_vlocation *vl, | 192 | static int afs_vlocation_update_record(struct afs_vlocation *vl, |
193 | struct key *key, | ||
191 | struct afs_cache_vlocation *vldb) | 194 | struct afs_cache_vlocation *vldb) |
192 | { | 195 | { |
193 | afs_voltype_t voltype; | 196 | afs_voltype_t voltype; |
@@ -228,7 +231,7 @@ static int afs_vlocation_update_record(struct afs_vlocation *vl, | |||
228 | /* contact the server to make sure the volume is still available | 231 | /* contact the server to make sure the volume is still available |
229 | * - TODO: need to handle disconnected operation here | 232 | * - TODO: need to handle disconnected operation here |
230 | */ | 233 | */ |
231 | ret = afs_vlocation_access_vl_by_id(vl, vid, voltype, vldb); | 234 | ret = afs_vlocation_access_vl_by_id(vl, key, vid, voltype, vldb); |
232 | switch (ret) { | 235 | switch (ret) { |
233 | /* net error */ | 236 | /* net error */ |
234 | default: | 237 | default: |
@@ -287,7 +290,8 @@ static void afs_vlocation_apply_update(struct afs_vlocation *vl, | |||
287 | * fill in a volume location record, consulting the cache and the VL server | 290 | * fill in a volume location record, consulting the cache and the VL server |
288 | * both | 291 | * both |
289 | */ | 292 | */ |
290 | static int afs_vlocation_fill_in_record(struct afs_vlocation *vl) | 293 | static int afs_vlocation_fill_in_record(struct afs_vlocation *vl, |
294 | struct key *key) | ||
291 | { | 295 | { |
292 | struct afs_cache_vlocation vldb; | 296 | struct afs_cache_vlocation vldb; |
293 | int ret; | 297 | int ret; |
@@ -310,11 +314,11 @@ static int afs_vlocation_fill_in_record(struct afs_vlocation *vl) | |||
310 | /* try to update a known volume in the cell VL databases by | 314 | /* try to update a known volume in the cell VL databases by |
311 | * ID as the name may have changed */ | 315 | * ID as the name may have changed */ |
312 | _debug("found in cache"); | 316 | _debug("found in cache"); |
313 | ret = afs_vlocation_update_record(vl, &vldb); | 317 | ret = afs_vlocation_update_record(vl, key, &vldb); |
314 | } else { | 318 | } else { |
315 | /* try to look up an unknown volume in the cell VL databases by | 319 | /* try to look up an unknown volume in the cell VL databases by |
316 | * name */ | 320 | * name */ |
317 | ret = afs_vlocation_access_vl_by_name(vl, &vldb); | 321 | ret = afs_vlocation_access_vl_by_name(vl, key, &vldb); |
318 | if (ret < 0) { | 322 | if (ret < 0) { |
319 | printk("kAFS: failed to locate '%s' in cell '%s'\n", | 323 | printk("kAFS: failed to locate '%s' in cell '%s'\n", |
320 | vl->vldb.name, vl->cell->name); | 324 | vl->vldb.name, vl->cell->name); |
@@ -366,14 +370,16 @@ void afs_vlocation_queue_for_updates(struct afs_vlocation *vl) | |||
366 | * - insert/update in the local cache if did get a VL response | 370 | * - insert/update in the local cache if did get a VL response |
367 | */ | 371 | */ |
368 | struct afs_vlocation *afs_vlocation_lookup(struct afs_cell *cell, | 372 | struct afs_vlocation *afs_vlocation_lookup(struct afs_cell *cell, |
373 | struct key *key, | ||
369 | const char *name, | 374 | const char *name, |
370 | size_t namesz) | 375 | size_t namesz) |
371 | { | 376 | { |
372 | struct afs_vlocation *vl; | 377 | struct afs_vlocation *vl; |
373 | int ret; | 378 | int ret; |
374 | 379 | ||
375 | _enter("{%s},%*.*s,%zu", | 380 | _enter("{%s},{%x},%*.*s,%zu", |
376 | cell->name, (int) namesz, (int) namesz, name, namesz); | 381 | cell->name, key_serial(key), |
382 | (int) namesz, (int) namesz, name, namesz); | ||
377 | 383 | ||
378 | if (namesz > sizeof(vl->vldb.name)) { | 384 | if (namesz > sizeof(vl->vldb.name)) { |
379 | _leave(" = -ENAMETOOLONG"); | 385 | _leave(" = -ENAMETOOLONG"); |
@@ -405,7 +411,7 @@ struct afs_vlocation *afs_vlocation_lookup(struct afs_cell *cell, | |||
405 | up_write(&cell->vl_sem); | 411 | up_write(&cell->vl_sem); |
406 | 412 | ||
407 | fill_in_record: | 413 | fill_in_record: |
408 | ret = afs_vlocation_fill_in_record(vl); | 414 | ret = afs_vlocation_fill_in_record(vl, key); |
409 | if (ret < 0) | 415 | if (ret < 0) |
410 | goto error_abandon; | 416 | goto error_abandon; |
411 | vl->state = AFS_VL_VALID; | 417 | vl->state = AFS_VL_VALID; |
@@ -656,7 +662,7 @@ static void afs_vlocation_updater(struct work_struct *work) | |||
656 | vl->upd_rej_cnt = 0; | 662 | vl->upd_rej_cnt = 0; |
657 | vl->upd_busy_cnt = 0; | 663 | vl->upd_busy_cnt = 0; |
658 | 664 | ||
659 | ret = afs_vlocation_update_record(vl, &vldb); | 665 | ret = afs_vlocation_update_record(vl, NULL, &vldb); |
660 | switch (ret) { | 666 | switch (ret) { |
661 | case 0: | 667 | case 0: |
662 | afs_vlocation_apply_update(vl, &vldb); | 668 | afs_vlocation_apply_update(vl, &vldb); |