• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/fs/afs/

Lines Matching refs:vnode

1 /* AFS vnode management
21 * insert a vnode into the backing server's vnode tree
23 static void afs_install_vnode(struct afs_vnode *vnode,
26 struct afs_server *old_server = vnode->server;
30 _enter("%p,%p", vnode, server);
34 rb_erase(&vnode->server_rb, &old_server->fs_vnodes);
39 vnode->server = server;
42 /* insert into the server's vnode tree in FID order */
50 if (vnode->fid.vid < xvnode->fid.vid)
52 else if (vnode->fid.vid > xvnode->fid.vid)
54 else if (vnode->fid.vnode < xvnode->fid.vnode)
56 else if (vnode->fid.vnode > xvnode->fid.vnode)
58 else if (vnode->fid.unique < xvnode->fid.unique)
60 else if (vnode->fid.unique > xvnode->fid.unique)
66 rb_link_node(&vnode->server_rb, parent, p);
67 rb_insert_color(&vnode->server_rb, &server->fs_vnodes);
74 * insert a vnode into the promising server's update/expiration tree
75 * - caller must hold vnode->lock
77 static void afs_vnode_note_promise(struct afs_vnode *vnode,
84 _enter("%p,%p", vnode, server);
88 old_server = vnode->server;
89 if (vnode->cb_promised) {
91 vnode->cb_expires == vnode->cb_expires_at) {
97 if (vnode->cb_promised) {
99 rb_erase(&vnode->cb_promise, &old_server->cb_promises);
100 vnode->cb_promised = false;
105 if (vnode->server != server)
106 afs_install_vnode(vnode, server);
108 vnode->cb_expires_at = vnode->cb_expires;
110 vnode, (unsigned long) vnode->cb_expires_at);
121 if (vnode->cb_expires_at < xvnode->cb_expires_at)
127 rb_link_node(&vnode->cb_promise, parent, p);
128 rb_insert_color(&vnode->cb_promise, &server->cb_promises);
129 vnode->cb_promised = true;
138 static void afs_vnode_deleted_remotely(struct afs_vnode *vnode)
142 _enter("{%p}", vnode->server);
144 set_bit(AFS_VNODE_DELETED, &vnode->flags);
146 server = vnode->server;
148 if (vnode->cb_promised) {
150 if (vnode->cb_promised) {
151 rb_erase(&vnode->cb_promise,
153 vnode->cb_promised = false;
159 rb_erase(&vnode->server_rb, &server->fs_vnodes);
162 vnode->server = NULL;
165 ASSERT(!vnode->cb_promised);
177 void afs_vnode_finalise_status_update(struct afs_vnode *vnode,
182 _enter("%p,%p", vnode, server);
184 spin_lock(&vnode->lock);
185 clear_bit(AFS_VNODE_CB_BROKEN, &vnode->flags);
186 afs_vnode_note_promise(vnode, server);
187 vnode->update_cnt--;
188 ASSERTCMP(vnode->update_cnt, >=, 0);
189 spin_unlock(&vnode->lock);
191 wake_up_all(&vnode->update_waitq);
199 static void afs_vnode_status_update_failed(struct afs_vnode *vnode, int ret)
201 _enter("{%x:%u},%d", vnode->fid.vid, vnode->fid.vnode, ret);
203 spin_lock(&vnode->lock);
205 clear_bit(AFS_VNODE_CB_BROKEN, &vnode->flags);
210 afs_vnode_deleted_remotely(vnode);
213 vnode->update_cnt--;
214 ASSERTCMP(vnode->update_cnt, >=, 0);
215 spin_unlock(&vnode->lock);
217 wake_up_all(&vnode->update_waitq);
228 int afs_vnode_fetch_status(struct afs_vnode *vnode,
238 vnode->volume->vlocation->vldb.name,
239 vnode->fid.vid, vnode->fid.vnode, vnode->fid.unique);
241 if (!test_bit(AFS_VNODE_CB_BROKEN, &vnode->flags) &&
242 vnode->cb_promised) {
247 if (test_bit(AFS_VNODE_DELETED, &vnode->flags)) {
256 spin_lock(&vnode->lock);
258 if (!test_bit(AFS_VNODE_CB_BROKEN, &vnode->flags) &&
259 vnode->cb_promised) {
260 spin_unlock(&vnode->lock);
265 ASSERTCMP(vnode->update_cnt, >=, 0);
267 if (vnode->update_cnt > 0) {
269 _debug("wait on fetch %d", vnode->update_cnt);
273 add_wait_queue(&vnode->update_waitq, &myself);
277 if (!test_bit(AFS_VNODE_CB_BROKEN, &vnode->flags))
279 if (test_bit(AFS_VNODE_DELETED, &vnode->flags))
284 if (vnode->update_cnt == 0) {
285 remove_wait_queue(&vnode->update_waitq,
291 spin_unlock(&vnode->lock);
296 spin_lock(&vnode->lock);
299 remove_wait_queue(&vnode->update_waitq, &myself);
300 spin_unlock(&vnode->lock);
303 return test_bit(AFS_VNODE_DELETED, &vnode->flags) ?
309 vnode->update_cnt++;
311 spin_unlock(&vnode->lock);
314 * vnode */
317 server = afs_volume_pick_fileserver(vnode);
324 ret = afs_fs_fetch_file_status(server, key, vnode, NULL,
327 } while (!afs_volume_release_fileserver(vnode, server, ret));
333 afs_cache_permit(vnode, key, acl_order);
334 afs_vnode_finalise_status_update(vnode, server);
338 afs_vnode_status_update_failed(vnode, ret);
341 ASSERTCMP(vnode->update_cnt, >=, 0);
343 _leave(" = %d [cnt %d]", ret, vnode->update_cnt);
347 spin_lock(&vnode->lock);
348 vnode->update_cnt--;
349 ASSERTCMP(vnode->update_cnt, >=, 0);
350 spin_unlock(&vnode->lock);
351 _leave(" = %ld [cnt %d]", PTR_ERR(server), vnode->update_cnt);
359 int afs_vnode_fetch_data(struct afs_vnode *vnode, struct key *key,
366 vnode->volume->vlocation->vldb.name,
367 vnode->fid.vid,
368 vnode->fid.vnode,
369 vnode->fid.unique,
373 spin_lock(&vnode->lock);
374 vnode->update_cnt++;
375 spin_unlock(&vnode->lock);
378 * vnode */
381 server = afs_volume_pick_fileserver(vnode);
387 ret = afs_fs_fetch_data(server, key, vnode, offset, length,
390 } while (!afs_volume_release_fileserver(vnode, server, ret));
394 afs_vnode_finalise_status_update(vnode, server);
397 afs_vnode_status_update_failed(vnode, ret);
404 spin_lock(&vnode->lock);
405 vnode->update_cnt--;
406 ASSERTCMP(vnode->update_cnt, >=, 0);
407 spin_unlock(&vnode->lock);
414 int afs_vnode_create(struct afs_vnode *vnode, struct key *key,
423 vnode->volume->vlocation->vldb.name,
424 vnode->fid.vid,
425 vnode->fid.vnode,
426 vnode->fid.unique,
431 spin_lock(&vnode->lock);
432 vnode->update_cnt++;
433 spin_unlock(&vnode->lock);
437 server = afs_volume_pick_fileserver(vnode);
443 ret = afs_fs_create(server, key, vnode, name, mode, newfid,
446 } while (!afs_volume_release_fileserver(vnode, server, ret));
450 afs_vnode_finalise_status_update(vnode, server);
453 afs_vnode_status_update_failed(vnode, ret);
457 _leave(" = %d [cnt %d]", ret, vnode->update_cnt);
461 spin_lock(&vnode->lock);
462 vnode->update_cnt--;
463 ASSERTCMP(vnode->update_cnt, >=, 0);
464 spin_unlock(&vnode->lock);
465 _leave(" = %ld [cnt %d]", PTR_ERR(server), vnode->update_cnt);
472 int afs_vnode_remove(struct afs_vnode *vnode, struct key *key, const char *name,
479 vnode->volume->vlocation->vldb.name,
480 vnode->fid.vid,
481 vnode->fid.vnode,
482 vnode->fid.unique,
487 spin_lock(&vnode->lock);
488 vnode->update_cnt++;
489 spin_unlock(&vnode->lock);
493 server = afs_volume_pick_fileserver(vnode);
499 ret = afs_fs_remove(server, key, vnode, name, isdir,
502 } while (!afs_volume_release_fileserver(vnode, server, ret));
506 afs_vnode_finalise_status_update(vnode, server);
509 afs_vnode_status_update_failed(vnode, ret);
512 _leave(" = %d [cnt %d]", ret, vnode->update_cnt);
516 spin_lock(&vnode->lock);
517 vnode->update_cnt--;
518 ASSERTCMP(vnode->update_cnt, >=, 0);
519 spin_unlock(&vnode->lock);
520 _leave(" = %ld [cnt %d]", PTR_ERR(server), vnode->update_cnt);
527 int afs_vnode_link(struct afs_vnode *dvnode, struct afs_vnode *vnode,
536 dvnode->fid.vnode,
538 vnode->volume->vlocation->vldb.name,
539 vnode->fid.vid,
540 vnode->fid.vnode,
541 vnode->fid.unique,
546 spin_lock(&vnode->lock);
547 vnode->update_cnt++;
548 spin_unlock(&vnode->lock);
561 ret = afs_fs_link(server, key, dvnode, vnode, name,
568 afs_vnode_finalise_status_update(vnode, server);
572 afs_vnode_status_update_failed(vnode, ret);
576 _leave(" = %d [cnt %d]", ret, vnode->update_cnt);
580 spin_lock(&vnode->lock);
581 vnode->update_cnt--;
582 ASSERTCMP(vnode->update_cnt, >=, 0);
583 spin_unlock(&vnode->lock);
588 _leave(" = %ld [cnt %d]", PTR_ERR(server), vnode->update_cnt);
595 int afs_vnode_symlink(struct afs_vnode *vnode, struct key *key,
605 vnode->volume->vlocation->vldb.name,
606 vnode->fid.vid,
607 vnode->fid.vnode,
608 vnode->fid.unique,
613 spin_lock(&vnode->lock);
614 vnode->update_cnt++;
615 spin_unlock(&vnode->lock);
619 server = afs_volume_pick_fileserver(vnode);
625 ret = afs_fs_symlink(server, key, vnode, name, content,
628 } while (!afs_volume_release_fileserver(vnode, server, ret));
632 afs_vnode_finalise_status_update(vnode, server);
635 afs_vnode_status_update_failed(vnode, ret);
639 _leave(" = %d [cnt %d]", ret, vnode->update_cnt);
643 spin_lock(&vnode->lock);
644 vnode->update_cnt--;
645 ASSERTCMP(vnode->update_cnt, >=, 0);
646 spin_unlock(&vnode->lock);
647 _leave(" = %ld [cnt %d]", PTR_ERR(server), vnode->update_cnt);
666 orig_dvnode->fid.vnode,
670 new_dvnode->fid.vnode,
737 struct afs_vnode *vnode = wb->vnode;
741 vnode->volume->vlocation->vldb.name,
742 vnode->fid.vid,
743 vnode->fid.vnode,
744 vnode->fid.unique,
749 spin_lock(&vnode->lock);
750 vnode->update_cnt++;
751 spin_unlock(&vnode->lock);
755 server = afs_volume_pick_fileserver(vnode);
764 } while (!afs_volume_release_fileserver(vnode, server, ret));
768 afs_vnode_finalise_status_update(vnode, server);
771 afs_vnode_status_update_failed(vnode, ret);
778 spin_lock(&vnode->lock);
779 vnode->update_cnt--;
780 ASSERTCMP(vnode->update_cnt, >=, 0);
781 spin_unlock(&vnode->lock);
788 int afs_vnode_setattr(struct afs_vnode *vnode, struct key *key,
795 vnode->volume->vlocation->vldb.name,
796 vnode->fid.vid,
797 vnode->fid.vnode,
798 vnode->fid.unique,
802 spin_lock(&vnode->lock);
803 vnode->update_cnt++;
804 spin_unlock(&vnode->lock);
808 server = afs_volume_pick_fileserver(vnode);
814 ret = afs_fs_setattr(server, key, vnode, attr, &afs_sync_call);
816 } while (!afs_volume_release_fileserver(vnode, server, ret));
820 afs_vnode_finalise_status_update(vnode, server);
823 afs_vnode_status_update_failed(vnode, ret);
830 spin_lock(&vnode->lock);
831 vnode->update_cnt--;
832 ASSERTCMP(vnode->update_cnt, >=, 0);
833 spin_unlock(&vnode->lock);
840 int afs_vnode_get_volume_status(struct afs_vnode *vnode, struct key *key,
847 vnode->volume->vlocation->vldb.name,
848 vnode->fid.vid,
849 vnode->fid.vnode,
850 vnode->fid.unique,
855 server = afs_volume_pick_fileserver(vnode);
861 ret = afs_fs_get_volume_status(server, key, vnode, vs, &afs_sync_call);
863 } while (!afs_volume_release_fileserver(vnode, server, ret));
879 int afs_vnode_set_lock(struct afs_vnode *vnode, struct key *key,
886 vnode->volume->vlocation->vldb.name,
887 vnode->fid.vid,
888 vnode->fid.vnode,
889 vnode->fid.unique,
894 server = afs_volume_pick_fileserver(vnode);
900 ret = afs_fs_set_lock(server, key, vnode, type, &afs_sync_call);
902 } while (!afs_volume_release_fileserver(vnode, server, ret));
918 int afs_vnode_extend_lock(struct afs_vnode *vnode, struct key *key)
924 vnode->volume->vlocation->vldb.name,
925 vnode->fid.vid,
926 vnode->fid.vnode,
927 vnode->fid.unique,
932 server = afs_volume_pick_fileserver(vnode);
938 ret = afs_fs_extend_lock(server, key, vnode, &afs_sync_call);
940 } while (!afs_volume_release_fileserver(vnode, server, ret));
956 int afs_vnode_release_lock(struct afs_vnode *vnode, struct key *key)
962 vnode->volume->vlocation->vldb.name,
963 vnode->fid.vid,
964 vnode->fid.vnode,
965 vnode->fid.unique,
970 server = afs_volume_pick_fileserver(vnode);
976 ret = afs_fs_release_lock(server, key, vnode, &afs_sync_call);
978 } while (!afs_volume_release_fileserver(vnode, server, ret));