VFS MODULE writers HEAD's up!!! Fixing Cascaded VFS modules

Stefan (metze) Metzmacher metze at metzemix.de
Fri Apr 18 21:41:16 GMT 2003


Hi all,

the current design of handling the cascaded vfs modules.

is broken for the following setup:

[share1]
         path = /data1
         vfs object = audit recycle

[share2]
         path = /data2
         vfs object = audit fake_perms

1.)Since the audit module has a global:
vfs_ops default_vfs_ops; struct

this can only holds the recylce vfs_ops OR the fake_perms ops.

So what we need is, a function witch returns the default vfs_ops
for the module and the current onnection.

So Jelmer and me have choosen a solution for this.

this old module:
static int example_stat(struct connection_struct *conn, const char *fname, 
SMB_STRUCT_STAT *sbuf)
{
         return default_vfs_ops.stat(conn, fname, sbuf);
}

the new module:
static int example_stat(struct connection_struct *conn, const char *fname, 
SMB_STRUCT_STAT *sbuf)
{
         VFS_DEFAULT_OPS;

         VFS_HANDLE_GET_OPS(conn, return -1);

         return default_vfs_ops->stat(conn, fname, sbuf);
}


So for module writers it would be very easy to port there modules to the 
new system.

just add

         VFS_DEFAULT_OPS;

         VFS_HANDLE_GET_OPS(conn, return -1);

on top of each function that should be able to call a vfs_op of the next 
module in the chain.

and then in site the code:
the '.' move to a '->':

default_vfs_ops.stat(conn, fname, sbuf);
default_vfs_ops->stat(conn, fname, sbuf);

The rest will be done by the VFS_HANDLE_GET_OPS macro!
( there will be also macros to set and get per connection private data for 
the modules)

2.) Since we have the new module loading system
we can remove the vfs_init() and vfs_done() functions
(we allready have vfs_connect() an vfs_disconnect() to manage the per 
connection stuff)

the smb_register_vfs() fn will directly register the vfs_op_tuple array.


3.) Limitation of the system:

we can't allow:

vfs object = recycle audit recycle

but I think such a combination doesn't make any sense.

and if someone would really need it, he should copy the recycle.c to recycle2.c

let the recycle2.c register under name 'recycle2'

and then he could use:

vfs object = recycle audit recycle2

4.) Does anybody has any objections against this system?

It would be really cool to get a fast feedback!!!
Because I think this fix should be get its way into SAMBA 3.0 !!!

(I have allready a working patch for this)


metze
-----------------------------------------------------------------------------
Stefan "metze" Metzmacher <metze at metzemix.de> 



More information about the samba-technical mailing list