123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- dlmfs
- ==================
- A minimal DLM userspace interface implemented via a virtual file
- system.
- dlmfs is built with OCFS2 as it requires most of its infrastructure.
- Project web page: http://ocfs2.wiki.kernel.org
- Tools web page: https://github.com/markfasheh/ocfs2-tools
- OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/
- All code copyright 2005 Oracle except when otherwise noted.
- CREDITS
- =======
- Some code taken from ramfs which is Copyright (C) 2000 Linus Torvalds
- and Transmeta Corp.
- Mark Fasheh <mark.fasheh@oracle.com>
- Caveats
- =======
- - Right now it only works with the OCFS2 DLM, though support for other
- DLM implementations should not be a major issue.
- Mount options
- =============
- None
- Usage
- =====
- If you're just interested in OCFS2, then please see ocfs2.txt. The
- rest of this document will be geared towards those who want to use
- dlmfs for easy to setup and easy to use clustered locking in
- userspace.
- Setup
- =====
- dlmfs requires that the OCFS2 cluster infrastructure be in
- place. Please download ocfs2-tools from the above url and configure a
- cluster.
- You'll want to start heartbeating on a volume which all the nodes in
- your lockspace can access. The easiest way to do this is via
- ocfs2_hb_ctl (distributed with ocfs2-tools). Right now it requires
- that an OCFS2 file system be in place so that it can automatically
- find its heartbeat area, though it will eventually support heartbeat
- against raw disks.
- Please see the ocfs2_hb_ctl and mkfs.ocfs2 manual pages distributed
- with ocfs2-tools.
- Once you're heartbeating, DLM lock 'domains' can be easily created /
- destroyed and locks within them accessed.
- Locking
- =======
- Users may access dlmfs via standard file system calls, or they can use
- 'libo2dlm' (distributed with ocfs2-tools) which abstracts the file
- system calls and presents a more traditional locking api.
- dlmfs handles lock caching automatically for the user, so a lock
- request for an already acquired lock will not generate another DLM
- call. Userspace programs are assumed to handle their own local
- locking.
- Two levels of locks are supported - Shared Read, and Exclusive.
- Also supported is a Trylock operation.
- For information on the libo2dlm interface, please see o2dlm.h,
- distributed with ocfs2-tools.
- Lock value blocks can be read and written to a resource via read(2)
- and write(2) against the fd obtained via your open(2) call. The
- maximum currently supported LVB length is 64 bytes (though that is an
- OCFS2 DLM limitation). Through this mechanism, users of dlmfs can share
- small amounts of data amongst their nodes.
- mkdir(2) signals dlmfs to join a domain (which will have the same name
- as the resulting directory)
- rmdir(2) signals dlmfs to leave the domain
- Locks for a given domain are represented by regular inodes inside the
- domain directory. Locking against them is done via the open(2) system
- call.
- The open(2) call will not return until your lock has been granted or
- an error has occurred, unless it has been instructed to do a trylock
- operation. If the lock succeeds, you'll get an fd.
- open(2) with O_CREAT to ensure the resource inode is created - dlmfs does
- not automatically create inodes for existing lock resources.
- Open Flag Lock Request Type
- --------- -----------------
- O_RDONLY Shared Read
- O_RDWR Exclusive
- Open Flag Resulting Locking Behavior
- --------- --------------------------
- O_NONBLOCK Trylock operation
- You must provide exactly one of O_RDONLY or O_RDWR.
- If O_NONBLOCK is also provided and the trylock operation was valid but
- could not lock the resource then open(2) will return ETXTBUSY.
- close(2) drops the lock associated with your fd.
- Modes passed to mkdir(2) or open(2) are adhered to locally. Chown is
- supported locally as well. This means you can use them to restrict
- access to the resources via dlmfs on your local node only.
- The resource LVB may be read from the fd in either Shared Read or
- Exclusive modes via the read(2) system call. It can be written via
- write(2) only when open in Exclusive mode.
- Once written, an LVB will be visible to other nodes who obtain Read
- Only or higher level locks on the resource.
- See Also
- ========
- http://opendlm.sourceforge.net/cvsmirror/opendlm/docs/dlmbook_final.pdf
- For more information on the VMS distributed locking API.
|