[sheepdog] [PATCH 00/12] introduce basic NFS server support

Hitoshi Mitake mitake.hitoshi at gmail.com
Wed Jan 29 03:41:59 CET 2014


At Wed, 29 Jan 2014 04:19:00 +0800,
Liu Yuan wrote:
> 
> This patch set mainly introduce NFS server building blocks, that is
> 
> - NFS v3 transport by glibc's SUNRPC
> - preliminary NFS server
> 
> NFS protocol is seen as the most established shared storage protocol to provide
> POSIX file semantics and has rich client and server features. It was introduced
> to partition the UNIX file system into two parts, client that deals with APP and
> server side that deals with disks. NFS has a tremendous success both in system
> design (where Linux VFS root from, allowing different backend implementation
> such as ext4, xfs, btrfs, FUSE, etc.) and in business market. It is well received
> by uesrs, so there is no reason we don't start from NFS for a POSIX file
> abstraction (tree structure, rich system calls, ACL, etc)
> 
> I choose hyper volume as the base for NFS sever like our HTTP storage system.
> 
> For now, this patch set limit
> 
> - file size to 4M, hence directory is also 4M at most
> - inode take up the whole sd object (4M)
> - no file deletion and directory deletion support due to lack of dentry management
> - no link, symlink, rename support
> - no ACL
> - no nanosecond support
> 
> But we now support traditional UNIX file system structure and it is a working
> grund to play with. It even in this early stage support bash command like 'echo,
> cat, mkdir, touch, df ...'.
> 
> Usage:
>  # on host
>  $ ./configure --enable-nfs
>  # work around auth error for mount
>  $ echo 'OPTIONS="-w -i"' | sudo tee /etc/default/rpcbind
>  $ sudo service portmap restart
>  $ dog nfs create test # create a NFS v3 server (listen on nfsd and mountd port)
> 
> --------------------------------------------------------------------
>  # on client
>  # now on any client machine, make sure you install nfs-common at first
>  $ sudo mount o tcp,nfsvers=3 -t nfs server_ip:test /mnt
> 
> TODO:
>  - finish stubs
>  - add stat sub-command to 'dog nfs'
>  - add extent to file allocation
>  - add btree or hash based kv store to manage dentries
>  - implement a multi-threaded SUNRPC to take place of poor performance glibc RPC
>  - implement NFS v4
> 
> Liu Yuan (12):
>   sheep: fix some compile errors
>   sheep: introduce NFSv3 transport
>   sheep/nfs: add mount protocol stub
>   dog: add nfs command
>   util: add PTR_ERR helpers
>   sheep/nfs: add basic file system framework
>   sheep: clean up sd_inode btree error code
>   sheep/nfs: support lookup/create/setattr nfs operation
>   sheep/nfs: implement read/write nfs operation
>   sheep/nfs: add mkdir support
>   sheep: make stat_data_objs a generic function
>   sheep/nfs: implement nfs3_fsstat operation
> 
>  configure.ac             |   12 +
>  dog/Makefile.am          |    4 +
>  dog/dog.c                |    5 +
>  dog/dog.h                |    8 +-
>  dog/nfs.c                |   81 +++
>  dog/vdi.c                |   96 +--
>  include/compiler.h       |    2 +
>  include/internal_proto.h |    6 +
>  include/sheepdog_proto.h |    3 -
>  include/util.h           |   44 +-
>  lib/Makefile.am          |    3 +-
>  lib/sd.c                 |  112 +++
>  lib/sd_inode.c           |   22 +-
>  sheep/Makefile.am        |    6 +
>  sheep/http/http.h        |    2 +-
>  sheep/http/kv.c          |   35 +-
>  sheep/nfs/fs.c           |  379 ++++++++++
>  sheep/nfs/fs.h           |   73 ++
>  sheep/nfs/mount.c        |   80 +++
>  sheep/nfs/nfs.c          |  723 +++++++++++++++++++
>  sheep/nfs/nfs.h          | 1241 ++++++++++++++++++++++++++++++++
>  sheep/nfs/nfsd.c         |  245 +++++++
>  sheep/nfs/xdr.c          | 1795 ++++++++++++++++++++++++++++++++++++++++++++++
>  sheep/ops.c              |   23 +
>  sheep/sheep.c            |    4 +
>  sheep/sheep_priv.h       |   14 +-
>  sheep/trace/trace.h      |    8 -
>  sheep/vdi.c              |   30 +
>  28 files changed, 4897 insertions(+), 159 deletions(-)
>  create mode 100644 dog/nfs.c
>  create mode 100644 lib/sd.c
>  create mode 100644 sheep/nfs/fs.c
>  create mode 100644 sheep/nfs/fs.h
>  create mode 100644 sheep/nfs/mount.c
>  create mode 100644 sheep/nfs/nfs.c
>  create mode 100644 sheep/nfs/nfs.h
>  create mode 100644 sheep/nfs/nfsd.c
>  create mode 100644 sheep/nfs/xdr.c

I commented on 4th, 9th, and 11th patches and currently don't have
other objections on this patchset.

(To be honest, I have an objection that svc_dispatcher() should
delegate its procedures to main thread via register_event() and
eventfd for ease of maintenance. But current patchset doesn't affect
stability of sheepdog so it can be fixed later.)

Thanks,
Hitoshi



More information about the sheepdog mailing list