On Aug 30, 2006, at 4:36 PM, Joe Little wrote:
> On 8/30/06, Sam Falkner <Sam.Falkner at sun.com> wrote:
>> On Aug 20, 2006, at 6:56 PM, Joe Little wrote:
>>
>> > We've noticed that on at least RHEL4 systems mounting from a
>> Solaris
>> > 10 U2 and Solaris 11 server using NFS v3, an ls in a given
>> directory
>> > shows many files with a '+' at the end of their permissions. This
>> > isn't documented anywhere for Linux nor Solaris, but we only see t
>> > his from our ZFS-backed Solaris systems.
>> >
>> > -rw-r--r--+ 1 jlittle games 918 May 17 2004 group
>>
>> This means that the file has an ACL on it. Or at least that's what
>> "ls" is trying to say.
>>
>> > That's an example..
>> >
>> > Second, when we use "cp -p" to copy any file that has the + symbol,
>> > we get:
>> >
>> > #cp -p filename /tmp
>> > cp: preserving permissions for `/tmp/filename': Operation not
>> > supported
>> >
>> > Any people can clue me in here? Is there a mode that one needs to
>> > enable to use V3? Otherwise, using V2 solves things for us, but
>> then
>> > we lose visibility of snapshot trees in ZFS.
>>
>> ACLs aren't built in to the v3 protocol. Instead, we have a side
>> protocol, which Linux also implements.
>>
>> What should be happening is that your client asks our v3 server for
>> an ACL, our server asks ZFS for a POSIX-draft ACL, which it doesn't
>> support, so our server fakes up an ACL based upon the mode, and
>> returns it to you.
>>
>> But obviously that's not what's happening. Could you send us a snoop
>> trace?
>>
>> If you're ambitious, could you run this DTrace script on the server,
>> and send us the output? Save the script, make it executable, and run
>> it; then, on the client, try the "cp -p". Then kill the script, and
>> send us what (if any) output it generated. Thanks!
>>
>> - Sam
>>
>>
>
> I didn't see this reply until today. We figured out that we could just
> mount with "noacl" on the linux end. I'll look into the dtrace and
> such hopefully soon, but we've already gone production on the affected
> systems and so I'll put together a different client to test this.
I forget that attachments get deleted by the mailing list software.
So, here it is inline. (Joe, I think you should already have it;
this is just for anyone else curious.)
#! /usr/sbin/dtrace -Fs
acl3_getacl:entry
{
self->spec = speculation();
self->resp = args[1];
/* tail-call elimination, I curse you! */
self->caller = caller;
}
:::entry
/self->spec/
{
speculate(self->spec);
}
:::return
/self->spec/
{
speculate(self->spec);
trace(arg1);
}
:::return
/caller == self->caller && self->resp && self->resp->status/
{
commit(self->spec);
}
:::return
/caller == self->caller && self->resp && self->resp->status == 0/
{
discard(self->spec);
}
:::return
/self->caller && caller == self->caller/
{
self->spec = 0;
self->resp = 0;
self->caller = 0;
}
- Sam