Attribute order in storing and retreiving extended attributes

Willem Jan Withagen wjw at digiware.nl
Sun Jan 10 16:55:49 UTC 2016


Hi,

I'm looking into why a snippet of Ceph testcode sometimes retuns error,
and other times does complete oke.

It seems that under Linux the way order of attributes is always
consistent in the same order.

Where as on FreeBSD it can happen that even with the same sequence of
extattr_set_* will give a different order in the extattr_list_fd output.
And because the outputbuffer is compared with memcmp an error is detected.

Easy to verify with lsextattr, which also gives a different order.

When things go oke the order is:
# lsextattr user chain_xattr_listxatrr
chain_xattr_listxatrr, size: 512
user.1111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111 at 1
user.1111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111
user.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

When thing go wrong, the order is:
 # lsextattr user chain_xattr_listxatrr
chain_xattr_listxatrr, size: 512
user.1111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111
user.1111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111 at 1
user.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

This is on a ZFS filesystem.
Is there any particular reason why these is not deterministic?
I do not have a testbox with UFS available, so it is hard to verify that
it occurs there too.

Would this be easy to make more deterministic?

--WjW


More information about the freebsd-hackers mailing list