Lines Matching refs:fidp

321 static int coroutine_fn v9fs_xattr_fid_clunk(V9fsPDU *pdu, V9fsFidState *fidp)  in v9fs_xattr_fid_clunk()  argument
325 if (fidp->fs.xattr.xattrwalk_fid) { in v9fs_xattr_fid_clunk()
333 if (fidp->fs.xattr.len != fidp->fs.xattr.copied_len) { in v9fs_xattr_fid_clunk()
338 if (fidp->fs.xattr.len) { in v9fs_xattr_fid_clunk()
339 retval = v9fs_co_lsetxattr(pdu, &fidp->path, &fidp->fs.xattr.name, in v9fs_xattr_fid_clunk()
340 fidp->fs.xattr.value, in v9fs_xattr_fid_clunk()
341 fidp->fs.xattr.len, in v9fs_xattr_fid_clunk()
342 fidp->fs.xattr.flags); in v9fs_xattr_fid_clunk()
344 retval = v9fs_co_lremovexattr(pdu, &fidp->path, &fidp->fs.xattr.name); in v9fs_xattr_fid_clunk()
347 v9fs_string_free(&fidp->fs.xattr.name); in v9fs_xattr_fid_clunk()
349 g_free(fidp->fs.xattr.value); in v9fs_xattr_fid_clunk()
353 static int coroutine_fn free_fid(V9fsPDU *pdu, V9fsFidState *fidp) in free_fid() argument
357 if (fidp->fid_type == P9_FID_FILE) { in free_fid()
359 if (fidp->fs.fd != -1) { in free_fid()
360 retval = v9fs_co_close(pdu, &fidp->fs); in free_fid()
362 } else if (fidp->fid_type == P9_FID_DIR) { in free_fid()
363 if (fidp->fs.dir.stream != NULL) { in free_fid()
364 retval = v9fs_co_closedir(pdu, &fidp->fs); in free_fid()
366 } else if (fidp->fid_type == P9_FID_XATTR) { in free_fid()
367 retval = v9fs_xattr_fid_clunk(pdu, fidp); in free_fid()
369 v9fs_path_free(&fidp->path); in free_fid()
370 g_free(fidp); in free_fid()
374 static int coroutine_fn put_fid(V9fsPDU *pdu, V9fsFidState *fidp) in put_fid() argument
376 BUG_ON(!fidp->ref); in put_fid()
377 fidp->ref--; in put_fid()
381 if (!fidp->ref && fidp->clunked) { in put_fid()
382 if (fidp->fid == pdu->s->root_fid) { in put_fid()
395 return free_fid(pdu, fidp); in put_fid()
402 V9fsFidState *fidp; in clunk_fid() local
404 QSIMPLEQ_FOREACH(fidp, &s->fid_list, next) { in clunk_fid()
405 if (fidp->fid == fid) { in clunk_fid()
406 QSIMPLEQ_REMOVE(&s->fid_list, fidp, V9fsFidState, next); in clunk_fid()
407 fidp->clunked = true; in clunk_fid()
408 return fidp; in clunk_fid()
498 V9fsFidState *fidp, *fidp_next; in v9fs_mark_fids_unreclaim() local
500 fidp = QSIMPLEQ_FIRST(&s->fid_list); in v9fs_mark_fids_unreclaim()
501 if (!fidp) { in v9fs_mark_fids_unreclaim()
514 for (fidp->ref++; fidp; fidp = fidp_next) { in v9fs_mark_fids_unreclaim()
515 if (fidp->path.size == path->size && in v9fs_mark_fids_unreclaim()
516 !memcmp(fidp->path.data, path->data, path->size)) { in v9fs_mark_fids_unreclaim()
518 fidp->flags |= FID_NON_RECLAIMABLE; in v9fs_mark_fids_unreclaim()
521 err = v9fs_reopen_fid(pdu, fidp); in v9fs_mark_fids_unreclaim()
523 put_fid(pdu, fidp); in v9fs_mark_fids_unreclaim()
528 fidp_next = QSIMPLEQ_NEXT(fidp, next); in v9fs_mark_fids_unreclaim()
539 put_fid(pdu, fidp); in v9fs_mark_fids_unreclaim()
548 V9fsFidState *fidp; in virtfs_reset() local
553 fidp = QSIMPLEQ_FIRST(&s->fid_list); in virtfs_reset()
554 fidp->ref++; in virtfs_reset()
557 QSIMPLEQ_REMOVE(&s->fid_list, fidp, V9fsFidState, next); in virtfs_reset()
558 fidp->clunked = true; in virtfs_reset()
560 put_fid(pdu, fidp); in virtfs_reset()
969 static int coroutine_fn fid_to_qid(V9fsPDU *pdu, V9fsFidState *fidp, in fid_to_qid() argument
975 err = v9fs_co_lstat(pdu, &fidp->path, &stbuf); in fid_to_qid()
1394 V9fsFidState *fidp; in v9fs_attach() local
1408 fidp = alloc_fid(s, fid); in v9fs_attach()
1409 if (fidp == NULL) { in v9fs_attach()
1413 fidp->uid = n_uname; in v9fs_attach()
1414 err = v9fs_co_name_to_path(pdu, NULL, "/", &fidp->path); in v9fs_attach()
1420 err = fid_to_qid(pdu, fidp, &qid); in v9fs_attach()
1456 put_fid(pdu, fidp); in v9fs_attach()
1470 V9fsFidState *fidp; in v9fs_stat() local
1480 fidp = get_fid(pdu, fid); in v9fs_stat()
1481 if (fidp == NULL) { in v9fs_stat()
1485 err = v9fs_co_lstat(pdu, &fidp->path, &stbuf); in v9fs_stat()
1489 basename = g_path_get_basename(fidp->path.data); in v9fs_stat()
1490 err = stat_to_v9stat(pdu, &fidp->path, basename, &stbuf, &v9stat); in v9fs_stat()
1505 put_fid(pdu, fidp); in v9fs_stat()
1516 V9fsFidState *fidp; in v9fs_getattr() local
1527 fidp = get_fid(pdu, fid); in v9fs_getattr()
1528 if (fidp == NULL) { in v9fs_getattr()
1536 retval = v9fs_co_lstat(pdu, &fidp->path, &stbuf); in v9fs_getattr()
1547 retval = v9fs_co_st_gen(pdu, &fidp->path, stbuf.st_mode, &v9stat_dotl); in v9fs_getattr()
1570 put_fid(pdu, fidp); in v9fs_getattr()
1592 V9fsFidState *fidp; in v9fs_setattr() local
1606 fidp = get_fid(pdu, fid); in v9fs_setattr()
1607 if (fidp == NULL) { in v9fs_setattr()
1612 err = v9fs_co_chmod(pdu, &fidp->path, v9iattr.mode); in v9fs_setattr()
1639 err = v9fs_co_utimensat(pdu, &fidp->path, times); in v9fs_setattr()
1657 err = v9fs_co_chown(pdu, &fidp->path, v9iattr.uid, in v9fs_setattr()
1664 err = v9fs_co_truncate(pdu, &fidp->path, v9iattr.size); in v9fs_setattr()
1672 put_fid(pdu, fidp); in v9fs_setattr()
1722 V9fsFidState *fidp; in v9fs_walk() local
1755 fidp = get_fid(pdu, fid); in v9fs_walk()
1756 if (fidp == NULL) { in v9fs_walk()
1764 err = fid_to_qid(pdu, fidp, &qid); in v9fs_walk()
1773 v9fs_path_copy(&dpath, &fidp->path); in v9fs_walk()
1774 v9fs_path_copy(&path, &fidp->path); in v9fs_walk()
1797 if (fidp->fid_type != P9_FID_NONE) { in v9fs_walk()
1802 v9fs_path_copy(&fidp->path, &path); in v9fs_walk()
1810 newfidp->uid = fidp->uid; in v9fs_walk()
1816 put_fid(pdu, fidp); in v9fs_walk()
1865 V9fsFidState *fidp; in v9fs_open() local
1881 fidp = get_fid(pdu, fid); in v9fs_open()
1882 if (fidp == NULL) { in v9fs_open()
1886 if (fidp->fid_type != P9_FID_NONE) { in v9fs_open()
1891 err = v9fs_co_lstat(pdu, &fidp->path, &stbuf); in v9fs_open()
1900 err = v9fs_co_opendir(pdu, fidp); in v9fs_open()
1904 fidp->fid_type = P9_FID_DIR; in v9fs_open()
1923 err = v9fs_co_open(pdu, fidp, flags); in v9fs_open()
1927 fidp->fid_type = P9_FID_FILE; in v9fs_open()
1928 fidp->open_flags = flags; in v9fs_open()
1934 fidp->flags |= FID_NON_RECLAIMABLE; in v9fs_open()
1936 iounit = get_iounit(pdu, &fidp->path); in v9fs_open()
1946 put_fid(pdu, fidp); in v9fs_open()
1958 V9fsFidState *fidp; in v9fs_lcreate() local
1982 fidp = get_fid(pdu, dfid); in v9fs_lcreate()
1983 if (fidp == NULL) { in v9fs_lcreate()
1987 if (fidp->fid_type != P9_FID_NONE) { in v9fs_lcreate()
1993 err = v9fs_co_open2(pdu, fidp, &name, gid, in v9fs_lcreate()
1998 fidp->fid_type = P9_FID_FILE; in v9fs_lcreate()
1999 fidp->open_flags = flags; in v9fs_lcreate()
2005 fidp->flags |= FID_NON_RECLAIMABLE; in v9fs_lcreate()
2007 iounit = get_iounit(pdu, &fidp->path); in v9fs_lcreate()
2020 put_fid(pdu, fidp); in v9fs_lcreate()
2032 V9fsFidState *fidp; in v9fs_fsync() local
2041 fidp = get_fid(pdu, fid); in v9fs_fsync()
2042 if (fidp == NULL) { in v9fs_fsync()
2046 err = v9fs_co_fsync(pdu, fidp, datasync); in v9fs_fsync()
2050 put_fid(pdu, fidp); in v9fs_fsync()
2060 V9fsFidState *fidp; in v9fs_clunk() local
2070 fidp = clunk_fid(s, fid); in v9fs_clunk()
2071 if (fidp == NULL) { in v9fs_clunk()
2079 fidp->ref++; in v9fs_clunk()
2080 err = put_fid(pdu, fidp); in v9fs_clunk()
2118 static int v9fs_xattr_read(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp, in v9fs_xattr_read() argument
2126 if (fidp->fs.xattr.len < off) { in v9fs_xattr_read()
2129 read_count = fidp->fs.xattr.len - off; in v9fs_xattr_read()
2142 ((char *)fidp->fs.xattr.value) + off, in v9fs_xattr_read()
2153 V9fsFidState *fidp, in v9fs_do_readdir_with_stat() argument
2165 saved_dir_pos = v9fs_co_telldir(pdu, fidp); in v9fs_do_readdir_with_stat()
2173 v9fs_readdir_lock(&fidp->fs.dir); in v9fs_do_readdir_with_stat()
2175 err = v9fs_co_readdir(pdu, fidp, &dent); in v9fs_do_readdir_with_stat()
2179 err = v9fs_co_name_to_path(pdu, &fidp->path, dent->d_name, &path); in v9fs_do_readdir_with_stat()
2192 v9fs_readdir_unlock(&fidp->fs.dir); in v9fs_do_readdir_with_stat()
2195 v9fs_co_seekdir(pdu, fidp, saved_dir_pos); in v9fs_do_readdir_with_stat()
2204 v9fs_readdir_unlock(&fidp->fs.dir); in v9fs_do_readdir_with_stat()
2207 v9fs_co_seekdir(pdu, fidp, saved_dir_pos); in v9fs_do_readdir_with_stat()
2218 v9fs_readdir_unlock(&fidp->fs.dir); in v9fs_do_readdir_with_stat()
2235 V9fsFidState *fidp; in v9fs_read() local
2245 fidp = get_fid(pdu, fid); in v9fs_read()
2246 if (fidp == NULL) { in v9fs_read()
2250 if (fidp->fid_type == P9_FID_DIR) { in v9fs_read()
2260 v9fs_co_rewinddir(pdu, fidp); in v9fs_read()
2262 count = v9fs_do_readdir_with_stat(pdu, fidp, max_count); in v9fs_read()
2272 } else if (fidp->fid_type == P9_FID_FILE) { in v9fs_read()
2287 len = v9fs_co_preadv(pdu, fidp, qiov.iov, qiov.niov, off); in v9fs_read()
2307 } else if (fidp->fid_type == P9_FID_XATTR) { in v9fs_read()
2308 err = v9fs_xattr_read(s, pdu, fidp, off, max_count); in v9fs_read()
2314 put_fid(pdu, fidp); in v9fs_read()
2346 static int coroutine_fn v9fs_do_readdir(V9fsPDU *pdu, V9fsFidState *fidp, in v9fs_do_readdir() argument
2371 count = v9fs_co_readdir_many(pdu, fidp, &entries, offset, max_count, in v9fs_do_readdir()
2443 V9fsFidState *fidp; in v9fs_readdir() local
2467 fidp = get_fid(pdu, fid); in v9fs_readdir()
2468 if (fidp == NULL) { in v9fs_readdir()
2472 if (!fidp->fs.dir.stream) { in v9fs_readdir()
2484 count = v9fs_do_readdir(pdu, fidp, (off_t) initial_offset, max_count); in v9fs_readdir()
2496 put_fid(pdu, fidp); in v9fs_readdir()
2501 static int v9fs_xattr_write(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp, in v9fs_xattr_write() argument
2511 if (fidp->fs.xattr.len < off) { in v9fs_xattr_write()
2514 write_count = fidp->fs.xattr.len - off; in v9fs_xattr_write()
2523 fidp->fs.xattr.copied_len += write_count; in v9fs_xattr_write()
2533 memcpy((char *)fidp->fs.xattr.value + off, sg[i].iov_base, to_copy); in v9fs_xattr_write()
2551 V9fsFidState *fidp; in v9fs_write() local
2566 fidp = get_fid(pdu, fid); in v9fs_write()
2567 if (fidp == NULL) { in v9fs_write()
2571 if (fidp->fid_type == P9_FID_FILE) { in v9fs_write()
2572 if (fidp->fs.fd == -1) { in v9fs_write()
2576 } else if (fidp->fid_type == P9_FID_XATTR) { in v9fs_write()
2580 err = v9fs_xattr_write(s, pdu, fidp, off, count, in v9fs_write()
2596 len = v9fs_co_pwritev(pdu, fidp, qiov.iov, qiov.niov, off); in v9fs_write()
2619 put_fid(pdu, fidp); in v9fs_write()
2630 V9fsFidState *fidp; in v9fs_create() local
2662 fidp = get_fid(pdu, fid); in v9fs_create()
2663 if (fidp == NULL) { in v9fs_create()
2667 if (fidp->fid_type != P9_FID_NONE) { in v9fs_create()
2672 err = v9fs_co_mkdir(pdu, fidp, &name, perm & 0777, in v9fs_create()
2673 fidp->uid, -1, &stbuf); in v9fs_create()
2677 err = v9fs_co_name_to_path(pdu, &fidp->path, name.data, &path); in v9fs_create()
2682 v9fs_path_copy(&fidp->path, &path); in v9fs_create()
2684 err = v9fs_co_opendir(pdu, fidp); in v9fs_create()
2688 fidp->fid_type = P9_FID_DIR; in v9fs_create()
2690 err = v9fs_co_symlink(pdu, fidp, &name, in v9fs_create()
2695 err = v9fs_co_name_to_path(pdu, &fidp->path, name.data, &path); in v9fs_create()
2700 v9fs_path_copy(&fidp->path, &path); in v9fs_create()
2709 err = v9fs_co_link(pdu, ofidp, fidp, &name); in v9fs_create()
2714 err = v9fs_co_name_to_path(pdu, &fidp->path, name.data, &path); in v9fs_create()
2716 fidp->fid_type = P9_FID_NONE; in v9fs_create()
2720 v9fs_path_copy(&fidp->path, &path); in v9fs_create()
2722 err = v9fs_co_lstat(pdu, &fidp->path, &stbuf); in v9fs_create()
2724 fidp->fid_type = P9_FID_NONE; in v9fs_create()
2750 err = v9fs_co_mknod(pdu, fidp, &name, fidp->uid, -1, in v9fs_create()
2755 err = v9fs_co_name_to_path(pdu, &fidp->path, name.data, &path); in v9fs_create()
2760 v9fs_path_copy(&fidp->path, &path); in v9fs_create()
2763 err = v9fs_co_mknod(pdu, fidp, &name, fidp->uid, -1, in v9fs_create()
2768 err = v9fs_co_name_to_path(pdu, &fidp->path, name.data, &path); in v9fs_create()
2773 v9fs_path_copy(&fidp->path, &path); in v9fs_create()
2776 err = v9fs_co_mknod(pdu, fidp, &name, fidp->uid, -1, in v9fs_create()
2781 err = v9fs_co_name_to_path(pdu, &fidp->path, name.data, &path); in v9fs_create()
2786 v9fs_path_copy(&fidp->path, &path); in v9fs_create()
2789 err = v9fs_co_open2(pdu, fidp, &name, -1, in v9fs_create()
2794 fidp->fid_type = P9_FID_FILE; in v9fs_create()
2795 fidp->open_flags = omode_to_uflags(mode); in v9fs_create()
2796 if (fidp->open_flags & O_EXCL) { in v9fs_create()
2801 fidp->flags |= FID_NON_RECLAIMABLE; in v9fs_create()
2804 iounit = get_iounit(pdu, &fidp->path); in v9fs_create()
2817 put_fid(pdu, fidp); in v9fs_create()
2978 V9fsFidState *fidp; in v9fs_remove() local
2987 fidp = get_fid(pdu, fid); in v9fs_remove()
2988 if (fidp == NULL) { in v9fs_remove()
3001 err = v9fs_mark_fids_unreclaim(pdu, &fidp->path); in v9fs_remove()
3005 err = v9fs_co_remove(pdu, &fidp->path); in v9fs_remove()
3011 clunk_fid(pdu->s, fidp->fid); in v9fs_remove()
3012 put_fid(pdu, fidp); in v9fs_remove()
3089 static int coroutine_fn v9fs_complete_rename(V9fsPDU *pdu, V9fsFidState *fidp, in v9fs_complete_rename() argument
3105 if (fidp->fid_type != P9_FID_NONE) { in v9fs_complete_rename()
3114 char *dir_name = g_path_get_dirname(fidp->path.data); in v9fs_complete_rename()
3127 err = v9fs_co_rename(pdu, &fidp->path, &new_path); in v9fs_complete_rename()
3136 if (v9fs_path_is_ancestor(&fidp->path, &tfidp->path)) { in v9fs_complete_rename()
3138 v9fs_fix_path(&tfidp->path, &new_path, strlen(fidp->path.data)); in v9fs_complete_rename()
3157 V9fsFidState *fidp; in v9fs_rename() local
3177 fidp = get_fid(pdu, fid); in v9fs_rename()
3178 if (fidp == NULL) { in v9fs_rename()
3182 if (fidp->fid_type != P9_FID_NONE) { in v9fs_rename()
3192 err = v9fs_complete_rename(pdu, fidp, newdirfid, &name); in v9fs_rename()
3198 put_fid(pdu, fidp); in v9fs_rename()
3335 V9fsFidState *fidp; in v9fs_wstat() local
3347 fidp = get_fid(pdu, fid); in v9fs_wstat()
3348 if (fidp == NULL) { in v9fs_wstat()
3354 err = v9fs_co_fsync(pdu, fidp, 0); in v9fs_wstat()
3359 err = v9fs_co_lstat(pdu, &fidp->path, &stbuf); in v9fs_wstat()
3370 err = v9fs_co_chmod(pdu, &fidp->path, in v9fs_wstat()
3391 err = v9fs_co_utimensat(pdu, &fidp->path, times); in v9fs_wstat()
3397 err = v9fs_co_chown(pdu, &fidp->path, v9stat.n_uid, v9stat.n_gid); in v9fs_wstat()
3404 err = v9fs_complete_rename(pdu, fidp, -1, &v9stat.name); in v9fs_wstat()
3411 err = v9fs_co_truncate(pdu, &fidp->path, v9stat.length); in v9fs_wstat()
3418 put_fid(pdu, fidp); in v9fs_wstat()
3474 V9fsFidState *fidp; in v9fs_statfs() local
3483 fidp = get_fid(pdu, fid); in v9fs_statfs()
3484 if (fidp == NULL) { in v9fs_statfs()
3488 retval = v9fs_co_statfs(pdu, &fidp->path, &stbuf); in v9fs_statfs()
3498 put_fid(pdu, fidp); in v9fs_statfs()
3515 V9fsFidState *fidp; in v9fs_mknod() local
3536 fidp = get_fid(pdu, fid); in v9fs_mknod()
3537 if (fidp == NULL) { in v9fs_mknod()
3541 err = v9fs_co_mknod(pdu, fidp, &name, fidp->uid, gid, in v9fs_mknod()
3558 put_fid(pdu, fidp); in v9fs_mknod()
3577 V9fsFidState *fidp; in v9fs_lock() local
3597 fidp = get_fid(pdu, fid); in v9fs_lock()
3598 if (fidp == NULL) { in v9fs_lock()
3602 err = v9fs_co_fstat(pdu, fidp, &stbuf); in v9fs_lock()
3613 put_fid(pdu, fidp); in v9fs_lock()
3627 V9fsFidState *fidp; in v9fs_getlock() local
3642 fidp = get_fid(pdu, fid); in v9fs_getlock()
3643 if (fidp == NULL) { in v9fs_getlock()
3647 err = v9fs_co_fstat(pdu, fidp, &stbuf); in v9fs_getlock()
3662 put_fid(pdu, fidp); in v9fs_getlock()
3676 V9fsFidState *fidp; in v9fs_mkdir() local
3698 fidp = get_fid(pdu, fid); in v9fs_mkdir()
3699 if (fidp == NULL) { in v9fs_mkdir()
3703 err = v9fs_co_mkdir(pdu, fidp, &name, mode, fidp->uid, gid, &stbuf); in v9fs_mkdir()
3719 put_fid(pdu, fidp); in v9fs_mkdir()
3903 V9fsFidState *fidp; in v9fs_readlink() local
3910 fidp = get_fid(pdu, fid); in v9fs_readlink()
3911 if (fidp == NULL) { in v9fs_readlink()
3917 err = v9fs_co_readlink(pdu, &fidp->path, &target); in v9fs_readlink()
3930 put_fid(pdu, fidp); in v9fs_readlink()