diff options
author | Alexander Bokovoy <ab@samba.org> | 2008-01-17 16:51:14 +0300 |
---|---|---|
committer | Alexander Bokovoy <ab@samba.org> | 2008-01-17 16:59:29 +0300 |
commit | e342ca0d931f9a5c8ec9e472dc9c63f1fe012b3a (patch) | |
tree | 44e16dd515cbbb543e27180c8db903bdb8655c89 /source/modules | |
parent | 75cc08661473cce62756fa062071bb2bc1fb39ec (diff) | |
download | samba-e342ca0d931f9a5c8ec9e472dc9c63f1fe012b3a.tar.gz |
Remove is_remotestorage() call from VFS. We already have statvfs() there to handle FS capabilities.
As discussed with Volker, it is better to calculate FS capabilities at
connection time. We already do this with help of VFS statvfs() call
which allows to fill-in system-specific attributes including FS
capabilities. So just re-use it if you want to represent additional
capabilities in your modules. The only caution is that you need to
call underlying statvfs() call to actually get system-specific
capabilities (and other fields) added. Then add module-specific ones.
Diffstat (limited to 'source/modules')
-rw-r--r-- | source/modules/vfs_default.c | 9 | ||||
-rw-r--r-- | source/modules/vfs_tsmsm.c | 18 |
2 files changed, 12 insertions, 15 deletions
diff --git a/source/modules/vfs_default.c b/source/modules/vfs_default.c index 755bcdeefa2..31234f23ecf 100644 --- a/source/modules/vfs_default.c +++ b/source/modules/vfs_default.c @@ -1255,13 +1255,6 @@ static int vfswrap_set_offline(struct vfs_handle_struct *handle, const char *pat return -1; } -static bool vfswrap_is_remotestorage(struct vfs_handle_struct *handle, const char *path) -{ - /* We don't know how to detect that volume is remote storage. VFS modules should redefine it. */ - return false; -} - - static vfs_op_tuple vfs_default_ops[] = { /* Disk operations */ @@ -1486,8 +1479,6 @@ static vfs_op_tuple vfs_default_ops[] = { SMB_VFS_LAYER_OPAQUE}, {SMB_VFS_OP(vfswrap_set_offline),SMB_VFS_OP_SET_OFFLINE, SMB_VFS_LAYER_OPAQUE}, - {SMB_VFS_OP(vfswrap_is_remotestorage),SMB_VFS_OP_IS_REMOTESTORAGE, - SMB_VFS_LAYER_OPAQUE}, /* Finish VFS operations definition */ diff --git a/source/modules/vfs_tsmsm.c b/source/modules/vfs_tsmsm.c index c737032907a..2805488e8b5 100644 --- a/source/modules/vfs_tsmsm.c +++ b/source/modules/vfs_tsmsm.c @@ -294,8 +294,14 @@ static int tsmsm_set_offline(struct vfs_handle_struct *handle, return result; } -static bool tsmsm_is_remotestorage(struct vfs_handle_struct *handle, const char *path) { - return True; +static bool tsmsm_statvfs(struct vfs_handle_struct *handle, const char *path, vfs_statvfs_struct *statbuf) +{ + bool result; + + result = SMB_VFS_NEXT_STATVFS(handle, path, statbuf); + statbuf->FsCapabilities | = FILE_SUPPORTS_REMOTE_STORAGE | FILE_SUPPORTS_REPARSE_POINTS; + + return result; } static vfs_op_tuple vfs_tsmsm_ops[] = { @@ -304,6 +310,8 @@ static vfs_op_tuple vfs_tsmsm_ops[] = { {SMB_VFS_OP(tsmsm_connect), SMB_VFS_OP_CONNECT, SMB_VFS_LAYER_TRANSPARENT}, + {SMB_VFS_OP(tsmsm_statvfs), SMB_VFS_OP_STATVFS, + SMB_VFS_LAYER_TRANSPARENT}, {SMB_VFS_OP(tsmsm_aio_force), SMB_VFS_OP_AIO_FORCE, SMB_VFS_LAYER_TRANSPARENT}, {SMB_VFS_OP(tsmsm_aio_return), SMB_VFS_OP_AIO_RETURN, @@ -314,11 +322,9 @@ static vfs_op_tuple vfs_tsmsm_ops[] = { SMB_VFS_LAYER_TRANSPARENT}, {SMB_VFS_OP(tsmsm_sendfile), SMB_VFS_OP_SENDFILE, SMB_VFS_LAYER_TRANSPARENT}, - {SMB_VFS_OP(tsmsm_is_offline),SMB_VFS_OP_IS_OFFLINE, - SMB_VFS_LAYER_OPAQUE}, - {SMB_VFS_OP(tsmsm_set_offline),SMB_VFS_OP_SET_OFFLINE, + {SMB_VFS_OP(tsmsm_is_offline), SMB_VFS_OP_IS_OFFLINE, SMB_VFS_LAYER_OPAQUE}, - {SMB_VFS_OP(tsmsm_is_remotestorage),SMB_VFS_OP_IS_REMOTESTORAGE, + {SMB_VFS_OP(tsmsm_set_offline), SMB_VFS_OP_SET_OFFLINE, SMB_VFS_LAYER_OPAQUE}, /* Finish VFS operations definition */ |