Re: unionfs on ufs2 gives "operation not supported"

From: Tim Robbins <tjr_at_freebsd.org>
Date: Fri, 26 Dec 2003 21:24:47 +1100
BSDC wrote:

>Getting "operation not supported" messages on a long ls listing with
>unionfs mounts. Trying to setup a jail using unionfs, has anyone any
>ideas why I'm seeing this with ls?
>
># mount
>/dev/da0s1a on / (ufs, local, noatime, soft-updates, acls)
>devfs on /dev (devfs, local, multilabel)
>/dev/vinum/usr on /usr (ufs, NFS exported, local, noatime, soft-updates, acls)
>/dev/vinum/var on /var (ufs, local, noatime, soft-updates, acls)
><below>:/usr/jail/template on /usr/jail/172.16.1.1 (unionfs, noatime, noclusterw, acls)
>^^^^^^^
>
># ls -l /usr/jail/172.16.1.1/
>ls: /usr/jail/172.16.1.1/.cshrc: Operation not supported
>-rw-r--r--   2 root  wheel   797 Dec 24 03:04 .cshrc
>ls: /usr/jail/172.16.1.1/.profile: Operation not supported
>-rw-r--r--   2 root  wheel   251 Dec 24 03:04 .profile
>  
>
The problem seems to be that ls is performing a pathconf(2) 
_PC_ACL_EXTENDED request on the file to determine whether ACLs are 
supported on the file, and this request is getting passed down from 
unionfs to one of the UFS layers, which is indicating that ACLs are 
supported, but unionfs does not actually support ACLs.

I've attached an (untested) patch that should make unionfs reject 
_PC_ACL_EXTENDED. Access to files should still be controlled by the 
ACLs, but you won't be able to query or modify them through unionfs. Let 
me know if this patch works & I'll see if I can get proper ACL support 
implemented.


Tim

==== //depot/user/tjr/freebsd-tjr/src/sys/fs/unionfs/union_vnops.c#5 - /p4/src/sys/fs/unionfs/union_vnops.c ====
_at__at_ -51,6 +51,7 _at__at_
 #include <sys/buf.h>
 #include <sys/lock.h>
 #include <sys/sysctl.h>
+#include <sys/unistd.h>
 #include <fs/unionfs/union.h>
 
 #include <vm/vm.h>
_at__at_ -1780,6 +1781,9 _at__at_
 	struct union_node *un = VTOUNION(ap->a_vp);
 	struct vnode *vp;
 
+	if (ap->a_name == _PC_ACL_EXTENDED)
+		return (EINVAL);
+
 	vp = union_lock_other(un, td);
 	KASSERT(vp != NULL, ("union_pathconf: backing vnode missing!"));
 
Received on Fri Dec 26 2003 - 01:25:28 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:35 UTC