• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/fs/afs/

Lines Matching defs:vnode

1 /* AFS vnode management
22 * insert a vnode into the backing server's vnode tree
24 static void afs_install_vnode(struct afs_vnode *vnode,
27 struct afs_server *old_server = vnode->server;
31 _enter("%p,%p", vnode, server);
35 rb_erase(&vnode->server_rb, &old_server->fs_vnodes);
40 vnode->server = server;
43 /* insert into the server's vnode tree in FID order */
51 if (vnode->fid.vid < xvnode->fid.vid)
53 else if (vnode->fid.vid > xvnode->fid.vid)
55 else if (vnode->fid.vnode < xvnode->fid.vnode)
57 else if (vnode->fid.vnode > xvnode->fid.vnode)
59 else if (vnode->fid.unique < xvnode->fid.unique)
61 else if (vnode->fid.unique > xvnode->fid.unique)
67 rb_link_node(&vnode->server_rb, parent, p);
68 rb_insert_color(&vnode->server_rb, &server->fs_vnodes);
75 * insert a vnode into the promising server's update/expiration tree
76 * - caller must hold vnode->lock
78 static void afs_vnode_note_promise(struct afs_vnode *vnode,
85 _enter("%p,%p", vnode, server);
89 old_server = vnode->server;
90 if (vnode->cb_promised) {
92 vnode->cb_expires == vnode->cb_expires_at) {
98 if (vnode->cb_promised) {
100 rb_erase(&vnode->cb_promise, &old_server->cb_promises);
101 vnode->cb_promised = false;
106 if (vnode->server != server)
107 afs_install_vnode(vnode, server);
109 vnode->cb_expires_at = vnode->cb_expires;
111 vnode, (unsigned long) vnode->cb_expires_at);
122 if (vnode->cb_expires_at < xvnode->cb_expires_at)
128 rb_link_node(&vnode->cb_promise, parent, p);
129 rb_insert_color(&vnode->cb_promise, &server->cb_promises);
130 vnode->cb_promised = true;
139 static void afs_vnode_deleted_remotely(struct afs_vnode *vnode)
143 _enter("{%p}", vnode->server);
145 set_bit(AFS_VNODE_DELETED, &vnode->flags);
147 server = vnode->server;
149 if (vnode->cb_promised) {
151 if (vnode->cb_promised) {
152 rb_erase(&vnode->cb_promise,
154 vnode->cb_promised = false;
160 rb_erase(&vnode->server_rb, &server->fs_vnodes);
163 vnode->server = NULL;
166 ASSERT(!vnode->cb_promised);
178 void afs_vnode_finalise_status_update(struct afs_vnode *vnode,
183 _enter("%p,%p", vnode, server);
185 spin_lock(&vnode->lock);
186 clear_bit(AFS_VNODE_CB_BROKEN, &vnode->flags);
187 afs_vnode_note_promise(vnode, server);
188 vnode->update_cnt--;
189 ASSERTCMP(vnode->update_cnt, >=, 0);
190 spin_unlock(&vnode->lock);
192 wake_up_all(&vnode->update_waitq);
200 static void afs_vnode_status_update_failed(struct afs_vnode *vnode, int ret)
202 _enter("{%x:%u},%d", vnode->fid.vid, vnode->fid.vnode, ret);
204 spin_lock(&vnode->lock);
206 clear_bit(AFS_VNODE_CB_BROKEN, &vnode->flags);
211 afs_vnode_deleted_remotely(vnode);
214 vnode->update_cnt--;
215 ASSERTCMP(vnode->update_cnt, >=, 0);
216 spin_unlock(&vnode->lock);
218 wake_up_all(&vnode->update_waitq);
229 int afs_vnode_fetch_status(struct afs_vnode *vnode,
239 vnode->volume->vlocation->vldb.name,
240 vnode->fid.vid, vnode->fid.vnode, vnode->fid.unique);
242 if (!test_bit(AFS_VNODE_CB_BROKEN, &vnode->flags) &&
243 vnode->cb_promised) {
248 if (test_bit(AFS_VNODE_DELETED, &vnode->flags)) {
257 spin_lock(&vnode->lock);
259 if (!test_bit(AFS_VNODE_CB_BROKEN, &vnode->flags) &&
260 vnode->cb_promised) {
261 spin_unlock(&vnode->lock);
266 ASSERTCMP(vnode->update_cnt, >=, 0);
268 if (vnode->update_cnt > 0) {
270 _debug("wait on fetch %d", vnode->update_cnt);
274 add_wait_queue(&vnode->update_waitq, &myself);
278 if (!test_bit(AFS_VNODE_CB_BROKEN, &vnode->flags))
280 if (test_bit(AFS_VNODE_DELETED, &vnode->flags))
285 if (vnode->update_cnt == 0) {
286 remove_wait_queue(&vnode->update_waitq,
292 spin_unlock(&vnode->lock);
297 spin_lock(&vnode->lock);
300 remove_wait_queue(&vnode->update_waitq, &myself);
301 spin_unlock(&vnode->lock);
304 return test_bit(AFS_VNODE_DELETED, &vnode->flags) ?
310 vnode->update_cnt++;
312 spin_unlock(&vnode->lock);
315 * vnode */
318 server = afs_volume_pick_fileserver(vnode);
325 ret = afs_fs_fetch_file_status(server, key, vnode, NULL,
328 } while (!afs_volume_release_fileserver(vnode, server, ret));
334 afs_cache_permit(vnode, key, acl_order);
335 afs_vnode_finalise_status_update(vnode, server);
339 afs_vnode_status_update_failed(vnode, ret);
342 ASSERTCMP(vnode->update_cnt, >=, 0);
344 _leave(" = %d [cnt %d]", ret, vnode->update_cnt);
348 spin_lock(&vnode->lock);
349 vnode->update_cnt--;
350 ASSERTCMP(vnode->update_cnt, >=, 0);
351 spin_unlock(&vnode->lock);
352 _leave(" = %ld [cnt %d]", PTR_ERR(server), vnode->update_cnt);
360 int afs_vnode_fetch_data(struct afs_vnode *vnode, struct key *key,
367 vnode->volume->vlocation->vldb.name,
368 vnode->fid.vid,
369 vnode->fid.vnode,
370 vnode->fid.unique,
374 spin_lock(&vnode->lock);
375 vnode->update_cnt++;
376 spin_unlock(&vnode->lock);
379 * vnode */
382 server = afs_volume_pick_fileserver(vnode);
388 ret = afs_fs_fetch_data(server, key, vnode, offset, length,
391 } while (!afs_volume_release_fileserver(vnode, server, ret));
395 afs_vnode_finalise_status_update(vnode, server);
398 afs_vnode_status_update_failed(vnode, ret);
405 spin_lock(&vnode->lock);
406 vnode->update_cnt--;
407 ASSERTCMP(vnode->update_cnt, >=, 0);
408 spin_unlock(&vnode->lock);
415 int afs_vnode_create(struct afs_vnode *vnode, struct key *key,
424 vnode->volume->vlocation->vldb.name,
425 vnode->fid.vid,
426 vnode->fid.vnode,
427 vnode->fid.unique,
432 spin_lock(&vnode->lock);
433 vnode->update_cnt++;
434 spin_unlock(&vnode->lock);
438 server = afs_volume_pick_fileserver(vnode);
444 ret = afs_fs_create(server, key, vnode, name, mode, newfid,
447 } while (!afs_volume_release_fileserver(vnode, server, ret));
451 afs_vnode_finalise_status_update(vnode, server);
454 afs_vnode_status_update_failed(vnode, ret);
458 _leave(" = %d [cnt %d]", ret, vnode->update_cnt);
462 spin_lock(&vnode->lock);
463 vnode->update_cnt--;
464 ASSERTCMP(vnode->update_cnt, >=, 0);
465 spin_unlock(&vnode->lock);
466 _leave(" = %ld [cnt %d]", PTR_ERR(server), vnode->update_cnt);
473 int afs_vnode_remove(struct afs_vnode *vnode, struct key *key, const char *name,
480 vnode->volume->vlocation->vldb.name,
481 vnode->fid.vid,
482 vnode->fid.vnode,
483 vnode->fid.unique,
488 spin_lock(&vnode->lock);
489 vnode->update_cnt++;
490 spin_unlock(&vnode->lock);
494 server = afs_volume_pick_fileserver(vnode);
500 ret = afs_fs_remove(server, key, vnode, name, isdir,
503 } while (!afs_volume_release_fileserver(vnode, server, ret));
507 afs_vnode_finalise_status_update(vnode, server);
510 afs_vnode_status_update_failed(vnode, ret);
513 _leave(" = %d [cnt %d]", ret, vnode->update_cnt);
517 spin_lock(&vnode->lock);
518 vnode->update_cnt--;
519 ASSERTCMP(vnode->update_cnt, >=, 0);
520 spin_unlock(&vnode->lock);
521 _leave(" = %ld [cnt %d]", PTR_ERR(server), vnode->update_cnt);
528 extern int afs_vnode_link(struct afs_vnode *dvnode, struct afs_vnode *vnode,
537 dvnode->fid.vnode,
539 vnode->volume->vlocation->vldb.name,
540 vnode->fid.vid,
541 vnode->fid.vnode,
542 vnode->fid.unique,
547 spin_lock(&vnode->lock);
548 vnode->update_cnt++;
549 spin_unlock(&vnode->lock);
562 ret = afs_fs_link(server, key, dvnode, vnode, name,
569 afs_vnode_finalise_status_update(vnode, server);
573 afs_vnode_status_update_failed(vnode, ret);
577 _leave(" = %d [cnt %d]", ret, vnode->update_cnt);
581 spin_lock(&vnode->lock);
582 vnode->update_cnt--;
583 ASSERTCMP(vnode->update_cnt, >=, 0);
584 spin_unlock(&vnode->lock);
589 _leave(" = %ld [cnt %d]", PTR_ERR(server), vnode->update_cnt);
596 int afs_vnode_symlink(struct afs_vnode *vnode, struct key *key,
606 vnode->volume->vlocation->vldb.name,
607 vnode->fid.vid,
608 vnode->fid.vnode,
609 vnode->fid.unique,
614 spin_lock(&vnode->lock);
615 vnode->update_cnt++;
616 spin_unlock(&vnode->lock);
620 server = afs_volume_pick_fileserver(vnode);
626 ret = afs_fs_symlink(server, key, vnode, name, content,
629 } while (!afs_volume_release_fileserver(vnode, server, ret));
633 afs_vnode_finalise_status_update(vnode, server);
636 afs_vnode_status_update_failed(vnode, ret);
640 _leave(" = %d [cnt %d]", ret, vnode->update_cnt);
644 spin_lock(&vnode->lock);
645 vnode->update_cnt--;
646 ASSERTCMP(vnode->update_cnt, >=, 0);
647 spin_unlock(&vnode->lock);
648 _leave(" = %ld [cnt %d]", PTR_ERR(server), vnode->update_cnt);
667 orig_dvnode->fid.vnode,
671 new_dvnode->fid.vnode,
738 struct afs_vnode *vnode = wb->vnode;
742 vnode->volume->vlocation->vldb.name,
743 vnode->fid.vid,
744 vnode->fid.vnode,
745 vnode->fid.unique,
750 spin_lock(&vnode->lock);
751 vnode->update_cnt++;
752 spin_unlock(&vnode->lock);
756 server = afs_volume_pick_fileserver(vnode);
765 } while (!afs_volume_release_fileserver(vnode, server, ret));
769 afs_vnode_finalise_status_update(vnode, server);
772 afs_vnode_status_update_failed(vnode, ret);
779 spin_lock(&vnode->lock);
780 vnode->update_cnt--;
781 ASSERTCMP(vnode->update_cnt, >=, 0);
782 spin_unlock(&vnode->lock);
789 int afs_vnode_setattr(struct afs_vnode *vnode, struct key *key,
796 vnode->volume->vlocation->vldb.name,
797 vnode->fid.vid,
798 vnode->fid.vnode,
799 vnode->fid.unique,
803 spin_lock(&vnode->lock);
804 vnode->update_cnt++;
805 spin_unlock(&vnode->lock);
809 server = afs_volume_pick_fileserver(vnode);
815 ret = afs_fs_setattr(server, key, vnode, attr, &afs_sync_call);
817 } while (!afs_volume_release_fileserver(vnode, server, ret));
821 afs_vnode_finalise_status_update(vnode, server);
824 afs_vnode_status_update_failed(vnode, ret);
831 spin_lock(&vnode->lock);
832 vnode->update_cnt--;
833 ASSERTCMP(vnode->update_cnt, >=, 0);
834 spin_unlock(&vnode->lock);
841 int afs_vnode_get_volume_status(struct afs_vnode *vnode, struct key *key,
848 vnode->volume->vlocation->vldb.name,
849 vnode->fid.vid,
850 vnode->fid.vnode,
851 vnode->fid.unique,
855 spin_lock(&vnode->lock);
856 vnode->update_cnt++;
857 spin_unlock(&vnode->lock);
861 server = afs_volume_pick_fileserver(vnode);
867 ret = afs_fs_get_volume_status(server, key, vnode, vs, &afs_sync_call);
869 } while (!afs_volume_release_fileserver(vnode, server, ret));
873 afs_vnode_finalise_status_update(vnode, server);
876 afs_vnode_status_update_failed(vnode, ret);
883 spin_lock(&vnode->lock);
884 vnode->update_cnt--;
885 ASSERTCMP(vnode->update_cnt, >=, 0);
886 spin_unlock(&vnode->lock);