Re: Questions about ceph/cephfs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Nov 29, 2021 at 08:57:37AM -0500, Jeff Layton wrote:
> On Mon, 2021-11-29 at 14:36 +0100, Christian Brauner wrote:
> > Hey Jeff,
> > Hey everyone,
> > 
> > I have a question about the relationship between the cephfs kernel
> > client/filesystem and the code in [1].
> > 
> > I'm working on patches to let cephfs support mapped mounts. I've got
> > everything in place and I'm able to run the full mapped mounts/vfs
> > testsuite against a ceph cluster. So things like:
> > 
> > mount -t ceph 1.2.3.4:6789:/ /mnt -o name=admin,secret=wootwoot
> > mount-idmapped --map-mount b:1000:0:1 /mnt /opt
> > 
> 
> Sounds like a cool feature.
> 
> > (Where in /opt all inodes owned by id 1000 are owned by id 0 and callers
> > with id 0 write files to disk as id 1000.)
> > 
> > My next step was to read to the ceph code in github.com/ceph/ceph to
> > make sure that I don't miss any corner cases that wouldn't work
> > correctly with mapped mounts after the relevant kernel changes.
> > 
> > So I read through [1] and I could use some guidance if possible. The
> > code in there to me reads like it is a full implementation of cephfs in
> > userspace and I'm wondering how this related to the cephfs kernel
> > client/filesystem.
> > 
> > The client code in [1] seems to implement full-blown userspace path
> > lookup and permission checking that seems to reimplement the vfs layer
> > in userspace.
> > A lot of the helpers such as ceph_ll_mknod() in addition expose a
> > UserPerms struct that seems to be settable by the caller which is used
> > during lookup.
> > 
> > How does this permission/path lookup code relate to the cephfs kernel
> > client/filesystem? Do they interact with each other in any way?
> > 
> > Thanks for taking the time to answer!
> > Christian
> > 
> > [1]: https://github.com/ceph/ceph/tree/master/src/client/*
> 
> There are really two "official" cephfs clients: the userland client
> which is (mostly) represented by src/client in the userland ceph tree,
> and the kernel cephfs client (aka the kclient), which is (mostly)
> fs/ceph and net/ceph in the Linux kernel tree.
> 
> The userland code usually gets compiled into libcephfs.so and is the
> backend engine for ceph-fuse, the nfs-ganesha FSAL driver, and the samba
> vfs backend driver, as well as a bunch of testcases in the ceph tree.
> 
> libcephfs communicates directly with the cluster without interacting
> with any of the kernel ceph code, so ceph-fuse, ganesha, etc. do use the
> userland code for lookups and permission checks.
> 
> Technically, the kclient is the reimplentation. Most of the ceph and
> libceph code in the kernel has been copied/reimplemented from the ceph
> userland code. There is no real dependency between the kclient and
> libcephfs.
> 
> Maintaining the kclient is a continual game of catchup, unfortunately,
> though in some cases we do leading edge client development there instead
> and play catchup in the userland client.

Thank you for answering this so quickly this makes my life a lot easier!
This is good news as this means that the kernel changes to cephfs should
be fairly simple and self-contained. I'll continue polishing them and
will send them out once ready.

Thanks again!
Christian



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Ceph Dev]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux