|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH] lib/9pfs: Add getattr filesystem operation
Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
---
lib/9pfs/9pfs_vnops.c | 31 ++++++++++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/lib/9pfs/9pfs_vnops.c b/lib/9pfs/9pfs_vnops.c
index 53d00b8e..87fde712 100644
--- a/lib/9pfs/9pfs_vnops.c
+++ b/lib/9pfs/9pfs_vnops.c
@@ -549,10 +549,39 @@ out:
return -rc;
}
+static int uk_9pfs_getattr(struct vnode *vp, struct vattr *attr)
+{
+ struct uk_9pdev *dev = UK_9PFS_MD(vp->v_mount)->dev;
+ struct uk_9pfid *fid = UK_9PFS_VFID(vp);
+ struct uk_9p_stat stat;
+ struct uk_9preq *stat_req;
+ int rc;
+
+ stat_req = uk_9p_stat(dev, fid, &stat);
+ if (PTRISERR(stat_req)) {
+ rc = PTR2ERR(stat_req);
+ goto out;
+ }
+
+ /* No stat string fields are used below. */
+ uk_9pdev_req_remove(dev, stat_req);
+
+ attr->va_type = uk_9pfs_vtype_from_mode(stat.mode);
+ attr->va_mode = uk_9pfs_posix_mode_from_mode(stat.mode);
+ attr->va_nodeid = vp->v_ino;
+ attr->va_size = stat.length;
+
+ memcpy(&(attr->va_atime), &(stat.atime), sizeof(struct timespec));
+ memcpy(&(attr->va_mtime), &(stat.mtime), sizeof(struct timespec));
+ memset(&(attr->va_ctime), 0, sizeof(struct timespec));
+
+out:
+ return -rc;
+}
+
#define uk_9pfs_seek ((vnop_seek_t)vfscore_vop_nullop)
#define uk_9pfs_ioctl ((vnop_ioctl_t)vfscore_vop_einval)
#define uk_9pfs_fsync ((vnop_fsync_t)vfscore_vop_nullop)
-#define uk_9pfs_getattr ((vnop_getattr_t)vfscore_vop_nullop)
#define uk_9pfs_setattr ((vnop_setattr_t)vfscore_vop_nullop)
#define uk_9pfs_truncate ((vnop_truncate_t)vfscore_vop_nullop)
#define uk_9pfs_link ((vnop_link_t)vfscore_vop_eperm)
--
2.20.1
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |