Lines Matching defs:vnode
2 /* vnode and volume validity verification.
19 * (2) On a RW volume, in response to certain vnode (inode)-accessing RPC
20 * calls, the server maintains a time-limited per-vnode promise that it
24 * Note that a vnode-level callbacks may also be sent for other reasons,
27 * (3) On a RO (or Backup) volume, in response to certain vnode-accessing RPC
50 * a volume have been altered since we last checked a vnode.
63 * vnode have been altered.
78 * (3) When a vnode-level CB.CallBack occurs, we increment ->cb_break on the
79 * vnode and reset its ->cb_expires_at. If the vnode is mmapped, we also
80 * dispatch a work item to unmap all PTEs to the vnode's pagecache to
84 * validity of a vnode. This first checks to see if ->cb_v_check and
86 * exclusively and perform an FS.FetchStatus on the vnode.
88 * After checking the volume, we check the vnode. If there's a mismatch
89 * between the volume counters and the vnode's mirrors of those counters,
90 * we lock vnode->validate_lock and issue an FS.FetchStatus on the vnode.
110 * parsed and used to set the promise in ->cb_expires_at for the vnode,
114 * the vnode.
118 * Check the validity of a vnode/inode and its parent volume.
120 bool afs_check_validity(const struct afs_vnode *vnode)
122 const struct afs_volume *volume = vnode->volume;
124 time64_t cb_expires_at = atomic64_read(&vnode->cb_expires_at);
127 if (test_bit(AFS_VNODE_DELETED, &vnode->flags))
138 else if (vnode->cb_ro_snapshot != atomic_read(&volume->cb_ro_snapshot))
140 else if (vnode->cb_scrub != atomic_read(&volume->cb_scrub))
142 else if (test_bit(AFS_VNODE_ZAP_DATA, &vnode->flags))
146 trace_afs_vnode_invalid(vnode, trace);
367 static void afs_zap_data(struct afs_vnode *vnode)
369 _enter("{%llx:%llu}", vnode->fid.vid, vnode->fid.vnode);
371 afs_invalidate_cache(vnode, 0);
376 if (S_ISREG(vnode->netfs.inode.i_mode))
377 filemap_invalidate_inode(&vnode->netfs.inode, true, 0, LLONG_MAX);
379 filemap_invalidate_inode(&vnode->netfs.inode, false, 0, LLONG_MAX);
383 * validate a vnode/inode
391 int afs_validate(struct afs_vnode *vnode, struct key *key)
393 struct afs_volume *volume = vnode->volume;
400 vnode->fid.vid, vnode->fid.vnode, vnode->flags,
403 if (afs_check_validity(vnode))
404 return test_bit(AFS_VNODE_DELETED, &vnode->flags) ? -ESTALE : 0;
406 ret = down_write_killable(&vnode->validate_lock);
410 if (test_bit(AFS_VNODE_DELETED, &vnode->flags)) {
430 if (vnode->cb_ro_snapshot != cb_ro_snapshot ||
431 vnode->cb_scrub != cb_scrub)
432 unmap_mapping_pages(vnode->netfs.inode.i_mapping, 0, 0, false);
434 if (vnode->cb_ro_snapshot != cb_ro_snapshot ||
435 vnode->cb_scrub != cb_scrub ||
438 atomic64_read(&vnode->cb_expires_at) <= deadline
440 ret = afs_fetch_status(vnode, key, false, NULL);
443 set_bit(AFS_VNODE_DELETED, &vnode->flags);
449 _debug("new promise [fl=%lx]", vnode->flags);
460 _debug("vnode inval %x==%x %x==%x",
461 vnode->cb_ro_snapshot, cb_ro_snapshot,
462 vnode->cb_scrub, cb_scrub);
463 if (vnode->cb_scrub != cb_scrub)
465 vnode->cb_ro_snapshot = cb_ro_snapshot;
466 vnode->cb_scrub = cb_scrub;
468 /* If the vnode's data version number changed then its contents are
472 zap |= test_and_clear_bit(AFS_VNODE_ZAP_DATA, &vnode->flags);
474 if (S_ISREG(vnode->netfs.inode.i_mode))
475 afs_zap_data(vnode);
476 else if (S_ISLNK(vnode->netfs.inode.i_mode))
477 afs_invalidate_symlink(vnode);
479 up_write(&vnode->validate_lock);
486 up_write(&vnode->validate_lock);