~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/filesystems/index.rst

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/filesystems/index.rst (Version linux-6.11.5) and /Documentation/filesystems/index.rst (Version linux-4.19.322)


  1 .. _filesystems_index:                         !!   1 =====================
                                                   >>   2 Linux Filesystems API
                                                   >>   3 =====================
  2                                                     4 
  3 ===============================                !!   5 The Linux VFS
  4 Filesystems in the Linux kernel                !!   6 =============
  5 ===============================                << 
  6                                                << 
  7 This under-development manual will, some glori << 
  8 comprehensive information on how the Linux vir << 
  9 works, along with the filesystems that sit bel << 
 10 can be found below.                            << 
 11                                                     7 
 12 Core VFS documentation                         !!   8 The Filesystem types
 13 ======================                         !!   9 --------------------
 14                                                    10 
 15 See these manuals for documentation about the  !!  11 .. kernel-doc:: include/linux/fs.h
 16 algorithms work.                               !!  12    :internal:
 17                                                    13 
 18 .. toctree::                                   !!  14 The Directory Cache
 19    :maxdepth: 2                                !!  15 -------------------
                                                   >>  16 
                                                   >>  17 .. kernel-doc:: fs/dcache.c
                                                   >>  18    :export:
                                                   >>  19 
                                                   >>  20 .. kernel-doc:: include/linux/dcache.h
                                                   >>  21    :internal:
                                                   >>  22 
                                                   >>  23 Inode Handling
                                                   >>  24 --------------
                                                   >>  25 
                                                   >>  26 .. kernel-doc:: fs/inode.c
                                                   >>  27    :export:
                                                   >>  28 
                                                   >>  29 .. kernel-doc:: fs/bad_inode.c
                                                   >>  30    :export:
                                                   >>  31 
                                                   >>  32 Registration and Superblocks
                                                   >>  33 ----------------------------
                                                   >>  34 
                                                   >>  35 .. kernel-doc:: fs/super.c
                                                   >>  36    :export:
                                                   >>  37 
                                                   >>  38 File Locks
                                                   >>  39 ----------
                                                   >>  40 
                                                   >>  41 .. kernel-doc:: fs/locks.c
                                                   >>  42    :export:
                                                   >>  43 
                                                   >>  44 .. kernel-doc:: fs/locks.c
                                                   >>  45    :internal:
                                                   >>  46 
                                                   >>  47 Other Functions
                                                   >>  48 ---------------
                                                   >>  49 
                                                   >>  50 .. kernel-doc:: fs/mpage.c
                                                   >>  51    :export:
                                                   >>  52 
                                                   >>  53 .. kernel-doc:: fs/namei.c
                                                   >>  54    :export:
                                                   >>  55 
                                                   >>  56 .. kernel-doc:: fs/buffer.c
                                                   >>  57    :export:
                                                   >>  58 
                                                   >>  59 .. kernel-doc:: block/bio.c
                                                   >>  60    :export:
                                                   >>  61 
                                                   >>  62 .. kernel-doc:: fs/seq_file.c
                                                   >>  63    :export:
                                                   >>  64 
                                                   >>  65 .. kernel-doc:: fs/filesystems.c
                                                   >>  66    :export:
                                                   >>  67 
                                                   >>  68 .. kernel-doc:: fs/fs-writeback.c
                                                   >>  69    :export:
                                                   >>  70 
                                                   >>  71 .. kernel-doc:: fs/block_dev.c
                                                   >>  72    :export:
                                                   >>  73 
                                                   >>  74 .. kernel-doc:: fs/anon_inodes.c
                                                   >>  75    :export:
                                                   >>  76 
                                                   >>  77 .. kernel-doc:: fs/attr.c
                                                   >>  78    :export:
 20                                                    79 
 21    vfs                                         !!  80 .. kernel-doc:: fs/d_path.c
 22    path-lookup                                 !!  81    :export:
 23    api-summary                                 << 
 24    splice                                      << 
 25    locking                                     << 
 26    directory-locking                           << 
 27    devpts                                      << 
 28    dnotify                                     << 
 29    fiemap                                      << 
 30    files                                       << 
 31    locks                                       << 
 32    mount_api                                   << 
 33    quota                                       << 
 34    seq_file                                    << 
 35    sharedsubtree                               << 
 36    idmappings                                  << 
 37    iomap/index                                 << 
 38                                                    82 
 39    automount-support                           !!  83 .. kernel-doc:: fs/dax.c
                                                   >>  84    :export:
 40                                                    85 
 41    caching/index                               !!  86 .. kernel-doc:: fs/direct-io.c
                                                   >>  87    :export:
 42                                                    88 
 43    porting                                     !!  89 .. kernel-doc:: fs/file_table.c
                                                   >>  90    :export:
 44                                                    91 
 45 Filesystem support layers                      !!  92 .. kernel-doc:: fs/libfs.c
                                                   >>  93    :export:
                                                   >>  94 
                                                   >>  95 .. kernel-doc:: fs/posix_acl.c
                                                   >>  96    :export:
                                                   >>  97 
                                                   >>  98 .. kernel-doc:: fs/stat.c
                                                   >>  99    :export:
                                                   >> 100 
                                                   >> 101 .. kernel-doc:: fs/sync.c
                                                   >> 102    :export:
                                                   >> 103 
                                                   >> 104 .. kernel-doc:: fs/xattr.c
                                                   >> 105    :export:
                                                   >> 106 
                                                   >> 107 The proc filesystem
                                                   >> 108 ===================
                                                   >> 109 
                                                   >> 110 sysctl interface
                                                   >> 111 ----------------
                                                   >> 112 
                                                   >> 113 .. kernel-doc:: kernel/sysctl.c
                                                   >> 114    :export:
                                                   >> 115 
                                                   >> 116 proc filesystem interface
                                                   >> 117 -------------------------
                                                   >> 118 
                                                   >> 119 .. kernel-doc:: fs/proc/base.c
                                                   >> 120    :internal:
                                                   >> 121 
                                                   >> 122 Events based on file descriptors
                                                   >> 123 ================================
                                                   >> 124 
                                                   >> 125 .. kernel-doc:: fs/eventfd.c
                                                   >> 126    :export:
                                                   >> 127 
                                                   >> 128 The Filesystem for Exporting Kernel Objects
                                                   >> 129 ===========================================
                                                   >> 130 
                                                   >> 131 .. kernel-doc:: fs/sysfs/file.c
                                                   >> 132    :export:
                                                   >> 133 
                                                   >> 134 .. kernel-doc:: fs/sysfs/symlink.c
                                                   >> 135    :export:
                                                   >> 136 
                                                   >> 137 The debugfs filesystem
                                                   >> 138 ======================
                                                   >> 139 
                                                   >> 140 debugfs interface
                                                   >> 141 -----------------
                                                   >> 142 
                                                   >> 143 .. kernel-doc:: fs/debugfs/inode.c
                                                   >> 144    :export:
                                                   >> 145 
                                                   >> 146 .. kernel-doc:: fs/debugfs/file.c
                                                   >> 147    :export:
                                                   >> 148 
                                                   >> 149 The Linux Journalling API
 46 =========================                         150 =========================
 47                                                   151 
 48 Documentation for the support code within the  !! 152 Overview
 49 filesystem implementations.                    !! 153 --------
 50                                                   154 
 51 .. toctree::                                   !! 155 Details
 52    :maxdepth: 2                                !! 156 ~~~~~~~
                                                   >> 157 
                                                   >> 158 The journalling layer is easy to use. You need to first of all create a
                                                   >> 159 journal_t data structure. There are two calls to do this dependent on
                                                   >> 160 how you decide to allocate the physical media on which the journal
                                                   >> 161 resides. The :c:func:`jbd2_journal_init_inode` call is for journals stored in
                                                   >> 162 filesystem inodes, or the :c:func:`jbd2_journal_init_dev` call can be used
                                                   >> 163 for journal stored on a raw device (in a continuous range of blocks). A
                                                   >> 164 journal_t is a typedef for a struct pointer, so when you are finally
                                                   >> 165 finished make sure you call :c:func:`jbd2_journal_destroy` on it to free up
                                                   >> 166 any used kernel memory.
                                                   >> 167 
                                                   >> 168 Once you have got your journal_t object you need to 'mount' or load the
                                                   >> 169 journal file. The journalling layer expects the space for the journal
                                                   >> 170 was already allocated and initialized properly by the userspace tools.
                                                   >> 171 When loading the journal you must call :c:func:`jbd2_journal_load` to process
                                                   >> 172 journal contents. If the client file system detects the journal contents
                                                   >> 173 does not need to be processed (or even need not have valid contents), it
                                                   >> 174 may call :c:func:`jbd2_journal_wipe` to clear the journal contents before
                                                   >> 175 calling :c:func:`jbd2_journal_load`.
                                                   >> 176 
                                                   >> 177 Note that jbd2_journal_wipe(..,0) calls
                                                   >> 178 :c:func:`jbd2_journal_skip_recovery` for you if it detects any outstanding
                                                   >> 179 transactions in the journal and similarly :c:func:`jbd2_journal_load` will
                                                   >> 180 call :c:func:`jbd2_journal_recover` if necessary. I would advise reading
                                                   >> 181 :c:func:`ext4_load_journal` in fs/ext4/super.c for examples on this stage.
                                                   >> 182 
                                                   >> 183 Now you can go ahead and start modifying the underlying filesystem.
                                                   >> 184 Almost.
                                                   >> 185 
                                                   >> 186 You still need to actually journal your filesystem changes, this is done
                                                   >> 187 by wrapping them into transactions. Additionally you also need to wrap
                                                   >> 188 the modification of each of the buffers with calls to the journal layer,
                                                   >> 189 so it knows what the modifications you are actually making are. To do
                                                   >> 190 this use :c:func:`jbd2_journal_start` which returns a transaction handle.
                                                   >> 191 
                                                   >> 192 :c:func:`jbd2_journal_start` and its counterpart :c:func:`jbd2_journal_stop`,
                                                   >> 193 which indicates the end of a transaction are nestable calls, so you can
                                                   >> 194 reenter a transaction if necessary, but remember you must call
                                                   >> 195 :c:func:`jbd2_journal_stop` the same number of times as
                                                   >> 196 :c:func:`jbd2_journal_start` before the transaction is completed (or more
                                                   >> 197 accurately leaves the update phase). Ext4/VFS makes use of this feature to
                                                   >> 198 simplify handling of inode dirtying, quota support, etc.
                                                   >> 199 
                                                   >> 200 Inside each transaction you need to wrap the modifications to the
                                                   >> 201 individual buffers (blocks). Before you start to modify a buffer you
                                                   >> 202 need to call :c:func:`jbd2_journal_get_create_access()` /
                                                   >> 203 :c:func:`jbd2_journal_get_write_access()` /
                                                   >> 204 :c:func:`jbd2_journal_get_undo_access()` as appropriate, this allows the
                                                   >> 205 journalling layer to copy the unmodified
                                                   >> 206 data if it needs to. After all the buffer may be part of a previously
                                                   >> 207 uncommitted transaction. At this point you are at last ready to modify a
                                                   >> 208 buffer, and once you are have done so you need to call
                                                   >> 209 :c:func:`jbd2_journal_dirty_metadata`. Or if you've asked for access to a
                                                   >> 210 buffer you now know is now longer required to be pushed back on the
                                                   >> 211 device you can call :c:func:`jbd2_journal_forget` in much the same way as you
                                                   >> 212 might have used :c:func:`bforget` in the past.
                                                   >> 213 
                                                   >> 214 A :c:func:`jbd2_journal_flush` may be called at any time to commit and
                                                   >> 215 checkpoint all your transactions.
                                                   >> 216 
                                                   >> 217 Then at umount time , in your :c:func:`put_super` you can then call
                                                   >> 218 :c:func:`jbd2_journal_destroy` to clean up your in-core journal object.
                                                   >> 219 
                                                   >> 220 Unfortunately there a couple of ways the journal layer can cause a
                                                   >> 221 deadlock. The first thing to note is that each task can only have a
                                                   >> 222 single outstanding transaction at any one time, remember nothing commits
                                                   >> 223 until the outermost :c:func:`jbd2_journal_stop`. This means you must complete
                                                   >> 224 the transaction at the end of each file/inode/address etc. operation you
                                                   >> 225 perform, so that the journalling system isn't re-entered on another
                                                   >> 226 journal. Since transactions can't be nested/batched across differing
                                                   >> 227 journals, and another filesystem other than yours (say ext4) may be
                                                   >> 228 modified in a later syscall.
                                                   >> 229 
                                                   >> 230 The second case to bear in mind is that :c:func:`jbd2_journal_start` can block
                                                   >> 231 if there isn't enough space in the journal for your transaction (based
                                                   >> 232 on the passed nblocks param) - when it blocks it merely(!) needs to wait
                                                   >> 233 for transactions to complete and be committed from other tasks, so
                                                   >> 234 essentially we are waiting for :c:func:`jbd2_journal_stop`. So to avoid
                                                   >> 235 deadlocks you must treat :c:func:`jbd2_journal_start` /
                                                   >> 236 :c:func:`jbd2_journal_stop` as if they were semaphores and include them in
                                                   >> 237 your semaphore ordering rules to prevent
                                                   >> 238 deadlocks. Note that :c:func:`jbd2_journal_extend` has similar blocking
                                                   >> 239 behaviour to :c:func:`jbd2_journal_start` so you can deadlock here just as
                                                   >> 240 easily as on :c:func:`jbd2_journal_start`.
                                                   >> 241 
                                                   >> 242 Try to reserve the right number of blocks the first time. ;-). This will
                                                   >> 243 be the maximum number of blocks you are going to touch in this
                                                   >> 244 transaction. I advise having a look at at least ext4_jbd.h to see the
                                                   >> 245 basis on which ext4 uses to make these decisions.
                                                   >> 246 
                                                   >> 247 Another wriggle to watch out for is your on-disk block allocation
                                                   >> 248 strategy. Why? Because, if you do a delete, you need to ensure you
                                                   >> 249 haven't reused any of the freed blocks until the transaction freeing
                                                   >> 250 these blocks commits. If you reused these blocks and crash happens,
                                                   >> 251 there is no way to restore the contents of the reallocated blocks at the
                                                   >> 252 end of the last fully committed transaction. One simple way of doing
                                                   >> 253 this is to mark blocks as free in internal in-memory block allocation
                                                   >> 254 structures only after the transaction freeing them commits. Ext4 uses
                                                   >> 255 journal commit callback for this purpose.
                                                   >> 256 
                                                   >> 257 With journal commit callbacks you can ask the journalling layer to call
                                                   >> 258 a callback function when the transaction is finally committed to disk,
                                                   >> 259 so that you can do some of your own management. You ask the journalling
                                                   >> 260 layer for calling the callback by simply setting
                                                   >> 261 ``journal->j_commit_callback`` function pointer and that function is
                                                   >> 262 called after each transaction commit. You can also use
                                                   >> 263 ``transaction->t_private_list`` for attaching entries to a transaction
                                                   >> 264 that need processing when the transaction commits.
                                                   >> 265 
                                                   >> 266 JBD2 also provides a way to block all transaction updates via
                                                   >> 267 :c:func:`jbd2_journal_lock_updates()` /
                                                   >> 268 :c:func:`jbd2_journal_unlock_updates()`. Ext4 uses this when it wants a
                                                   >> 269 window with a clean and stable fs for a moment. E.g.
                                                   >> 270 
                                                   >> 271 ::
                                                   >> 272 
                                                   >> 273 
                                                   >> 274         jbd2_journal_lock_updates() //stop new stuff happening..
                                                   >> 275         jbd2_journal_flush()        // checkpoint everything.
                                                   >> 276         ..do stuff on stable fs
                                                   >> 277         jbd2_journal_unlock_updates() // carry on with filesystem use.
                                                   >> 278 
                                                   >> 279 The opportunities for abuse and DOS attacks with this should be obvious,
                                                   >> 280 if you allow unprivileged userspace to trigger codepaths containing
                                                   >> 281 these calls.
                                                   >> 282 
                                                   >> 283 Summary
                                                   >> 284 ~~~~~~~
                                                   >> 285 
                                                   >> 286 Using the journal is a matter of wrapping the different context changes,
                                                   >> 287 being each mount, each modification (transaction) and each changed
                                                   >> 288 buffer to tell the journalling layer about them.
                                                   >> 289 
                                                   >> 290 Data Types
                                                   >> 291 ----------
                                                   >> 292 
                                                   >> 293 The journalling layer uses typedefs to 'hide' the concrete definitions
                                                   >> 294 of the structures used. As a client of the JBD2 layer you can just rely
                                                   >> 295 on the using the pointer as a magic cookie of some sort. Obviously the
                                                   >> 296 hiding is not enforced as this is 'C'.
                                                   >> 297 
                                                   >> 298 Structures
                                                   >> 299 ~~~~~~~~~~
                                                   >> 300 
                                                   >> 301 .. kernel-doc:: include/linux/jbd2.h
                                                   >> 302    :internal:
                                                   >> 303 
                                                   >> 304 Functions
                                                   >> 305 ---------
                                                   >> 306 
                                                   >> 307 The functions here are split into two groups those that affect a journal
                                                   >> 308 as a whole, and those which are used to manage transactions
                                                   >> 309 
                                                   >> 310 Journal Level
                                                   >> 311 ~~~~~~~~~~~~~
                                                   >> 312 
                                                   >> 313 .. kernel-doc:: fs/jbd2/journal.c
                                                   >> 314    :export:
                                                   >> 315 
                                                   >> 316 .. kernel-doc:: fs/jbd2/recovery.c
                                                   >> 317    :internal:
                                                   >> 318 
                                                   >> 319 Transasction Level
                                                   >> 320 ~~~~~~~~~~~~~~~~~~
                                                   >> 321 
                                                   >> 322 .. kernel-doc:: fs/jbd2/transaction.c
                                                   >> 323 
                                                   >> 324 See also
                                                   >> 325 --------
                                                   >> 326 
                                                   >> 327 `Journaling the Linux ext2fs Filesystem, LinuxExpo 98, Stephen
                                                   >> 328 Tweedie <http://kernel.org/pub/linux/kernel/people/sct/ext3/journal-design.ps.gz>`__
                                                   >> 329 
                                                   >> 330 `Ext3 Journalling FileSystem, OLS 2000, Dr. Stephen
                                                   >> 331 Tweedie <http://olstrans.sourceforge.net/release/OLS2000-ext3/OLS2000-ext3.html>`__
                                                   >> 332 
                                                   >> 333 splice API
                                                   >> 334 ==========
                                                   >> 335 
                                                   >> 336 splice is a method for moving blocks of data around inside the kernel,
                                                   >> 337 without continually transferring them between the kernel and user space.
                                                   >> 338 
                                                   >> 339 .. kernel-doc:: fs/splice.c
                                                   >> 340 
                                                   >> 341 pipes API
                                                   >> 342 =========
                                                   >> 343 
                                                   >> 344 Pipe interfaces are all for in-kernel (builtin image) use. They are not
                                                   >> 345 exported for use by modules.
                                                   >> 346 
                                                   >> 347 .. kernel-doc:: include/linux/pipe_fs_i.h
                                                   >> 348    :internal:
 53                                                   349 
 54    buffer                                      !! 350 .. kernel-doc:: fs/pipe.c
 55    journalling                                 << 
 56    fscrypt                                     << 
 57    fsverity                                    << 
 58    netfs_library                               << 
 59                                                   351 
 60 Filesystems                                    !! 352 Encryption API
 61 ===========                                    !! 353 ==============
 62                                                   354 
 63 Documentation for filesystem implementations.  !! 355 A library which filesystems can hook into to support transparent
                                                   >> 356 encryption of files and directories.
 64                                                   357 
 65 .. toctree::                                      358 .. toctree::
 66    :maxdepth: 2                                !! 359     :maxdepth: 2
 67                                                   360 
 68    9p                                          !! 361     fscrypt
 69    adfs                                        << 
 70    affs                                        << 
 71    afs                                         << 
 72    autofs                                      << 
 73    autofs-mount-control                        << 
 74    bcachefs/index                              << 
 75    befs                                        << 
 76    bfs                                         << 
 77    btrfs                                       << 
 78    ceph                                        << 
 79    coda                                        << 
 80    configfs                                    << 
 81    cramfs                                      << 
 82    dax                                         << 
 83    debugfs                                     << 
 84    dlmfs                                       << 
 85    ecryptfs                                    << 
 86    efivarfs                                    << 
 87    erofs                                       << 
 88    ext2                                        << 
 89    ext3                                        << 
 90    ext4/index                                  << 
 91    f2fs                                        << 
 92    gfs2                                        << 
 93    gfs2-uevents                                << 
 94    gfs2-glocks                                 << 
 95    hfs                                         << 
 96    hfsplus                                     << 
 97    hpfs                                        << 
 98    fuse                                        << 
 99    fuse-io                                     << 
100    inotify                                     << 
101    isofs                                       << 
102    nilfs2                                      << 
103    nfs/index                                   << 
104    ntfs3                                       << 
105    ocfs2                                       << 
106    ocfs2-online-filecheck                      << 
107    omfs                                        << 
108    orangefs                                    << 
109    overlayfs                                   << 
110    proc                                        << 
111    qnx6                                        << 
112    ramfs-rootfs-initramfs                      << 
113    relay                                       << 
114    romfs                                       << 
115    smb/index                                   << 
116    spufs/index                                 << 
117    squashfs                                    << 
118    sysfs                                       << 
119    sysv-fs                                     << 
120    tmpfs                                       << 
121    ubifs                                       << 
122    ubifs-authentication                        << 
123    udf                                         << 
124    virtiofs                                    << 
125    vfat                                        << 
126    xfs/index                                   << 
127    zonefs                                      << 
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php