Difference between revisions of "Writing a Samba VFS in Samba 3.6 and earlier"

(The Samba VFS)
(The Samba VFS)
Line 27: Line 27:
  
 
'''NOTE!''' Samba also makes it possible to use VFS modules statically on those systems that do not support shared libraries. Brief comments about this are included at the end of this document.
 
'''NOTE!''' Samba also makes it possible to use VFS modules statically on those systems that do not support shared libraries. Brief comments about this are included at the end of this document.
 +
 +
The following diagrams help illustrate some of the concepts in more detail.
  
 
= Two Types of File Systems =
 
= Two Types of File Systems =

Revision as of 05:31, 6 May 2014

Introduction

This document is intended to help people who want to write Samba VFS modules. It is a Wiki-based version of an earlier document written by Richard Sharpe that can be found at Writing a Samba VFS.

The rest of this document is organized into a number of sections that:

  1. Provides and outline of the Samba VFS and discuss the interactions between the main Samba code, the VFS Layer, VFS modules and the underlying OS.
  2. Discusses two different types of file systems that module writers might want to write a VFS module for.
  3. Provides more detail on actually writing a Samba VFS and some of the functions and macros Samba makes available to help you.
  4. Lists differences in the VFS for different versions of Samba.
  5. Introduces some existing VFS modules, especially in the context of the two file system types outlined above.
  6. Gives details on the steps module writes will have to take to add their code and build their module.
  7. Provides some information on adding additional VFS routines over and above those already provided.

The Samba VFS

The Samba VFS provides a mechanism to allow people to extend the functionality of Samba in useful ways. Some examples are:

  • Convert NTFS ACLs to NFSv4 ACLs for storing in a file system that supports them. The GPFS VFS module does this and the same could be done for Linux when RichACL support is complete.
  • Support features that a vendor has implemented in their file system that Linux file systems do not support. The OneFS VFS module from Isilon interfaces with their in-kernel distributed file system which provides more complete NTFS functionality, including four file times, etc.
  • Implement features like Alternate Data Streams.
  • Implement full NT ACL support by storing them in XATTRs and correctly handling the semantics (see source3/modules/vfs_acl_xattr.c and source3/modules/vfs_acl_common.c.)
  • Support user-space file systems, perhaps accessible via a shared memory interface or via a user-space library (eg, Ceph's libceph.)


A Samba VFS is a shared library (eg, acl_xattr.so), or module, that implements some or all of the functions that the Samba VFS interface makes available to provides the desired functionality. In addition VFS modules can be stacked (if they have been written for that), and there is a default VFS (source3/modules/vfs_default.c) that provides the default Samba functionality for those functions that are not implemented higher in the stack or that earlier modules also call.

NOTE! Samba also makes it possible to use VFS modules statically on those systems that do not support shared libraries. Brief comments about this are included at the end of this document.

The following diagrams help illustrate some of the concepts in more detail.

Two Types of File Systems

Samba-vfs-diag-1.gif


Samba-vfs-diag-2.gif

Writing a VFS Module

VFS Module Initialization

VFS Function Pointer Structure

Include Files

VFS Functions

The Life Cycle of a VFS

Memory Management and talloc

Providing Context between Calls

Module Specific Parameters

Extending the Samba files_struct structure

AIO Handling in a VFS Module

Conforming to the VFS Interfaces

Be prepared for "stat" opens

Things to watch out for

TBD

Samba Version VFS Differences

TBD

Some Existing VFS Modules

TBD

Building, Installing and Debugging your VFS Module

TBD

Adding New VFS Routines