aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2017-12-19 19:09:06 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2017-12-19 19:09:06 +0000
commit746c92e04e6df9290938df9551b09c1e6f24466d (patch)
tree61fd3fa918310de0583348ea73a302ddd17cf575
parent697a86b6bf7ea354ae023e79ad12ee35d1faa916 (diff)
downloadsrc-746c92e04e6df9290938df9551b09c1e6f24466d.tar.gz
src-746c92e04e6df9290938df9551b09c1e6f24466d.zip
Add a custom VOP_PATHCONF method for fuse.
This method handles _PC_FILESIZEBITS, _PC_SYMLINK_MAX, and _PC_NO_TRUNC. For other values it defers to vop_stdpathconf(). MFC after: 1 month Sponsored by: Chelsio Communications
Notes
Notes: svn path=/head/; revision=326988
-rw-r--r--sys/fs/fuse/fuse_vnops.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/sys/fs/fuse/fuse_vnops.c b/sys/fs/fuse/fuse_vnops.c
index dd78ac8d055a..1c10ca939842 100644
--- a/sys/fs/fuse/fuse_vnops.c
+++ b/sys/fs/fuse/fuse_vnops.c
@@ -126,6 +126,7 @@ static vop_lookup_t fuse_vnop_lookup;
static vop_mkdir_t fuse_vnop_mkdir;
static vop_mknod_t fuse_vnop_mknod;
static vop_open_t fuse_vnop_open;
+static vop_pathconf_t fuse_vnop_pathconf;
static vop_read_t fuse_vnop_read;
static vop_readdir_t fuse_vnop_readdir;
static vop_readlink_t fuse_vnop_readlink;
@@ -158,7 +159,7 @@ struct vop_vector fuse_vnops = {
.vop_mkdir = fuse_vnop_mkdir,
.vop_mknod = fuse_vnop_mknod,
.vop_open = fuse_vnop_open,
- .vop_pathconf = vop_stdpathconf,
+ .vop_pathconf = fuse_vnop_pathconf,
.vop_read = fuse_vnop_read,
.vop_readdir = fuse_vnop_readdir,
.vop_readlink = fuse_vnop_readlink,
@@ -1175,6 +1176,25 @@ fuse_vnop_open(struct vop_open_args *ap)
return error;
}
+static int
+fuse_vnop_pathconf(struct vop_pathconf_args *ap)
+{
+
+ switch (ap->a_name) {
+ case _PC_FILESIZEBITS:
+ *ap->a_retval = 64;
+ return (0);
+ case _PC_SYMLINK_MAX:
+ *ap->a_retval = MAXPATHLEN;
+ return (0);
+ case _PC_NO_TRUNC:
+ *ap->a_retval = 1;
+ return (0);
+ default:
+ return (vop_stdpathconf(ap));
+ }
+}
+
/*
struct vnop_read_args {
struct vnode *a_vp;