FUSE extended attribute patches available

Rick Macklem rmacklem at uoguelph.ca
Sun Mar 6 03:06:50 UTC 2016


Ken Merry wrote:
> I have patches for FreeBSD’s FUSE filesystem kernel module to support
> extended attributes:
> 
> https://people.freebsd.org/~ken/fuse_extattr.20160229.1.txt
> 
The only bit of code I have that might be useful for this patch is:
  	case FUSE_GETXATTR:
  	case FUSE_LISTXATTR:
! 		/*
! 		 * These can have varying response lengths, and 0 length
! 		 * isn't necessarily invalid.
! 		 */
! 		err = 0;
*** I came up with this:
		fgin = (struct fuse_getxattr_in *)
		    ((char *)ftick->tk_ms_fiov.base +
		     sizeof(struct fuse_in_header));
		if (fgin->size == 0)
			err = (blen == sizeof(struct fuse_getxattr_out)) ? 0 :
			    EINVAL;
		else
			err = (blen <= fgin->size) ? 0 : EINVAL;
  		break;
I think I got the size check right?

The big question is...
What to do with the NAMESPACE?
- My code fails for SYSTEM and does USER without prepending "user.".
  (That seemed to be what rwatson@ felt was reasonable. I thought our
   discussion was on a mailing list, but I can't find it.)
  I've cc'd him. Maybe he can comment again.

- If you stick with prepending "user." or "system." there needs to be
  some way to bypass this so that attributes that don't start in "user."
  or "system." can be accessed. I've seen "trusted." and "glusterfs."
  on GlusterFS.
  --> Maybe a new namespace called something like "nil" that just bypasses
      any USER or SYSTEM checks?

rick

> The patch implements the get/set/delete/list extended attribute methods.  The
> listing code also converts extended attribute lists from the Linux/FUSE
> format to the FreeBSD format.  For example:
> 
> # touch foo
> # ls -la foo
> -rwxrwxrwx  1 root  wheel  0 Feb 29 21:40 foo
> # lsextattr user foo
> foo
> # setextattr user testattr1 "12345678" foo
> # lsextattr user foo
> foo     testattr1
> # getextattr user testattr1 foo
> foo     12345678
> # setextattr user testattr2 "87654321" foo
> # lsextattr user foo
> foo     testattr2       testattr1
> # rmextattr user testattr1 foo
> # lsextattr user foo
> foo     testattr2
> # getextattr user testattr1 foo
> getextattr: foo: failed: Attribute not found
> # getextattr user testattr2 foo
> foo     87654321
> 
> 
> Just to be clear on what this does, it only provides extended attribute
> support to FreeBSD applications if the underlying FUSE filesystem implements
> FUSE extended attribute support.  Many FUSE filesystems don’t support the
> extended attribute VFS operations.
> 
> I have tested this out on IBM’s LTFS implementation, but I have not yet found
> another FUSE filesystem that supports extended attributes.  If anyone knows
> of one, please let me know so I can try it out.  (I looked through a number
> of the filesystems in sysutils/fusefs* in the ports tree.)
> 
> Any feedback is welcome.  I’m planning to check this into FreeBSD/head in the
> next week or so.
> 
> Obviously, I’ve also ported IBM’s LTFS implementation to FreeBSD.  It works
> in the standard FUSE mode, and you can also link it into an application as a
> library if you don’t want to incur the overhead of running through FUSE.  I
> haven’t gotten around to packaging it up to go out for testing / review.
> 
> If anyone has IBM LTO-5 or newer tape drives, or IBM TS1140 or newer tape
> drives, and wants to try it out, let me know.  I’ll send you the code when
> I’ve got it at least somewhat ready.  This is IBM-specific, and won’t work
> on HP tape drives.
> 
> Ken
>> Ken Merry
> ken at FreeBSD.ORG
> 
> 
> 
> _______________________________________________
> freebsd-fs at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-fs
> To unsubscribe, send any mail to "freebsd-fs-unsubscribe at freebsd.org"


More information about the freebsd-fs mailing list