diff options
Diffstat (limited to 'Documentation/filesystems')
| -rw-r--r-- | Documentation/filesystems/configfs/configfs_example.c | 4 | ||||
| -rw-r--r-- | Documentation/filesystems/nfs-rdma.txt | 103 | ||||
| -rw-r--r-- | Documentation/filesystems/ubifs.txt | 164 |
3 files changed, 225 insertions, 46 deletions
diff --git a/Documentation/filesystems/configfs/configfs_example.c b/Documentation/filesystems/configfs/configfs_example.c index 25151fd5c2c6..039648791701 100644 --- a/Documentation/filesystems/configfs/configfs_example.c +++ b/Documentation/filesystems/configfs/configfs_example.c | |||
| @@ -279,7 +279,7 @@ static struct config_item *simple_children_make_item(struct config_group *group, | |||
| 279 | 279 | ||
| 280 | simple_child = kzalloc(sizeof(struct simple_child), GFP_KERNEL); | 280 | simple_child = kzalloc(sizeof(struct simple_child), GFP_KERNEL); |
| 281 | if (!simple_child) | 281 | if (!simple_child) |
| 282 | return NULL; | 282 | return ERR_PTR(-ENOMEM); |
| 283 | 283 | ||
| 284 | 284 | ||
| 285 | config_item_init_type_name(&simple_child->item, name, | 285 | config_item_init_type_name(&simple_child->item, name, |
| @@ -366,7 +366,7 @@ static struct config_group *group_children_make_group(struct config_group *group | |||
| 366 | simple_children = kzalloc(sizeof(struct simple_children), | 366 | simple_children = kzalloc(sizeof(struct simple_children), |
| 367 | GFP_KERNEL); | 367 | GFP_KERNEL); |
| 368 | if (!simple_children) | 368 | if (!simple_children) |
| 369 | return NULL; | 369 | return ERR_PTR(-ENOMEM); |
| 370 | 370 | ||
| 371 | 371 | ||
| 372 | config_group_init_type_name(&simple_children->group, name, | 372 | config_group_init_type_name(&simple_children->group, name, |
diff --git a/Documentation/filesystems/nfs-rdma.txt b/Documentation/filesystems/nfs-rdma.txt index d0ec45ae4e7d..44bd766f2e5d 100644 --- a/Documentation/filesystems/nfs-rdma.txt +++ b/Documentation/filesystems/nfs-rdma.txt | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ################################################################################ | 5 | ################################################################################ |
| 6 | 6 | ||
| 7 | Author: NetApp and Open Grid Computing | 7 | Author: NetApp and Open Grid Computing |
| 8 | Date: April 15, 2008 | 8 | Date: May 29, 2008 |
| 9 | 9 | ||
| 10 | Table of Contents | 10 | Table of Contents |
| 11 | ~~~~~~~~~~~~~~~~~ | 11 | ~~~~~~~~~~~~~~~~~ |
| @@ -60,16 +60,18 @@ Installation | |||
| 60 | The procedures described in this document have been tested with | 60 | The procedures described in this document have been tested with |
| 61 | distributions from Red Hat's Fedora Project (http://fedora.redhat.com/). | 61 | distributions from Red Hat's Fedora Project (http://fedora.redhat.com/). |
| 62 | 62 | ||
| 63 | - Install nfs-utils-1.1.1 or greater on the client | 63 | - Install nfs-utils-1.1.2 or greater on the client |
| 64 | 64 | ||
| 65 | An NFS/RDMA mount point can only be obtained by using the mount.nfs | 65 | An NFS/RDMA mount point can be obtained by using the mount.nfs command in |
| 66 | command in nfs-utils-1.1.1 or greater. To see which version of mount.nfs | 66 | nfs-utils-1.1.2 or greater (nfs-utils-1.1.1 was the first nfs-utils |
| 67 | you are using, type: | 67 | version with support for NFS/RDMA mounts, but for various reasons we |
| 68 | recommend using nfs-utils-1.1.2 or greater). To see which version of | ||
| 69 | mount.nfs you are using, type: | ||
| 68 | 70 | ||
| 69 | > /sbin/mount.nfs -V | 71 | $ /sbin/mount.nfs -V |
| 70 | 72 | ||
| 71 | If the version is less than 1.1.1 or the command does not exist, | 73 | If the version is less than 1.1.2 or the command does not exist, |
| 72 | then you will need to install the latest version of nfs-utils. | 74 | you should install the latest version of nfs-utils. |
| 73 | 75 | ||
| 74 | Download the latest package from: | 76 | Download the latest package from: |
| 75 | 77 | ||
| @@ -77,22 +79,33 @@ Installation | |||
| 77 | 79 | ||
| 78 | Uncompress the package and follow the installation instructions. | 80 | Uncompress the package and follow the installation instructions. |
| 79 | 81 | ||
| 80 | If you will not be using GSS and NFSv4, the installation process | 82 | If you will not need the idmapper and gssd executables (you do not need |
| 81 | can be simplified by disabling these features when running configure: | 83 | these to create an NFS/RDMA enabled mount command), the installation |
| 84 | process can be simplified by disabling these features when running | ||
| 85 | configure: | ||
| 82 | 86 | ||
| 83 | > ./configure --disable-gss --disable-nfsv4 | 87 | $ ./configure --disable-gss --disable-nfsv4 |
| 84 | 88 | ||
| 85 | For more information on this see the package's README and INSTALL files. | 89 | To build nfs-utils you will need the tcp_wrappers package installed. For |
| 90 | more information on this see the package's README and INSTALL files. | ||
| 86 | 91 | ||
| 87 | After building the nfs-utils package, there will be a mount.nfs binary in | 92 | After building the nfs-utils package, there will be a mount.nfs binary in |
| 88 | the utils/mount directory. This binary can be used to initiate NFS v2, v3, | 93 | the utils/mount directory. This binary can be used to initiate NFS v2, v3, |
| 89 | or v4 mounts. To initiate a v4 mount, the binary must be called mount.nfs4. | 94 | or v4 mounts. To initiate a v4 mount, the binary must be called |
| 90 | The standard technique is to create a symlink called mount.nfs4 to mount.nfs. | 95 | mount.nfs4. The standard technique is to create a symlink called |
| 96 | mount.nfs4 to mount.nfs. | ||
| 91 | 97 | ||
| 92 | NOTE: mount.nfs and therefore nfs-utils-1.1.1 or greater is only needed | 98 | This mount.nfs binary should be installed at /sbin/mount.nfs as follows: |
| 99 | |||
| 100 | $ sudo cp utils/mount/mount.nfs /sbin/mount.nfs | ||
| 101 | |||
| 102 | In this location, mount.nfs will be invoked automatically for NFS mounts | ||
| 103 | by the system mount commmand. | ||
| 104 | |||
| 105 | NOTE: mount.nfs and therefore nfs-utils-1.1.2 or greater is only needed | ||
| 93 | on the NFS client machine. You do not need this specific version of | 106 | on the NFS client machine. You do not need this specific version of |
| 94 | nfs-utils on the server. Furthermore, only the mount.nfs command from | 107 | nfs-utils on the server. Furthermore, only the mount.nfs command from |
| 95 | nfs-utils-1.1.1 is needed on the client. | 108 | nfs-utils-1.1.2 is needed on the client. |
| 96 | 109 | ||
| 97 | - Install a Linux kernel with NFS/RDMA | 110 | - Install a Linux kernel with NFS/RDMA |
| 98 | 111 | ||
| @@ -156,8 +169,8 @@ Check RDMA and NFS Setup | |||
| 156 | this time. For example, if you are using a Mellanox Tavor/Sinai/Arbel | 169 | this time. For example, if you are using a Mellanox Tavor/Sinai/Arbel |
| 157 | card: | 170 | card: |
| 158 | 171 | ||
| 159 | > modprobe ib_mthca | 172 | $ modprobe ib_mthca |
| 160 | > modprobe ib_ipoib | 173 | $ modprobe ib_ipoib |
| 161 | 174 | ||
| 162 | If you are using InfiniBand, make sure there is a Subnet Manager (SM) | 175 | If you are using InfiniBand, make sure there is a Subnet Manager (SM) |
| 163 | running on the network. If your IB switch has an embedded SM, you can | 176 | running on the network. If your IB switch has an embedded SM, you can |
| @@ -166,7 +179,7 @@ Check RDMA and NFS Setup | |||
| 166 | 179 | ||
| 167 | If an SM is running on your network, you should see the following: | 180 | If an SM is running on your network, you should see the following: |
| 168 | 181 | ||
| 169 | > cat /sys/class/infiniband/driverX/ports/1/state | 182 | $ cat /sys/class/infiniband/driverX/ports/1/state |
| 170 | 4: ACTIVE | 183 | 4: ACTIVE |
| 171 | 184 | ||
| 172 | where driverX is mthca0, ipath5, ehca3, etc. | 185 | where driverX is mthca0, ipath5, ehca3, etc. |
| @@ -174,10 +187,10 @@ Check RDMA and NFS Setup | |||
| 174 | To further test the InfiniBand software stack, use IPoIB (this | 187 | To further test the InfiniBand software stack, use IPoIB (this |
| 175 | assumes you have two IB hosts named host1 and host2): | 188 | assumes you have two IB hosts named host1 and host2): |
| 176 | 189 | ||
| 177 | host1> ifconfig ib0 a.b.c.x | 190 | host1$ ifconfig ib0 a.b.c.x |
| 178 | host2> ifconfig ib0 a.b.c.y | 191 | host2$ ifconfig ib0 a.b.c.y |
| 179 | host1> ping a.b.c.y | 192 | host1$ ping a.b.c.y |
| 180 | host2> ping a.b.c.x | 193 | host2$ ping a.b.c.x |
| 181 | 194 | ||
| 182 | For other device types, follow the appropriate procedures. | 195 | For other device types, follow the appropriate procedures. |
| 183 | 196 | ||
| @@ -202,11 +215,11 @@ NFS/RDMA Setup | |||
| 202 | /vol0 192.168.0.47(fsid=0,rw,async,insecure,no_root_squash) | 215 | /vol0 192.168.0.47(fsid=0,rw,async,insecure,no_root_squash) |
| 203 | /vol0 192.168.0.0/255.255.255.0(fsid=0,rw,async,insecure,no_root_squash) | 216 | /vol0 192.168.0.0/255.255.255.0(fsid=0,rw,async,insecure,no_root_squash) |
| 204 | 217 | ||
| 205 | The IP address(es) is(are) the client's IPoIB address for an InfiniBand HCA or the | 218 | The IP address(es) is(are) the client's IPoIB address for an InfiniBand |
| 206 | cleint's iWARP address(es) for an RNIC. | 219 | HCA or the cleint's iWARP address(es) for an RNIC. |
| 207 | 220 | ||
| 208 | NOTE: The "insecure" option must be used because the NFS/RDMA client does not | 221 | NOTE: The "insecure" option must be used because the NFS/RDMA client does |
| 209 | use a reserved port. | 222 | not use a reserved port. |
| 210 | 223 | ||
| 211 | Each time a machine boots: | 224 | Each time a machine boots: |
| 212 | 225 | ||
| @@ -214,43 +227,45 @@ NFS/RDMA Setup | |||
| 214 | 227 | ||
| 215 | For InfiniBand using a Mellanox adapter: | 228 | For InfiniBand using a Mellanox adapter: |
| 216 | 229 | ||
| 217 | > modprobe ib_mthca | 230 | $ modprobe ib_mthca |
| 218 | > modprobe ib_ipoib | 231 | $ modprobe ib_ipoib |
| 219 | > ifconfig ib0 a.b.c.d | 232 | $ ifconfig ib0 a.b.c.d |
| 220 | 233 | ||
| 221 | NOTE: use unique addresses for the client and server | 234 | NOTE: use unique addresses for the client and server |
| 222 | 235 | ||
| 223 | - Start the NFS server | 236 | - Start the NFS server |
| 224 | 237 | ||
| 225 | If the NFS/RDMA server was built as a module (CONFIG_SUNRPC_XPRT_RDMA=m in kernel config), | 238 | If the NFS/RDMA server was built as a module (CONFIG_SUNRPC_XPRT_RDMA=m in |
| 226 | load the RDMA transport module: | 239 | kernel config), load the RDMA transport module: |
| 227 | 240 | ||
| 228 | > modprobe svcrdma | 241 | $ modprobe svcrdma |
| 229 | 242 | ||
| 230 | Regardless of how the server was built (module or built-in), start the server: | 243 | Regardless of how the server was built (module or built-in), start the |
| 244 | server: | ||
| 231 | 245 | ||
| 232 | > /etc/init.d/nfs start | 246 | $ /etc/init.d/nfs start |
| 233 | 247 | ||
| 234 | or | 248 | or |
| 235 | 249 | ||
| 236 | > service nfs start | 250 | $ service nfs start |
| 237 | 251 | ||
| 238 | Instruct the server to listen on the RDMA transport: | 252 | Instruct the server to listen on the RDMA transport: |
| 239 | 253 | ||
| 240 | > echo rdma 2050 > /proc/fs/nfsd/portlist | 254 | $ echo rdma 2050 > /proc/fs/nfsd/portlist |
| 241 | 255 | ||
| 242 | - On the client system | 256 | - On the client system |
| 243 | 257 | ||
| 244 | If the NFS/RDMA client was built as a module (CONFIG_SUNRPC_XPRT_RDMA=m in kernel config), | 258 | If the NFS/RDMA client was built as a module (CONFIG_SUNRPC_XPRT_RDMA=m in |
| 245 | load the RDMA client module: | 259 | kernel config), load the RDMA client module: |
| 246 | 260 | ||
| 247 | > modprobe xprtrdma.ko | 261 | $ modprobe xprtrdma.ko |
| 248 | 262 | ||
| 249 | Regardless of how the client was built (module or built-in), issue the mount.nfs command: | 263 | Regardless of how the client was built (module or built-in), use this |
| 264 | command to mount the NFS/RDMA server: | ||
| 250 | 265 | ||
| 251 | > /path/to/your/mount.nfs <IPoIB-server-name-or-address>:/<export> /mnt -i -o rdma,port=2050 | 266 | $ mount -o rdma,port=2050 <IPoIB-server-name-or-address>:/<export> /mnt |
| 252 | 267 | ||
| 253 | To verify that the mount is using RDMA, run "cat /proc/mounts" and check the | 268 | To verify that the mount is using RDMA, run "cat /proc/mounts" and check |
| 254 | "proto" field for the given mount. | 269 | the "proto" field for the given mount. |
| 255 | 270 | ||
| 256 | Congratulations! You're using NFS/RDMA! | 271 | Congratulations! You're using NFS/RDMA! |
diff --git a/Documentation/filesystems/ubifs.txt b/Documentation/filesystems/ubifs.txt new file mode 100644 index 000000000000..540e9e7f59c5 --- /dev/null +++ b/Documentation/filesystems/ubifs.txt | |||
| @@ -0,0 +1,164 @@ | |||
| 1 | Introduction | ||
| 2 | ============= | ||
| 3 | |||
| 4 | UBIFS file-system stands for UBI File System. UBI stands for "Unsorted | ||
| 5 | Block Images". UBIFS is a flash file system, which means it is designed | ||
| 6 | to work with flash devices. It is important to understand, that UBIFS | ||
| 7 | is completely different to any traditional file-system in Linux, like | ||
| 8 | Ext2, XFS, JFS, etc. UBIFS represents a separate class of file-systems | ||
| 9 | which work with MTD devices, not block devices. The other Linux | ||
| 10 | file-system of this class is JFFS2. | ||
| 11 | |||
| 12 | To make it more clear, here is a small comparison of MTD devices and | ||
| 13 | block devices. | ||
| 14 | |||
| 15 | 1 MTD devices represent flash devices and they consist of eraseblocks of | ||
| 16 | rather large size, typically about 128KiB. Block devices consist of | ||
| 17 | small blocks, typically 512 bytes. | ||
| 18 | 2 MTD devices support 3 main operations - read from some offset within an | ||
| 19 | eraseblock, write to some offset within an eraseblock, and erase a whole | ||
| 20 | eraseblock. Block devices support 2 main operations - read a whole | ||
| 21 | block and write a whole block. | ||
| 22 | 3 The whole eraseblock has to be erased before it becomes possible to | ||
| 23 | re-write its contents. Blocks may be just re-written. | ||
| 24 | 4 Eraseblocks become worn out after some number of erase cycles - | ||
| 25 | typically 100K-1G for SLC NAND and NOR flashes, and 1K-10K for MLC | ||
| 26 | NAND flashes. Blocks do not have the wear-out property. | ||
| 27 | 5 Eraseblocks may become bad (only on NAND flashes) and software should | ||
| 28 | deal with this. Blocks on hard drives typically do not become bad, | ||
| 29 | because hardware has mechanisms to substitute bad blocks, at least in | ||
| 30 | modern LBA disks. | ||
| 31 | |||
| 32 | It should be quite obvious why UBIFS is very different to traditional | ||
| 33 | file-systems. | ||
| 34 | |||
| 35 | UBIFS works on top of UBI. UBI is a separate software layer which may be | ||
| 36 | found in drivers/mtd/ubi. UBI is basically a volume management and | ||
| 37 | wear-leveling layer. It provides so called UBI volumes which is a higher | ||
| 38 | level abstraction than a MTD device. The programming model of UBI devices | ||
| 39 | is very similar to MTD devices - they still consist of large eraseblocks, | ||
| 40 | they have read/write/erase operations, but UBI devices are devoid of | ||
| 41 | limitations like wear and bad blocks (items 4 and 5 in the above list). | ||
| 42 | |||
| 43 | In a sense, UBIFS is a next generation of JFFS2 file-system, but it is | ||
| 44 | very different and incompatible to JFFS2. The following are the main | ||
| 45 | differences. | ||
| 46 | |||
| 47 | * JFFS2 works on top of MTD devices, UBIFS depends on UBI and works on | ||
| 48 | top of UBI volumes. | ||
| 49 | * JFFS2 does not have on-media index and has to build it while mounting, | ||
| 50 | which requires full media scan. UBIFS maintains the FS indexing | ||
| 51 | information on the flash media and does not require full media scan, | ||
| 52 | so it mounts many times faster than JFFS2. | ||
| 53 | * JFFS2 is a write-through file-system, while UBIFS supports write-back, | ||
| 54 | which makes UBIFS much faster on writes. | ||
| 55 | |||
| 56 | Similarly to JFFS2, UBIFS supports on-the-flight compression which makes | ||
| 57 | it possible to fit quite a lot of data to the flash. | ||
| 58 | |||
| 59 | Similarly to JFFS2, UBIFS is tolerant of unclean reboots and power-cuts. | ||
| 60 | It does not need stuff like ckfs.ext2. UBIFS automatically replays its | ||
| 61 | journal and recovers from crashes, ensuring that the on-flash data | ||
| 62 | structures are consistent. | ||
| 63 | |||
| 64 | UBIFS scales logarithmically (most of the data structures it uses are | ||
| 65 | trees), so the mount time and memory consumption do not linearly depend | ||
| 66 | on the flash size, like in case of JFFS2. This is because UBIFS | ||
| 67 | maintains the FS index on the flash media. However, UBIFS depends on | ||
| 68 | UBI, which scales linearly. So overall UBI/UBIFS stack scales linearly. | ||
| 69 | Nevertheless, UBI/UBIFS scales considerably better than JFFS2. | ||
| 70 | |||
| 71 | The authors of UBIFS believe, that it is possible to develop UBI2 which | ||
| 72 | would scale logarithmically as well. UBI2 would support the same API as UBI, | ||
| 73 | but it would be binary incompatible to UBI. So UBIFS would not need to be | ||
| 74 | changed to use UBI2 | ||
| 75 | |||
| 76 | |||
| 77 | Mount options | ||
| 78 | ============= | ||
| 79 | |||
| 80 | (*) == default. | ||
| 81 | |||
| 82 | norm_unmount (*) commit on unmount; the journal is committed | ||
| 83 | when the file-system is unmounted so that the | ||
| 84 | next mount does not have to replay the journal | ||
| 85 | and it becomes very fast; | ||
| 86 | fast_unmount do not commit on unmount; this option makes | ||
| 87 | unmount faster, but the next mount slower | ||
| 88 | because of the need to replay the journal. | ||
| 89 | |||
| 90 | |||
| 91 | Quick usage instructions | ||
| 92 | ======================== | ||
| 93 | |||
| 94 | The UBI volume to mount is specified using "ubiX_Y" or "ubiX:NAME" syntax, | ||
| 95 | where "X" is UBI device number, "Y" is UBI volume number, and "NAME" is | ||
| 96 | UBI volume name. | ||
| 97 | |||
| 98 | Mount volume 0 on UBI device 0 to /mnt/ubifs: | ||
| 99 | $ mount -t ubifs ubi0_0 /mnt/ubifs | ||
| 100 | |||
| 101 | Mount "rootfs" volume of UBI device 0 to /mnt/ubifs ("rootfs" is volume | ||
| 102 | name): | ||
| 103 | $ mount -t ubifs ubi0:rootfs /mnt/ubifs | ||
| 104 | |||
| 105 | The following is an example of the kernel boot arguments to attach mtd0 | ||
| 106 | to UBI and mount volume "rootfs": | ||
| 107 | ubi.mtd=0 root=ubi0:rootfs rootfstype=ubifs | ||
| 108 | |||
| 109 | |||
| 110 | Module Parameters for Debugging | ||
| 111 | =============================== | ||
| 112 | |||
| 113 | When UBIFS has been compiled with debugging enabled, there are 3 module | ||
| 114 | parameters that are available to control aspects of testing and debugging. | ||
| 115 | The parameters are unsigned integers where each bit controls an option. | ||
| 116 | The parameters are: | ||
| 117 | |||
| 118 | debug_msgs Selects which debug messages to display, as follows: | ||
| 119 | |||
| 120 | Message Type Flag value | ||
| 121 | |||
| 122 | General messages 1 | ||
| 123 | Journal messages 2 | ||
| 124 | Mount messages 4 | ||
| 125 | Commit messages 8 | ||
| 126 | LEB search messages 16 | ||
| 127 | Budgeting messages 32 | ||
| 128 | Garbage collection messages 64 | ||
| 129 | Tree Node Cache (TNC) messages 128 | ||
| 130 | LEB properties (lprops) messages 256 | ||
| 131 | Input/output messages 512 | ||
| 132 | Log messages 1024 | ||
| 133 | Scan messages 2048 | ||
| 134 | Recovery messages 4096 | ||
| 135 | |||
| 136 | debug_chks Selects extra checks that UBIFS can do while running: | ||
| 137 | |||
| 138 | Check Flag value | ||
| 139 | |||
| 140 | General checks 1 | ||
| 141 | Check Tree Node Cache (TNC) 2 | ||
| 142 | Check indexing tree size 4 | ||
| 143 | Check orphan area 8 | ||
| 144 | Check old indexing tree 16 | ||
| 145 | Check LEB properties (lprops) 32 | ||
| 146 | Check leaf nodes and inodes 64 | ||
| 147 | |||
| 148 | debug_tsts Selects a mode of testing, as follows: | ||
| 149 | |||
| 150 | Test mode Flag value | ||
| 151 | |||
| 152 | Force in-the-gaps method 2 | ||
| 153 | Failure mode for recovery testing 4 | ||
| 154 | |||
| 155 | For example, set debug_msgs to 5 to display General messages and Mount | ||
| 156 | messages. | ||
| 157 | |||
| 158 | |||
| 159 | References | ||
| 160 | ========== | ||
| 161 | |||
| 162 | UBIFS documentation and FAQ/HOWTO at the MTD web site: | ||
| 163 | http://www.linux-mtd.infradead.org/doc/ubifs.html | ||
| 164 | http://www.linux-mtd.infradead.org/faq/ubifs.html | ||
