So, the linux/freebsd split was not something I was considering for stacking. I agree, that doesn't match well. But the VFS subfsal API looks like it can just go away and be a stack instead. And I certainly would not like to see it extended.

Daniel

On 01/09/2018 06:19 PM, Frank Filz wrote:
I was looking into using stackable FSALs instead of the current mechanism
for creating FSAL_VFS (Linux), FSAL_VFS (freebsd), and FSAL_XFS. The
following functions are implemented differently for FSAL_VFS and FSAL_XFS

int vfs_fd_to_handle(int fd, struct fsal_filesystem *fs,
                      vfs_file_handle_t *fh);

This is only used by lookup_path, ultimately the best thing to do would
probably be to duplicate the lookup_path code in both under stacked FSALs.

int vfs_name_to_handle(int atfd,
                        struct fsal_filesystem *fs,
                        const char *name,
                        vfs_file_handle_t *fh);

This could be mapped to the FSAL lookup method.

int vfs_open_by_handle(struct vfs_filesystem *fs,
                        vfs_file_handle_t *fh, int openflags,
                        fsal_errors_t *fsal_error);

This could be mapped to the FSAL open2 method

int vfs_encode_dummy_handle(vfs_file_handle_t *fh,
                             struct fsal_filesystem *fs);

This is used to fabricate an object handle when we cross a filesystem mount
point into a filesystem not handled by the FSAL. It would somehow have to be
mapped to lookup, but that overloads the use of lookup for
vfs_name_to_handle.

bool vfs_is_dummy_handle(vfs_file_handle_t *fh);

This one is really internal to the guts of FSAL_VFS/XFS and has no analog in
the FSAL API.

bool vfs_valid_handle(struct gsh_buffdesc *desc);

This is called by vfs_check_handle  and could maybe be mapped to the FSAL
wire_to_host method.

int vfs_readlink(struct vfs_fsal_obj_handle *myself,
                  fsal_errors_t *fsal_error);

This could be mapped to FSAL readlink method.

int vfs_extract_fsid(vfs_file_handle_t *fh,
                      enum fsid_type *fsid_type,
                      struct fsal_fsid__ *fsid);

This is also called by vfs_check_handle and maybe more of that function
could be moved into the FSAL wire_to_host method.

int vfs_get_root_handle(struct vfs_filesystem *vfs_fs,
                         struct vfs_fsal_export *exp);

int vfs_re_index(struct vfs_filesystem *vfs_fs,
                  struct vfs_fsal_export *exp);

These two are used in the process of claiming filesystems during
create_export, so perhaps could be mapped to FSAL create_export method.

All in all, these functions are not a great fit for the FSAL API so I'm not
sure it would be a good solution. Forcing some of the functions into FSAL
methods would require some code duplication that loses some of the advantage
of the mechanism. There would also be a question of how things like the file
descriptors and fsal_filesystems are shared between the main FSAL_ VFS and
the underlying stacked FSAL.

Frank





---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Nfs-ganesha-devel mailing list
Nfs-ganesha-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Nfs-ganesha-devel mailing list
Nfs-ganesha-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs-ganesha-devel

Reply via email to