diff options
Diffstat (limited to 'Documentation/filesystems')
| -rw-r--r-- | Documentation/filesystems/00-INDEX | 2 | ||||
| -rw-r--r-- | Documentation/filesystems/dlmfs.txt | 130 |
2 files changed, 132 insertions, 0 deletions
diff --git a/Documentation/filesystems/00-INDEX b/Documentation/filesystems/00-INDEX index 628f8a7adb85..d9b0a0691866 100644 --- a/Documentation/filesystems/00-INDEX +++ b/Documentation/filesystems/00-INDEX | |||
| @@ -18,6 +18,8 @@ cramfs.txt | |||
| 18 | - info on the cram filesystem for small storage (ROMs etc) | 18 | - info on the cram filesystem for small storage (ROMs etc) |
| 19 | devfs/ | 19 | devfs/ |
| 20 | - directory containing devfs documentation. | 20 | - directory containing devfs documentation. |
| 21 | dlmfs.txt | ||
| 22 | - info on the userspace interface to the OCFS2 DLM. | ||
| 21 | ext2.txt | 23 | ext2.txt |
| 22 | - info, mount options and specifications for the Ext2 filesystem. | 24 | - info, mount options and specifications for the Ext2 filesystem. |
| 23 | fat_cvf.txt | 25 | fat_cvf.txt |
diff --git a/Documentation/filesystems/dlmfs.txt b/Documentation/filesystems/dlmfs.txt new file mode 100644 index 000000000000..9afab845a906 --- /dev/null +++ b/Documentation/filesystems/dlmfs.txt | |||
| @@ -0,0 +1,130 @@ | |||
| 1 | dlmfs | ||
| 2 | ================== | ||
| 3 | A minimal DLM userspace interface implemented via a virtual file | ||
| 4 | system. | ||
| 5 | |||
| 6 | dlmfs is built with OCFS2 as it requires most of its infrastructure. | ||
| 7 | |||
| 8 | Project web page: http://oss.oracle.com/projects/ocfs2 | ||
| 9 | Tools web page: http://oss.oracle.com/projects/ocfs2-tools | ||
| 10 | OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/ | ||
| 11 | |||
| 12 | All code copyright 2005 Oracle except when otherwise noted. | ||
| 13 | |||
| 14 | CREDITS | ||
| 15 | ======= | ||
| 16 | |||
| 17 | Some code taken from ramfs which is Copyright (C) 2000 Linus Torvalds | ||
| 18 | and Transmeta Corp. | ||
| 19 | |||
| 20 | Mark Fasheh <mark.fasheh@oracle.com> | ||
| 21 | |||
| 22 | Caveats | ||
| 23 | ======= | ||
| 24 | - Right now it only works with the OCFS2 DLM, though support for other | ||
| 25 | DLM implementations should not be a major issue. | ||
| 26 | |||
| 27 | Mount options | ||
| 28 | ============= | ||
| 29 | None | ||
| 30 | |||
| 31 | Usage | ||
| 32 | ===== | ||
| 33 | |||
| 34 | If you're just interested in OCFS2, then please see ocfs2.txt. The | ||
| 35 | rest of this document will be geared towards those who want to use | ||
| 36 | dlmfs for easy to setup and easy to use clustered locking in | ||
| 37 | userspace. | ||
| 38 | |||
| 39 | Setup | ||
| 40 | ===== | ||
| 41 | |||
| 42 | dlmfs requires that the OCFS2 cluster infrastructure be in | ||
| 43 | place. Please download ocfs2-tools from the above url and configure a | ||
| 44 | cluster. | ||
| 45 | |||
| 46 | You'll want to start heartbeating on a volume which all the nodes in | ||
| 47 | your lockspace can access. The easiest way to do this is via | ||
| 48 | ocfs2_hb_ctl (distributed with ocfs2-tools). Right now it requires | ||
| 49 | that an OCFS2 file system be in place so that it can automatically | ||
| 50 | find it's heartbeat area, though it will eventually support heartbeat | ||
| 51 | against raw disks. | ||
| 52 | |||
| 53 | Please see the ocfs2_hb_ctl and mkfs.ocfs2 manual pages distributed | ||
| 54 | with ocfs2-tools. | ||
| 55 | |||
| 56 | Once you're heartbeating, DLM lock 'domains' can be easily created / | ||
| 57 | destroyed and locks within them accessed. | ||
| 58 | |||
| 59 | Locking | ||
| 60 | ======= | ||
| 61 | |||
| 62 | Users may access dlmfs via standard file system calls, or they can use | ||
| 63 | 'libo2dlm' (distributed with ocfs2-tools) which abstracts the file | ||
| 64 | system calls and presents a more traditional locking api. | ||
| 65 | |||
| 66 | dlmfs handles lock caching automatically for the user, so a lock | ||
| 67 | request for an already acquired lock will not generate another DLM | ||
| 68 | call. Userspace programs are assumed to handle their own local | ||
| 69 | locking. | ||
| 70 | |||
| 71 | Two levels of locks are supported - Shared Read, and Exlcusive. | ||
| 72 | Also supported is a Trylock operation. | ||
| 73 | |||
| 74 | For information on the libo2dlm interface, please see o2dlm.h, | ||
| 75 | distributed with ocfs2-tools. | ||
| 76 | |||
| 77 | Lock value blocks can be read and written to a resource via read(2) | ||
| 78 | and write(2) against the fd obtained via your open(2) call. The | ||
| 79 | maximum currently supported LVB length is 64 bytes (though that is an | ||
| 80 | OCFS2 DLM limitation). Through this mechanism, users of dlmfs can share | ||
| 81 | small amounts of data amongst their nodes. | ||
| 82 | |||
| 83 | mkdir(2) signals dlmfs to join a domain (which will have the same name | ||
| 84 | as the resulting directory) | ||
| 85 | |||
| 86 | rmdir(2) signals dlmfs to leave the domain | ||
| 87 | |||
| 88 | Locks for a given domain are represented by regular inodes inside the | ||
| 89 | domain directory. Locking against them is done via the open(2) system | ||
| 90 | call. | ||
| 91 | |||
| 92 | The open(2) call will not return until your lock has been granted or | ||
| 93 | an error has occurred, unless it has been instructed to do a trylock | ||
| 94 | operation. If the lock succeeds, you'll get an fd. | ||
| 95 | |||
| 96 | open(2) with O_CREAT to ensure the resource inode is created - dlmfs does | ||
| 97 | not automatically create inodes for existing lock resources. | ||
| 98 | |||
| 99 | Open Flag Lock Request Type | ||
| 100 | --------- ----------------- | ||
| 101 | O_RDONLY Shared Read | ||
| 102 | O_RDWR Exclusive | ||
| 103 | |||
| 104 | Open Flag Resulting Locking Behavior | ||
| 105 | --------- -------------------------- | ||
| 106 | O_NONBLOCK Trylock operation | ||
| 107 | |||
| 108 | You must provide exactly one of O_RDONLY or O_RDWR. | ||
| 109 | |||
| 110 | If O_NONBLOCK is also provided and the trylock operation was valid but | ||
| 111 | could not lock the resource then open(2) will return ETXTBUSY. | ||
| 112 | |||
| 113 | close(2) drops the lock associated with your fd. | ||
| 114 | |||
| 115 | Modes passed to mkdir(2) or open(2) are adhered to locally. Chown is | ||
| 116 | supported locally as well. This means you can use them to restrict | ||
| 117 | access to the resources via dlmfs on your local node only. | ||
| 118 | |||
| 119 | The resource LVB may be read from the fd in either Shared Read or | ||
| 120 | Exclusive modes via the read(2) system call. It can be written via | ||
| 121 | write(2) only when open in Exclusive mode. | ||
| 122 | |||
| 123 | Once written, an LVB will be visible to other nodes who obtain Read | ||
| 124 | Only or higher level locks on the resource. | ||
| 125 | |||
| 126 | See Also | ||
| 127 | ======== | ||
| 128 | http://opendlm.sourceforge.net/cvsmirror/opendlm/docs/dlmbook_final.pdf | ||
| 129 | |||
| 130 | For more information on the VMS distributed locking API. | ||
