Re: unionfs on ufs2 gives "operation not supported"

From: BSDC <bsdc_at_xtremedev.com>
Date: Sun, 4 Jan 2004 21:41:10 -0700
On Fri, Dec 26, 2003 at 09:24:47PM +1100, Tim Robbins wrote:
> 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

Sorry I haven't gotten back sooner, just got in from my vacation. I just
tried the patch, and it eliminated the "Operation not supported"
messages. Forgive my uninformed newbie question, but why the error
message when unionfs is just passing _PC_ACL_EXTENDED requests down to
the fs below? If the fs below supports it, shouldn't it handle it just
fine? Anyways, just thought I'd let you know the patch works. Thanks!

> ==== //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 Sun Jan 04 2004 - 19:41:16 UTC

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