€•ûŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ+/translations/zh_CN/filesystems/journalling”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/zh_TW/filesystems/journalling”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/it_IT/filesystems/journalling”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/ja_JP/filesystems/journalling”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/ko_KR/filesystems/journalling”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/pt_BR/filesystems/journalling”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ+/translations/sp_SP/filesystems/journalling”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒThe Linux Journalling API”h]”hŒThe Linux Journalling API”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒE/var/lib/git/docbuild/linux/Documentation/filesystems/journalling.rst”h´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒOverview”h]”hŒOverview”…”�”}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒDetails”h]”hŒDetails”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhÜh²hh³hÊh´KubhŒ paragraph”“”)�”}”(hXBThe journalling layer is easy to use. You need to first of all create a journal_t data structure. There are two calls to do this dependent on how you decide to allocate the physical media on which the journal resides. The jbd2_journal_init_inode() call is for journals stored in filesystem inodes, or the jbd2_journal_init_dev() call can be used for journal stored on a raw device (in a continuous range of blocks). A journal_t is a typedef for a struct pointer, so when you are finally finished make sure you call jbd2_journal_destroy() on it to free up any used kernel memory.”h]”hXBThe journalling layer is easy to use. You need to first of all create a journal_t data structure. There are two calls to do this dependent on how you decide to allocate the physical media on which the journal resides. The jbd2_journal_init_inode() call is for journals stored in filesystem inodes, or the jbd2_journal_init_dev() call can be used for journal stored on a raw device (in a continuous range of blocks). A journal_t is a typedef for a struct pointer, so when you are finally finished make sure you call jbd2_journal_destroy() on it to free up any used kernel memory.”…”�”}”(hhïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K hhÜh²hubhî)�”}”(hX Once you have got your journal_t object you need to 'mount' or load the journal file. The journalling layer expects the space for the journal was already allocated and initialized properly by the userspace tools. When loading the journal you must call jbd2_journal_load() to process journal contents. If the client file system detects the journal contents does not need to be processed (or even need not have valid contents), it may call jbd2_journal_wipe() to clear the journal contents before calling jbd2_journal_load().”h]”hXOnce you have got your journal_t object you need to ‘mount’ or load the journal file. The journalling layer expects the space for the journal was already allocated and initialized properly by the userspace tools. When loading the journal you must call jbd2_journal_load() to process journal contents. If the client file system detects the journal contents does not need to be processed (or even need not have valid contents), it may call jbd2_journal_wipe() to clear the journal contents before calling jbd2_journal_load().”…”�”}”(hhýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´KhhÜh²hubhî)�”}”(hX1Note that jbd2_journal_wipe(..,0) calls jbd2_journal_skip_recovery() for you if it detects any outstanding transactions in the journal and similarly jbd2_journal_load() will call jbd2_journal_recover() if necessary. I would advise reading ext4_load_journal() in fs/ext4/super.c for examples on this stage.”h]”hX1Note that jbd2_journal_wipe(..,0) calls jbd2_journal_skip_recovery() for you if it detects any outstanding transactions in the journal and similarly jbd2_journal_load() will call jbd2_journal_recover() if necessary. I would advise reading ext4_load_journal() in fs/ext4/super.c for examples on this stage.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´KhhÜh²hubhî)�”}”(hŒKNow you can go ahead and start modifying the underlying filesystem. Almost.”h]”hŒKNow you can go ahead and start modifying the underlying filesystem. Almost.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K#hhÜh²hubhî)�”}”(hX`You still need to actually journal your filesystem changes, this is done by wrapping them into transactions. Additionally you also need to wrap the modification of each of the buffers with calls to the journal layer, so it knows what the modifications you are actually making are. To do this use jbd2_journal_start() which returns a transaction handle.”h]”hX`You still need to actually journal your filesystem changes, this is done by wrapping them into transactions. Additionally you also need to wrap the modification of each of the buffers with calls to the journal layer, so it knows what the modifications you are actually making are. To do this use jbd2_journal_start() which returns a transaction handle.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K&hhÜh²hubhî)�”}”(hXºjbd2_journal_start() and its counterpart jbd2_journal_stop(), which indicates the end of a transaction are nestable calls, so you can reenter a transaction if necessary, but remember you must call jbd2_journal_stop() the same number of times as jbd2_journal_start() before the transaction is completed (or more accurately leaves the update phase). Ext4/VFS makes use of this feature to simplify handling of inode dirtying, quota support, etc.”h]”hXºjbd2_journal_start() and its counterpart jbd2_journal_stop(), which indicates the end of a transaction are nestable calls, so you can reenter a transaction if necessary, but remember you must call jbd2_journal_stop() the same number of times as jbd2_journal_start() before the transaction is completed (or more accurately leaves the update phase). Ext4/VFS makes use of this feature to simplify handling of inode dirtying, quota support, etc.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K,hhÜh²hubhî)�”}”(hXùInside each transaction you need to wrap the modifications to the individual buffers (blocks). Before you start to modify a buffer you need to call jbd2_journal_get_create_access() / jbd2_journal_get_write_access() / jbd2_journal_get_undo_access() as appropriate, this allows the journalling layer to copy the unmodified data if it needs to. After all the buffer may be part of a previously uncommitted transaction. At this point you are at last ready to modify a buffer, and once you are have done so you need to call jbd2_journal_dirty_metadata(). Or if you've asked for access to a buffer you now know is now longer required to be pushed back on the device you can call jbd2_journal_forget() in much the same way as you might have used bforget() in the past.”h]”hXûInside each transaction you need to wrap the modifications to the individual buffers (blocks). Before you start to modify a buffer you need to call jbd2_journal_get_create_access() / jbd2_journal_get_write_access() / jbd2_journal_get_undo_access() as appropriate, this allows the journalling layer to copy the unmodified data if it needs to. After all the buffer may be part of a previously uncommitted transaction. At this point you are at last ready to modify a buffer, and once you are have done so you need to call jbd2_journal_dirty_metadata(). Or if you’ve asked for access to a buffer you now know is now longer required to be pushed back on the device you can call jbd2_journal_forget() in much the same way as you might have used bforget() in the past.”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K4hhÜh²hubhî)�”}”(hŒ`A jbd2_journal_flush() may be called at any time to commit and checkpoint all your transactions.”h]”hŒ`A jbd2_journal_flush() may be called at any time to commit and checkpoint all your transactions.”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´KBhhÜh²hubhî)�”}”(hŒ{Then at umount time , in your put_super() you can then call jbd2_journal_destroy() to clean up your in-core journal object.”h]”hŒ{Then at umount time , in your put_super() you can then call jbd2_journal_destroy() to clean up your in-core journal object.”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´KEhhÜh²hubhî)�”}”(hXHUnfortunately there a couple of ways the journal layer can cause a deadlock. The first thing to note is that each task can only have a single outstanding transaction at any one time, remember nothing commits until the outermost jbd2_journal_stop(). This means you must complete the transaction at the end of each file/inode/address etc. operation you perform, so that the journalling system isn't re-entered on another journal. Since transactions can't be nested/batched across differing journals, and another filesystem other than yours (say ext4) may be modified in a later syscall.”h]”hXLUnfortunately there a couple of ways the journal layer can cause a deadlock. The first thing to note is that each task can only have a single outstanding transaction at any one time, remember nothing commits until the outermost jbd2_journal_stop(). This means you must complete the transaction at the end of each file/inode/address etc. operation you perform, so that the journalling system isn’t re-entered on another journal. Since transactions can’t be nested/batched across differing journals, and another filesystem other than yours (say ext4) may be modified in a later syscall.”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´KHhhÜh²hubhî)�”}”(hX›The second case to bear in mind is that jbd2_journal_start() can block if there isn't enough space in the journal for your transaction (based on the passed nblocks param) - when it blocks it merely(!) needs to wait for transactions to complete and be committed from other tasks, so essentially we are waiting for jbd2_journal_stop(). So to avoid deadlocks you must treat jbd2_journal_start() / jbd2_journal_stop() as if they were semaphores and include them in your semaphore ordering rules to prevent deadlocks. Note that jbd2_journal_extend() has similar blocking behaviour to jbd2_journal_start() so you can deadlock here just as easily as on jbd2_journal_start().”h]”hX�The second case to bear in mind is that jbd2_journal_start() can block if there isn’t enough space in the journal for your transaction (based on the passed nblocks param) - when it blocks it merely(!) needs to wait for transactions to complete and be committed from other tasks, so essentially we are waiting for jbd2_journal_stop(). So to avoid deadlocks you must treat jbd2_journal_start() / jbd2_journal_stop() as if they were semaphores and include them in your semaphore ordering rules to prevent deadlocks. Note that jbd2_journal_extend() has similar blocking behaviour to jbd2_journal_start() so you can deadlock here just as easily as on jbd2_journal_start().”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´KRhhÜh²hubhî)�”}”(hŒÿTry to reserve the right number of blocks the first time. ;-). This will be the maximum number of blocks you are going to touch in this transaction. I advise having a look at at least ext4_jbd.h to see the basis on which ext4 uses to make these decisions.”h]”hŒÿTry to reserve the right number of blocks the first time. ;-). This will be the maximum number of blocks you are going to touch in this transaction. I advise having a look at at least ext4_jbd.h to see the basis on which ext4 uses to make these decisions.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K^hhÜh²hubhî)�”}”(hXQAnother wriggle to watch out for is your on-disk block allocation strategy. Why? Because, if you do a delete, you need to ensure you haven't reused any of the freed blocks until the transaction freeing these blocks commits. If you reused these blocks and crash happens, there is no way to restore the contents of the reallocated blocks at the end of the last fully committed transaction. One simple way of doing this is to mark blocks as free in internal in-memory block allocation structures only after the transaction freeing them commits. Ext4 uses journal commit callback for this purpose.”h]”hXSAnother wriggle to watch out for is your on-disk block allocation strategy. Why? Because, if you do a delete, you need to ensure you haven’t reused any of the freed blocks until the transaction freeing these blocks commits. If you reused these blocks and crash happens, there is no way to restore the contents of the reallocated blocks at the end of the last fully committed transaction. One simple way of doing this is to mark blocks as free in internal in-memory block allocation structures only after the transaction freeing them commits. Ext4 uses journal commit callback for this purpose.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´KchhÜh²hubhî)�”}”(hXrWith journal commit callbacks you can ask the journalling layer to call a callback function when the transaction is finally committed to disk, so that you can do some of your own management. You ask the journalling layer for calling the callback by simply setting ``journal->j_commit_callback`` function pointer and that function is called after each transaction commit.”h]”(hXWith journal commit callbacks you can ask the journalling layer to call a callback function when the transaction is finally committed to disk, so that you can do some of your own management. You ask the journalling layer for calling the callback by simply setting ”…”�”}”(hj¥h²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``journal->j_commit_callback``”h]”hŒjournal->j_commit_callback”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¥ubhŒL function pointer and that function is called after each transaction commit.”…”�”}”(hj¥h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´KmhhÜh²hubhî)�”}”(hŒÎJBD2 also provides a way to block all transaction updates via jbd2_journal_lock_updates() / jbd2_journal_unlock_updates(). Ext4 uses this when it wants a window with a clean and stable fs for a moment. E.g.”h]”hŒÎJBD2 also provides a way to block all transaction updates via jbd2_journal_lock_updates() / jbd2_journal_unlock_updates(). Ext4 uses this when it wants a window with a clean and stable fs for a moment. E.g.”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´KthhÜh²hubhŒ literal_block”“”)�”}”(hŒÅjbd2_journal_lock_updates() //stop new stuff happening.. jbd2_journal_flush() // checkpoint everything. ..do stuff on stable fs jbd2_journal_unlock_updates() // carry on with filesystem use.”h]”hŒÅjbd2_journal_lock_updates() //stop new stuff happening.. jbd2_journal_flush() // checkpoint everything. ..do stuff on stable fs jbd2_journal_unlock_updates() // carry on with filesystem use.”…”�”}”hj×sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jÕh³hÊh´K|hhÜh²hubhî)�”}”(hŒ™The opportunities for abuse and DOS attacks with this should be obvious, if you allow unprivileged userspace to trigger codepaths containing these calls.”h]”hŒ™The opportunities for abuse and DOS attacks with this should be obvious, if you allow unprivileged userspace to trigger codepaths containing these calls.”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K�hhÜh²hubeh}”(h]”Œdetails”ah ]”h"]”Œdetails”ah$]”h&]”uh1hµhhËh²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ Fast commits”h]”hŒ Fast commits”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjýh²hh³hÊh´K†ubhî)�”}”(hŒÄJBD2 to also allows you to perform file-system specific delta commits known as fast commits. In order to use fast commits, you will need to set following callbacks that perform corresponding work:”h]”hŒÄJBD2 to also allows you to perform file-system specific delta commits known as fast commits. In order to use fast commits, you will need to set following callbacks that perform corresponding work:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´Kˆhjýh²hubhî)�”}”(hŒ\`journal->j_fc_cleanup_cb`: Cleanup function called after every full commit and fast commit.”h]”(hŒtitle_reference”“”)�”}”(hŒ`journal->j_fc_cleanup_cb`”h]”hŒjournal->j_fc_cleanup_cb”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhŒB: Cleanup function called after every full commit and fast commit.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´KŒhjýh²hubhî)�”}”(hŒS`journal->j_fc_replay_cb`: Replay function called for replay of fast commit blocks.”h]”(j!)�”}”(hŒ`journal->j_fc_replay_cb`”h]”hŒjournal->j_fc_replay_cb”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj:ubhŒ:: Replay function called for replay of fast commit blocks.”…”�”}”(hj:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K�hjýh²hubhî)�”}”(hXcFile system is free to perform fast commits as and when it wants as long as it gets permission from JBD2 to do so by calling the function :c:func:`jbd2_fc_begin_commit()`. Once a fast commit is done, the client file system should tell JBD2 about it by calling :c:func:`jbd2_fc_end_commit()`. If the file system wants JBD2 to perform a full commit immediately after stopping the fast commit it can do so by calling :c:func:`jbd2_fc_end_commit_fallback()`. This is useful if fast commit operation fails for some reason and the only way to guarantee consistency is for JBD2 to perform the full traditional commit.”h]”(hŒŠFile system is free to perform fast commits as and when it wants as long as it gets permission from JBD2 to do so by calling the function ”…”�”}”(hjVh²hh³Nh´Nubh)�”}”(hŒ :c:func:`jbd2_fc_begin_commit()`”h]”j®)�”}”(hj`h]”hŒjbd2_fc_begin_commit()”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-func”eh"]”h$]”h&]”uh1j­hj^ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œfilesystems/journalling”Œ refdomain”jmŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰Œ reftarget”Œjbd2_fc_begin_commit”uh1hh³hÊh´K’hjVubhŒ[. Once a fast commit is done, the client file system should tell JBD2 about it by calling ”…”�”}”(hjVh²hh³Nh´Nubh)�”}”(hŒ:c:func:`jbd2_fc_end_commit()`”h]”j®)�”}”(hj‡h]”hŒjbd2_fc_end_commit()”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”(jljmŒc-func”eh"]”h$]”h&]”uh1j­hj…ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jyŒ refdomain”jmŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒjbd2_fc_end_commit”uh1hh³hÊh´K’hjVubhŒ|. If the file system wants JBD2 to perform a full commit immediately after stopping the fast commit it can do so by calling ”…”�”}”(hjVh²hh³Nh´Nubh)�”}”(hŒ':c:func:`jbd2_fc_end_commit_fallback()`”h]”j®)�”}”(hjªh]”hŒjbd2_fc_end_commit_fallback()”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”(jljmŒc-func”eh"]”h$]”h&]”uh1j­hj¨ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jyŒ refdomain”jmŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒjbd2_fc_end_commit_fallback”uh1hh³hÊh´K’hjVubhŒ�. This is useful if fast commit operation fails for some reason and the only way to guarantee consistency is for JBD2 to perform the full traditional commit.”…”�”}”(hjVh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K’hjýh²hubhî)�”}”(hŒÄJBD2 helper functions to manage fast commit buffers. File system can use :c:func:`jbd2_fc_get_buf()` and :c:func:`jbd2_fc_wait_bufs()` to allocate and wait on IO completion of fast commit buffers.”h]”(hŒIJBD2 helper functions to manage fast commit buffers. File system can use ”…”�”}”(hjÑh²hh³Nh´Nubh)�”}”(hŒ:c:func:`jbd2_fc_get_buf()`”h]”j®)�”}”(hjÛh]”hŒjbd2_fc_get_buf()”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”(jljmŒc-func”eh"]”h$]”h&]”uh1j­hjÙubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jyŒ refdomain”jmŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒjbd2_fc_get_buf”uh1hh³hÊh´KœhjÑubhŒ and ”…”�”}”(hjÑh²hh³Nh´Nubh)�”}”(hŒ:c:func:`jbd2_fc_wait_bufs()`”h]”j®)�”}”(hjþh]”hŒjbd2_fc_wait_bufs()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jljmŒc-func”eh"]”h$]”h&]”uh1j­hjüubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jyŒ refdomain”jmŒreftype”Œfunc”Œ refexplicit”‰Œrefwarn”‰jŒjbd2_fc_wait_bufs”uh1hh³hÊh´KœhjÑubhŒ> to allocate and wait on IO completion of fast commit buffers.”…”�”}”(hjÑh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´Kœhjýh²hubhî)�”}”(hŒ¡Currently, only Ext4 implements fast commits. For details of its implementation of fast commits, please refer to the top level comments in fs/ext4/fast_commit.c.”h]”hŒ¡Currently, only Ext4 implements fast commits. For details of its implementation of fast commits, please refer to the top level comments in fs/ext4/fast_commit.c.”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K hjýh²hubeh}”(h]”Œ fast-commits”ah ]”h"]”Œ fast commits”ah$]”h&]”uh1hµhhËh²hh³hÊh´K†ubh¶)�”}”(hhh]”(h»)�”}”(hŒSummary”h]”hŒSummary”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj;h²hh³hÊh´K¥ubhî)�”}”(hŒ¼Using the journal is a matter of wrapping the different context changes, being each mount, each modification (transaction) and each changed buffer to tell the journalling layer about them.”h]”hŒ¼Using the journal is a matter of wrapping the different context changes, being each mount, each modification (transaction) and each changed buffer to tell the journalling layer about them.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K§hj;h²hubeh}”(h]”Œsummary”ah ]”h"]”Œsummary”ah$]”h&]”uh1hµhhËh²hh³hÊh´K¥ubeh}”(h]”Œoverview”ah ]”h"]”Œoverview”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ Data Types”h]”hŒ Data Types”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjjh²hh³hÊh´K¬ubhî)�”}”(hŒüThe journalling layer uses typedefs to 'hide' the concrete definitions of the structures used. As a client of the JBD2 layer you can just rely on the using the pointer as a magic cookie of some sort. Obviously the hiding is not enforced as this is 'C'.”h]”hXThe journalling layer uses typedefs to ‘hide’ the concrete definitions of the structures used. As a client of the JBD2 layer you can just rely on the using the pointer as a magic cookie of some sort. Obviously the hiding is not enforced as this is ‘C’.”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K®hjjh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ Structures”h]”hŒ Structures”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj‰h²hh³hÊh´K´ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œhandle_t (C type)”Œ c.handle_t”hNt”auh1jšhj‰h²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒhandle_t”h]”hŒdesc_signature_line”“”)�”}”(hŒ type handle_t”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒtype”h]”hŒtype”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1j¼hj¸h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jÎhj¸h²hh³jÍh´KubhŒ desc_name”“”)�”}”(hŒhandle_t”h]”hŒ desc_sig_name”“”)�”}”(hj´h]”hŒhandle_t”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jåhjáubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”jåjæuh1jßhj¸h²hh³jÍh´Kubeh}”(h]”h ]”h"]”h$]”h&]”jåjæŒ add_permalink”ˆuh1j¶Œsphinx_line_type”Œ declarator”hj²h²hh³jÍh´Kubah}”(h]”j©ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1j°h³jÍh´Khj­h²hubhŒ desc_content”“”)�”}”(hhh]”hî)�”}”(hŒTThe handle_t type represents a single atomic update being performed by some process.”h]”hŒTThe handle_t type represents a single atomic update being performed by some process.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´KHhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­h²hh³jÍh´Kubeh}”(h]”h ]”(jmŒtype”eh"]”h$]”h&]”Œdomain”jmŒobjtype”j.Œdesctype”j.Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1j«h²hhj‰h³Nh´Nubhî)�”}”(hŒ**Description**”h]”hŒstrong”“”)�”}”(hj:h]”hŒ Description”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´KJhj‰h²hubhî)�”}”(hŒœAll filesystem modifications made by the process go through this handle. Recursive operations (such as quota operations) are gathered into a single update.”h]”hŒœAll filesystem modifications made by the process go through this handle. Recursive operations (such as quota operations) are gathered into a single update.”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´KIhj‰h²hubhî)�”}”(hXÉThe buffer credits field is used to account for journaled buffers being modified by the running process. To ensure that there is enough log space for all outstanding operations, we need to limit the number of outstanding buffers possible at any time. When the operation completes, any buffer credits not used are credited back to the transaction, so that at all times we know how many buffers the outstanding updates on a transaction might possibly touch.”h]”hXÉThe buffer credits field is used to account for journaled buffers being modified by the running process. To ensure that there is enough log space for all outstanding operations, we need to limit the number of outstanding buffers possible at any time. When the operation completes, any buffer credits not used are credited back to the transaction, so that at all times we know how many buffers the outstanding updates on a transaction might possibly touch.”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´KMhj‰h²hubhî)�”}”(hŒThis is an opaque datatype.”h]”hŒThis is an opaque datatype.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´KUhj‰h²hubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œjournal_t (C type)”Œ c.journal_t”hNt”auh1jšhj‰h²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ journal_t”h]”j·)�”}”(hŒtype journal_t”h]”(j½)�”}”(hjÀh]”hŒtype”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hj”h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´KZubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj”h²hh³j¥h´KZubjà)�”}”(hŒ journal_t”h]”jæ)�”}”(hj’h]”hŒ journal_t”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj´ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj”h²hh³j¥h´KZubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj�h²hh³j¥h´KZubah}”(h]”j‹ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j¥h´KZhj�h²hubj)�”}”(hhh]”hî)�”}”(hŒXThe journal_t maintains all of the journaling state information for a single filesystem.”h]”hŒXThe journal_t maintains all of the journaling state information for a single filesystem.”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´K\hj×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�h²hh³j¥h´KZubeh}”(h]”h ]”(jmŒtype”eh"]”h$]”h&]”j2jmj3jòj4jòj5‰j6‰j7‰uh1j«h²hhj‰h³Nh´Nubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjøh]”hŒ Description”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjöubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´K^hj‰h²hubhî)�”}”(hŒ8journal_t is linked to from the fs superblock structure.”h]”hŒ8journal_t is linked to from the fs superblock structure.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´K]hj‰h²hubhî)�”}”(hŒ‘We use the journal_t to keep track of all outstanding transaction activity on the filesystem, and to manage the state of the log writing process.”h]”hŒ‘We use the journal_t to keep track of all outstanding transaction activity on the filesystem, and to manage the state of the log writing process.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´K_hj‰h²hubhî)�”}”(hŒThis is an opaque datatype.”h]”hŒThis is an opaque datatype.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Kchj‰h²hubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œjbd2_inode (C struct)”Œ c.jbd2_inode”hNt”auh1jšhj‰h²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ jbd2_inode”h]”j·)�”}”(hŒstruct jbd2_inode”h]”(j½)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjPh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´KhubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjPh²hh³jbh´Khubjà)�”}”(hŒ jbd2_inode”h]”jæ)�”}”(hjNh]”hŒ jbd2_inode”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjqubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjPh²hh³jbh´Khubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjLh²hh³jbh´Khubah}”(h]”jGah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jbh´KhhjIh²hubj)�”}”(hhh]”hî)�”}”(hŒƒThe jbd_inode type is the structure linking inodes in ordered mode present in a transaction so that we can sync them during commit.”h]”hŒƒThe jbd_inode type is the structure linking inodes in ordered mode present in a transaction so that we can sync them during commit.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M‡hj”h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIh²hh³jbh´Khubeh}”(h]”h ]”(jmŒstruct”eh"]”h$]”h&]”j2jmj3j¯j4j¯j5‰j6‰j7‰uh1j«h²hhj‰h³Nh´NubhŒ container”“”)�”}”(hX(**Definition**:: struct jbd2_inode { transaction_t *i_transaction; transaction_t *i_next_transaction; struct list_head i_list; struct inode *i_vfs_inode; unsigned long i_flags; pgoff_t i_dirty_start_page; pgoff_t i_dirty_end_page; }; **Members** ``i_transaction`` Which transaction does this inode belong to? Either the running transaction or the committing one. [j_list_lock] ``i_next_transaction`` Pointer to the running transaction modifying inode's data in case there is already a committing transaction touching it. [j_list_lock] ``i_list`` List of inodes in the i_transaction [j_list_lock] ``i_vfs_inode`` VFS inode this inode belongs to [constant for lifetime of structure] ``i_flags`` Flags of inode [j_list_lock] ``i_dirty_start_page`` Dirty range start in PAGE_SIZE units. The dirty range is empty if **i_dirty_start_page** is greater than or equal to **i_dirty_end_page**. [j_list_lock] ``i_dirty_end_page`` Dirty range end in PAGE_SIZE units (exclusive). [j_list_lock]”h]”(hî)�”}”(hŒ**Definition**::”h]”(j=)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj¹ubhŒ:”…”�”}”(hj¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M‹hjµubjÖ)�”}”(hŒôstruct jbd2_inode { transaction_t *i_transaction; transaction_t *i_next_transaction; struct list_head i_list; struct inode *i_vfs_inode; unsigned long i_flags; pgoff_t i_dirty_start_page; pgoff_t i_dirty_end_page; };”h]”hŒôstruct jbd2_inode { transaction_t *i_transaction; transaction_t *i_next_transaction; struct list_head i_list; struct inode *i_vfs_inode; unsigned long i_flags; pgoff_t i_dirty_start_page; pgoff_t i_dirty_end_page; };”…”�”}”hjÖsbah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jÕh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M�hjµubhî)�”}”(hŒ **Members**”h]”j=)�”}”(hjçh]”hŒMembers”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M—hjµubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒƒ``i_transaction`` Which transaction does this inode belong to? Either the running transaction or the committing one. [j_list_lock] ”h]”(hŒterm”“”)�”}”(hŒ``i_transaction``”h]”j®)�”}”(hj h]”hŒ i_transaction”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MŽhjubhŒ definition”“”)�”}”(hhh]”hî)�”}”(hŒpWhich transaction does this inode belong to? Either the running transaction or the committing one. [j_list_lock]”h]”hŒpWhich transaction does this inode belong to? Either the running transaction or the committing one. [j_list_lock]”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M�hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!h´MŽhjÿubj)�”}”(hŒž``i_next_transaction`` Pointer to the running transaction modifying inode's data in case there is already a committing transaction touching it. [j_list_lock] ”h]”(j )�”}”(hŒ``i_next_transaction``”h]”j®)�”}”(hjHh]”hŒi_next_transaction”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M–hjBubj#)�”}”(hhh]”hî)�”}”(hŒ†Pointer to the running transaction modifying inode's data in case there is already a committing transaction touching it. [j_list_lock]”h]”hŒˆPointer to the running transaction modifying inode’s data in case there is already a committing transaction touching it. [j_list_lock]”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M•hj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j]h´M–hjÿubj)�”}”(hŒ=``i_list`` List of inodes in the i_transaction [j_list_lock] ”h]”(j )�”}”(hŒ ``i_list``”h]”j®)�”}”(hj‚h]”hŒi_list”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M�hj|ubj#)�”}”(hhh]”hî)�”}”(hŒ1List of inodes in the i_transaction [j_list_lock]”h]”hŒ1List of inodes in the i_transaction [j_list_lock]”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j—h´M�hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j—h´M�hjÿubj)�”}”(hŒU``i_vfs_inode`` VFS inode this inode belongs to [constant for lifetime of structure] ”h]”(j )�”}”(hŒ``i_vfs_inode``”h]”j®)�”}”(hj»h]”hŒ i_vfs_inode”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M¢hjµubj#)�”}”(hhh]”hî)�”}”(hŒDVFS inode this inode belongs to [constant for lifetime of structure]”h]”hŒDVFS inode this inode belongs to [constant for lifetime of structure]”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÐh´M¢hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÐh´M¢hjÿubj)�”}”(hŒ)``i_flags`` Flags of inode [j_list_lock] ”h]”(j )�”}”(hŒ ``i_flags``”h]”j®)�”}”(hjôh]”hŒi_flags”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M©hjîubj#)�”}”(hhh]”hî)�”}”(hŒFlags of inode [j_list_lock]”h]”hŒFlags of inode [j_list_lock]”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j h´M©hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´M©hjÿubj)�”}”(hŒ²``i_dirty_start_page`` Dirty range start in PAGE_SIZE units. The dirty range is empty if **i_dirty_start_page** is greater than or equal to **i_dirty_end_page**. [j_list_lock] ”h]”(j )�”}”(hŒ``i_dirty_start_page``”h]”j®)�”}”(hj-h]”hŒi_dirty_start_page”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M³hj'ubj#)�”}”(hhh]”(hî)�”}”(hŒ%Dirty range start in PAGE_SIZE units.”h]”hŒ%Dirty range start in PAGE_SIZE units.”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M®hjCubhî)�”}”(hŒdThe dirty range is empty if **i_dirty_start_page** is greater than or equal to **i_dirty_end_page**.”h]”(hŒThe dirty range is empty if ”…”�”}”(hjUh²hh³Nh´Nubj=)�”}”(hŒ**i_dirty_start_page**”h]”hŒi_dirty_start_page”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjUubhŒ is greater than or equal to ”…”�”}”(hjUh²hh³Nh´Nubj=)�”}”(hŒ**i_dirty_end_page**”h]”hŒi_dirty_end_page”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjUubhŒ.”…”�”}”(hjUh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M°hjCubhî)�”}”(hŒ [j_list_lock]”h]”hŒ [j_list_lock]”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jBh´M³hjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j"hj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jBh´M³hjÿubj)�”}”(hŒS``i_dirty_end_page`` Dirty range end in PAGE_SIZE units (exclusive). [j_list_lock]”h]”(j )�”}”(hŒ``i_dirty_end_page``”h]”j®)�”}”(hj¨h]”hŒi_dirty_end_page”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M»hj¢ubj#)�”}”(hhh]”(hî)�”}”(hŒ/Dirty range end in PAGE_SIZE units (exclusive).”h]”hŒ/Dirty range end in PAGE_SIZE units (exclusive).”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mºhj¾ubhî)�”}”(hŒ [j_list_lock]”h]”hŒ [j_list_lock]”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M¼hj¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j½h´M»hjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhjµubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj‰h²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œjbd2_journal_handle (C struct)”Œc.jbd2_journal_handle”hNt”auh1jšhj‰h²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒjbd2_journal_handle”h]”j·)�”}”(hŒstruct jbd2_journal_handle”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hj h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÂubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj h²hh³jh´MÂubjà)�”}”(hŒjbd2_journal_handle”h]”jæ)�”}”(hj h]”hŒjbd2_journal_handle”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj-ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj h²hh³jh´MÂubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj h²hh³jh´MÂubah}”(h]”jah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jh´MÂhjh²hubj)�”}”(hhh]”hî)�”}”(hŒKThe jbd2_journal_handle type is the concrete type associated with handle_t.”h]”hŒKThe jbd2_journal_handle type is the concrete type associated with handle_t.”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MØhjPh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³jh´MÂubeh}”(h]”h ]”(jmŒstruct”eh"]”h$]”h&]”j2jmj3jkj4jkj5‰j6‰j7‰uh1j«h²hhj‰h³Nh´Nubj´)�”}”(hX**Definition**:: struct jbd2_journal_handle { union { transaction_t *h_transaction; journal_t *h_journal; }; handle_t *h_rsv_handle; int h_total_credits; int h_revoke_credits; int h_revoke_credits_requested; int h_ref; int h_err; unsigned char h_sync: 1; unsigned char h_reserved: 1; unsigned char h_aborted: 1; unsigned char h_invalid: 1; unsigned char h_type; unsigned short h_line_no; unsigned long h_start_jiffies; unsigned int h_requested_credits; unsigned int saved_alloc_context; }; **Members** ``{unnamed_union}`` anonymous ``h_transaction`` Which compound transaction is this update a part of? ``h_journal`` Which journal handle belongs to - used iff h_reserved set. ``h_rsv_handle`` Handle reserved for finishing the logical operation. ``h_total_credits`` Number of remaining buffers we are allowed to add to journal. These are dirty buffers and revoke descriptor blocks. ``h_revoke_credits`` Number of remaining revoke records available for handle ``h_revoke_credits_requested`` Holds **h_revoke_credits** after handle is started. ``h_ref`` Reference count on this handle. ``h_err`` Field for caller's use to track errors through large fs operations. ``h_sync`` Flag for sync-on-close. ``h_reserved`` Flag for handle for reserved credits. ``h_aborted`` Flag indicating fatal error on handle. ``h_type`` For handle statistics. ``h_line_no`` For handle statistics. ``h_start_jiffies`` Handle Start time. ``h_requested_credits`` Holds **h_total_credits** after handle is started. ``saved_alloc_context`` Saved context while transaction is open.”h]”(hî)�”}”(hŒ**Definition**::”h]”(j=)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjsubhŒ:”…”�”}”(hjsh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÜhjoubjÖ)�”}”(hXmstruct jbd2_journal_handle { union { transaction_t *h_transaction; journal_t *h_journal; }; handle_t *h_rsv_handle; int h_total_credits; int h_revoke_credits; int h_revoke_credits_requested; int h_ref; int h_err; unsigned char h_sync: 1; unsigned char h_reserved: 1; unsigned char h_aborted: 1; unsigned char h_invalid: 1; unsigned char h_type; unsigned short h_line_no; unsigned long h_start_jiffies; unsigned int h_requested_credits; unsigned int saved_alloc_context; };”h]”hXmstruct jbd2_journal_handle { union { transaction_t *h_transaction; journal_t *h_journal; }; handle_t *h_rsv_handle; int h_total_credits; int h_revoke_credits; int h_revoke_credits_requested; int h_ref; int h_err; unsigned char h_sync: 1; unsigned char h_reserved: 1; unsigned char h_aborted: 1; unsigned char h_invalid: 1; unsigned char h_type; unsigned short h_line_no; unsigned long h_start_jiffies; unsigned int h_requested_credits; unsigned int saved_alloc_context; };”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jÕh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÞhjoubhî)�”}”(hŒ **Members**”h]”j=)�”}”(hj¡h]”hŒMembers”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Môhjoubjþ)�”}”(hhh]”(j)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j )�”}”(hŒ``{unnamed_union}``”h]”j®)�”}”(hjÀh]”hŒ{unnamed_union}”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Khjºubj#)�”}”(hhh]”hî)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÕh´KhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÕh´Khj·ubj)�”}”(hŒG``h_transaction`` Which compound transaction is this update a part of? ”h]”(j )�”}”(hŒ``h_transaction``”h]”j®)�”}”(hjùh]”hŒ h_transaction”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÛhjóubj#)�”}”(hhh]”hî)�”}”(hŒ4Which compound transaction is this update a part of?”h]”hŒ4Which compound transaction is this update a part of?”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j h´MÛhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjóubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´MÛhj·ubj)�”}”(hŒI``h_journal`` Which journal handle belongs to - used iff h_reserved set. ”h]”(j )�”}”(hŒ ``h_journal``”h]”j®)�”}”(hj2 h]”hŒ h_journal”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj0 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÜhj, ubj#)�”}”(hhh]”hî)�”}”(hŒ:Which journal handle belongs to - used iff h_reserved set.”h]”hŒ:Which journal handle belongs to - used iff h_reserved set.”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jG h´MÜhjH ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj, ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jG h´MÜhj·ubj)�”}”(hŒF``h_rsv_handle`` Handle reserved for finishing the logical operation. ”h]”(j )�”}”(hŒ``h_rsv_handle``”h]”j®)�”}”(hjk h]”hŒ h_rsv_handle”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hji ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÝhje ubj#)�”}”(hhh]”hî)�”}”(hŒ4Handle reserved for finishing the logical operation.”h]”hŒ4Handle reserved for finishing the logical operation.”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j€ h´MÝhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hje ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j€ h´MÝhj·ubj)�”}”(hŒˆ``h_total_credits`` Number of remaining buffers we are allowed to add to journal. These are dirty buffers and revoke descriptor blocks. ”h]”(j )�”}”(hŒ``h_total_credits``”h]”j®)�”}”(hj¤ h]”hŒh_total_credits”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¢ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mßhjž ubj#)�”}”(hhh]”hî)�”}”(hŒsNumber of remaining buffers we are allowed to add to journal. These are dirty buffers and revoke descriptor blocks.”h]”hŒsNumber of remaining buffers we are allowed to add to journal. These are dirty buffers and revoke descriptor blocks.”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÞhjº ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjž ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¹ h´Mßhj·ubj)�”}”(hŒM``h_revoke_credits`` Number of remaining revoke records available for handle ”h]”(j )�”}”(hŒ``h_revoke_credits``”h]”j®)�”}”(hjÞ h]”hŒh_revoke_credits”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MàhjØ ubj#)�”}”(hhh]”hî)�”}”(hŒ7Number of remaining revoke records available for handle”h]”hŒ7Number of remaining revoke records available for handle”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jó h´Màhjô ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjØ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jó h´Màhj·ubj)�”}”(hŒS``h_revoke_credits_requested`` Holds **h_revoke_credits** after handle is started. ”h]”(j )�”}”(hŒ``h_revoke_credits_requested``”h]”j®)�”}”(hj h]”hŒh_revoke_credits_requested”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mêhj ubj#)�”}”(hhh]”hî)�”}”(hŒ3Holds **h_revoke_credits** after handle is started.”h]”(hŒHolds ”…”�”}”(hj0 h²hh³Nh´Nubj=)�”}”(hŒ**h_revoke_credits**”h]”hŒh_revoke_credits”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj0 ubhŒ after handle is started.”…”�”}”(hj0 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³j, h´Mêhj- ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j, h´Mêhj·ubj)�”}”(hŒ*``h_ref`` Reference count on this handle. ”h]”(j )�”}”(hŒ ``h_ref``”h]”j®)�”}”(hjb h]”hŒh_ref”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj` ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Máhj\ ubj#)�”}”(hhh]”hî)�”}”(hŒReference count on this handle.”h]”hŒReference count on this handle.”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jw h´Máhjx ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj\ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jw h´Máhj·ubj)�”}”(hŒN``h_err`` Field for caller's use to track errors through large fs operations. ”h]”(j )�”}”(hŒ ``h_err``”h]”j®)�”}”(hj› h]”hŒh_err”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj™ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mâhj• ubj#)�”}”(hhh]”hî)�”}”(hŒCField for caller's use to track errors through large fs operations.”h]”hŒEField for caller’s use to track errors through large fs operations.”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j° h´Mâhj± ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj• ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j° h´Mâhj·ubj)�”}”(hŒ#``h_sync`` Flag for sync-on-close. ”h]”(j )�”}”(hŒ ``h_sync``”h]”j®)�”}”(hjÔ h]”hŒh_sync”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MãhjÎ ubj#)�”}”(hhh]”hî)�”}”(hŒFlag for sync-on-close.”h]”hŒFlag for sync-on-close.”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jé h´Mãhjê ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÎ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jé h´Mãhj·ubj)�”}”(hŒ5``h_reserved`` Flag for handle for reserved credits. ”h]”(j )�”}”(hŒ``h_reserved``”h]”j®)�”}”(hj h]”hŒ h_reserved”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mähj ubj#)�”}”(hhh]”hî)�”}”(hŒ%Flag for handle for reserved credits.”h]”hŒ%Flag for handle for reserved credits.”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j" h´Mähj# ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j" h´Mähj·ubj)�”}”(hŒ5``h_aborted`` Flag indicating fatal error on handle. ”h]”(j )�”}”(hŒ ``h_aborted``”h]”j®)�”}”(hjF h]”hŒ h_aborted”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjD ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Måhj@ ubj#)�”}”(hhh]”hî)�”}”(hŒ&Flag indicating fatal error on handle.”h]”hŒ&Flag indicating fatal error on handle.”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j[ h´Måhj\ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj@ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[ h´Måhj·ubj)�”}”(hŒ"``h_type`` For handle statistics. ”h]”(j )�”}”(hŒ ``h_type``”h]”j®)�”}”(hj h]”hŒh_type”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj} ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mæhjy ubj#)�”}”(hhh]”hî)�”}”(hŒFor handle statistics.”h]”hŒFor handle statistics.”…”�”}”(hj˜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j” h´Mæhj• ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjy ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j” h´Mæhj·ubj)�”}”(hŒ%``h_line_no`` For handle statistics. ”h]”(j )�”}”(hŒ ``h_line_no``”h]”j®)�”}”(hj¸ h]”hŒ h_line_no”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¶ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mçhj² ubj#)�”}”(hhh]”hî)�”}”(hŒFor handle statistics.”h]”hŒFor handle statistics.”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÍ h´MçhjÎ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj² ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÍ h´Mçhj·ubj)�”}”(hŒ'``h_start_jiffies`` Handle Start time. ”h]”(j )�”}”(hŒ``h_start_jiffies``”h]”j®)�”}”(hjñ h]”hŒh_start_jiffies”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjï ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mèhjë ubj#)�”}”(hhh]”hî)�”}”(hŒHandle Start time.”h]”hŒHandle Start time.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j h´Mèhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjë ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´Mèhj·ubj)�”}”(hŒK``h_requested_credits`` Holds **h_total_credits** after handle is started. ”h]”(j )�”}”(hŒ``h_requested_credits``”h]”j®)�”}”(hj* h]”hŒh_requested_credits”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj( ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Méhj$ ubj#)�”}”(hhh]”hî)�”}”(hŒ2Holds **h_total_credits** after handle is started.”h]”(hŒHolds ”…”�”}”(hjC h²hh³Nh´Nubj=)�”}”(hŒ**h_total_credits**”h]”hŒh_total_credits”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjC ubhŒ after handle is started.”…”�”}”(hjC h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³j? h´Méhj@ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj$ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j? h´Méhj·ubj)�”}”(hŒ@``saved_alloc_context`` Saved context while transaction is open.”h]”(j )�”}”(hŒ``saved_alloc_context``”h]”j®)�”}”(hju h]”hŒsaved_alloc_context”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mêhjo ubj#)�”}”(hhh]”hî)�”}”(hŒ(Saved context while transaction is open.”h]”hŒ(Saved context while transaction is open.”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mëhj‹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjo ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠ h´Mêhj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhjoubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj‰h²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œjournal_s (C struct)”Œ c.journal_s”hNt”auh1jšhj‰h²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ journal_s”h]”j·)�”}”(hŒstruct journal_s”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjË h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MñubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjË h²hh³jÜ h´Mñubjà)�”}”(hŒ journal_s”h]”jæ)�”}”(hjÉ h]”hŒ journal_s”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjë ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjË h²hh³jÜ h´Mñubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjÇ h²hh³jÜ h´Mñubah}”(h]”j ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jÜ h´MñhjÄ h²hubj)�”}”(hhh]”hî)�”}”(hŒBThe journal_s type is the concrete type associated with journal_t.”h]”hŒBThe journal_s type is the concrete type associated with journal_t.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mùhj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄ h²hh³jÜ h´Mñubeh}”(h]”h ]”(jmŒstruct”eh"]”h$]”h&]”j2jmj3j) j4j) j5‰j6‰j7‰uh1j«h²hhj‰h³Nh´Nubj´)�”}”(hX-**Definition**:: struct journal_s { unsigned long j_flags; int j_errno; struct mutex j_abort_mutex; struct buffer_head *j_sb_buffer; journal_superblock_t *j_superblock; rwlock_t j_state_lock; int j_barrier_count; struct mutex j_barrier; transaction_t *j_running_transaction; transaction_t *j_committing_transaction; transaction_t *j_checkpoint_transactions; wait_queue_head_t j_wait_transaction_locked; wait_queue_head_t j_wait_done_commit; wait_queue_head_t j_wait_commit; wait_queue_head_t j_wait_updates; wait_queue_head_t j_wait_reserved; wait_queue_head_t j_fc_wait; struct mutex j_checkpoint_mutex; struct buffer_head *j_chkpt_bhs[JBD2_NR_BATCH]; struct shrinker *j_shrinker; struct percpu_counter j_checkpoint_jh_count; transaction_t *j_shrink_transaction; unsigned long j_head; unsigned long j_tail; unsigned long j_free; unsigned long j_first; unsigned long j_last; unsigned long j_fc_first; unsigned long j_fc_off; unsigned long j_fc_last; struct block_device *j_dev; int j_blocksize; unsigned long long j_blk_offset; char j_devname[BDEVNAME_SIZE+24]; struct block_device *j_fs_dev; errseq_t j_fs_dev_wb_err; unsigned int j_total_len; atomic_t j_reserved_credits; spinlock_t j_list_lock; struct inode *j_inode; tid_t j_tail_sequence; tid_t j_transaction_sequence; tid_t j_commit_sequence; tid_t j_commit_request; __u8 j_uuid[16]; struct task_struct *j_task; int j_max_transaction_buffers; int j_revoke_records_per_block; int j_transaction_overhead_buffers; unsigned long j_commit_interval; struct timer_list j_commit_timer; spinlock_t j_revoke_lock; struct jbd2_revoke_table_s *j_revoke; struct jbd2_revoke_table_s *j_revoke_table[2]; struct buffer_head **j_wbuf; struct buffer_head **j_fc_wbuf; int j_wbufsize; int j_fc_wbufsize; pid_t j_last_sync_writer; u64 j_average_commit_time; u32 j_min_batch_time; u32 j_max_batch_time; void (*j_commit_callback)(journal_t *, transaction_t *); int (*j_submit_inode_data_buffers) (struct jbd2_inode *); int (*j_finish_inode_data_buffers) (struct jbd2_inode *); spinlock_t j_history_lock; struct proc_dir_entry *j_proc_entry; struct transaction_stats_s j_stats; unsigned int j_failed_commit; void *j_private; __u32 j_csum_seed; #ifdef CONFIG_DEBUG_LOCK_ALLOC; struct lockdep_map j_trans_commit_map; #endif; struct lock_class_key jbd2_trans_commit_key; void (*j_fc_cleanup_callback)(struct journal_s *journal, int full, tid_t tid); int (*j_fc_replay_callback)(struct journal_s *journal, struct buffer_head *bh, enum passtype pass, int off, tid_t expected_commit_id); int (*j_bmap)(struct journal_s *journal, sector_t *block); }; **Members** ``j_flags`` General journaling state flags [j_state_lock, no lock for quick racy checks] ``j_errno`` Is there an outstanding uncleared error on the journal (from a prior abort)? [j_state_lock] ``j_abort_mutex`` Lock the whole aborting procedure. ``j_sb_buffer`` The first part of the superblock buffer. ``j_superblock`` The second part of the superblock buffer. ``j_state_lock`` Protect the various scalars in the journal. ``j_barrier_count`` Number of processes waiting to create a barrier lock [j_state_lock, no lock for quick racy checks] ``j_barrier`` The barrier lock itself. ``j_running_transaction`` Transactions: The current running transaction... [j_state_lock, no lock for quick racy checks] [caller holding open handle] ``j_committing_transaction`` the transaction we are pushing to disk [j_state_lock] [caller holding open handle] ``j_checkpoint_transactions`` ... and a linked circular list of all transactions waiting for checkpointing. [j_list_lock] ``j_wait_transaction_locked`` Wait queue for waiting for a locked transaction to start committing, or for a barrier lock to be released. ``j_wait_done_commit`` Wait queue for waiting for commit to complete. ``j_wait_commit`` Wait queue to trigger commit. ``j_wait_updates`` Wait queue to wait for updates to complete. ``j_wait_reserved`` Wait queue to wait for reserved buffer credits to drop. ``j_fc_wait`` Wait queue to wait for completion of async fast commits. ``j_checkpoint_mutex`` Semaphore for locking against concurrent checkpoints. ``j_chkpt_bhs`` List of buffer heads used by the checkpoint routine. This was moved from jbd2_log_do_checkpoint() to reduce stack usage. Access to this array is controlled by the **j_checkpoint_mutex**. [j_checkpoint_mutex] ``j_shrinker`` Journal head shrinker, reclaim buffer's journal head which has been written back. ``j_checkpoint_jh_count`` Number of journal buffers on the checkpoint list. [j_list_lock] ``j_shrink_transaction`` Record next transaction will shrink on the checkpoint list. [j_list_lock] ``j_head`` Journal head: identifies the first unused block in the journal. [j_state_lock] ``j_tail`` Journal tail: identifies the oldest still-used block in the journal. [j_state_lock] ``j_free`` Journal free: how many free blocks are there in the journal? [j_state_lock] ``j_first`` The block number of the first usable block in the journal [j_state_lock]. ``j_last`` The block number one beyond the last usable block in the journal [j_state_lock]. ``j_fc_first`` The block number of the first fast commit block in the journal [j_state_lock]. ``j_fc_off`` Number of fast commit blocks currently allocated. Accessed only during fast commit. Currently only process can do fast commit, so this field is not protected by any lock. ``j_fc_last`` The block number one beyond the last fast commit block in the journal [j_state_lock]. ``j_dev`` Device where we store the journal. ``j_blocksize`` Block size for the location where we store the journal. ``j_blk_offset`` Starting block offset into the device where we store the journal. ``j_devname`` Journal device name. ``j_fs_dev`` Device which holds the client fs. For internal journal this will be equal to j_dev. ``j_fs_dev_wb_err`` Records the errseq of the client fs's backing block device. ``j_total_len`` Total maximum capacity of the journal region on disk. ``j_reserved_credits`` Number of buffers reserved from the running transaction. ``j_list_lock`` Protects the buffer lists and internal buffer state. ``j_inode`` Optional inode where we store the journal. If present, all journal block numbers are mapped into this inode via bmap(). ``j_tail_sequence`` Sequence number of the oldest transaction in the log [j_state_lock] ``j_transaction_sequence`` Sequence number of the next transaction to grant [j_state_lock] ``j_commit_sequence`` Sequence number of the most recently committed transaction [j_state_lock, no lock for quick racy checks] ``j_commit_request`` Sequence number of the most recent transaction wanting commit [j_state_lock, no lock for quick racy checks] ``j_uuid`` Journal uuid: identifies the object (filesystem, LVM volume etc) backed by this journal. This will eventually be replaced by an array of uuids, allowing us to index multiple devices within a single journal and to perform atomic updates across them. ``j_task`` Pointer to the current commit thread for this journal. ``j_max_transaction_buffers`` Maximum number of metadata buffers to allow in a single compound commit transaction. ``j_revoke_records_per_block`` Number of revoke records that fit in one descriptor block. ``j_transaction_overhead_buffers`` Number of blocks each transaction needs for its own bookkeeping ``j_commit_interval`` What is the maximum transaction lifetime before we begin a commit? ``j_commit_timer`` The timer used to wakeup the commit thread. ``j_revoke_lock`` Protect the revoke table. ``j_revoke`` The revoke table - maintains the list of revoked blocks in the current transaction. ``j_revoke_table`` Alternate revoke tables for j_revoke. ``j_wbuf`` Array of bhs for jbd2_journal_commit_transaction. ``j_fc_wbuf`` Array of fast commit bhs for fast commit. Accessed only during a fast commit. Currently only process can do fast commit, so this field is not protected by any lock. ``j_wbufsize`` Size of **j_wbuf** array. ``j_fc_wbufsize`` Size of **j_fc_wbuf** array. ``j_last_sync_writer`` The pid of the last person to run a synchronous operation through the journal. ``j_average_commit_time`` The average amount of time in nanoseconds it takes to commit a transaction to disk. [j_state_lock] ``j_min_batch_time`` Minimum time that we should wait for additional filesystem operations to get batched into a synchronous handle in microseconds. ``j_max_batch_time`` Maximum time that we should wait for additional filesystem operations to get batched into a synchronous handle in microseconds. ``j_commit_callback`` This function is called when a transaction is closed. ``j_submit_inode_data_buffers`` This function is called for all inodes associated with the committing transaction marked with JI_WRITE_DATA flag before we start to write out the transaction to the journal. ``j_finish_inode_data_buffers`` This function is called for all inodes associated with the committing transaction marked with JI_WAIT_DATA flag after we have written the transaction to the journal but before we write out the commit block. ``j_history_lock`` Protect the transactions statistics history. ``j_proc_entry`` procfs entry for the jbd statistics directory. ``j_stats`` Overall statistics. ``j_failed_commit`` Failed journal commit ID. ``j_private`` An opaque pointer to fs-private information. ext3 puts its superblock pointer here. ``j_csum_seed`` Precomputed journal UUID checksum for seeding other checksums. ``j_trans_commit_map`` Lockdep entity to track transaction commit dependencies. Handles hold this "lock" for read, when we wait for commit, we acquire the "lock" for writing. This matches the properties of jbd2 journalling where the running transaction has to wait for all handles to be dropped to commit that transaction and also acquiring a handle may require transaction commit to finish. ``jbd2_trans_commit_key`` "struct lock_class_key" for **j_trans_commit_map** ``j_fc_cleanup_callback`` Clean-up after fast commit or full commit. JBD2 calls this function after every commit operation. ``j_fc_replay_callback`` File-system specific function that performs replay of a fast commit. JBD2 calls this function for each fast commit block found in the journal. This function should return JBD2_FC_REPLAY_CONTINUE to indicate that the block was processed correctly and more fast commit replay should continue. Return value of JBD2_FC_REPLAY_STOP indicates the end of replay (no more blocks remaining). A negative return value indicates error. ``j_bmap`` Bmap function that should be used instead of the generic VFS bmap function.”•h]”(hî)�”}”(hŒ**Definition**::”h]”(j=)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj1 ubhŒ:”…”�”}”(hj1 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mýhj- ubjÖ)�”}”(hX struct journal_s { unsigned long j_flags; int j_errno; struct mutex j_abort_mutex; struct buffer_head *j_sb_buffer; journal_superblock_t *j_superblock; rwlock_t j_state_lock; int j_barrier_count; struct mutex j_barrier; transaction_t *j_running_transaction; transaction_t *j_committing_transaction; transaction_t *j_checkpoint_transactions; wait_queue_head_t j_wait_transaction_locked; wait_queue_head_t j_wait_done_commit; wait_queue_head_t j_wait_commit; wait_queue_head_t j_wait_updates; wait_queue_head_t j_wait_reserved; wait_queue_head_t j_fc_wait; struct mutex j_checkpoint_mutex; struct buffer_head *j_chkpt_bhs[JBD2_NR_BATCH]; struct shrinker *j_shrinker; struct percpu_counter j_checkpoint_jh_count; transaction_t *j_shrink_transaction; unsigned long j_head; unsigned long j_tail; unsigned long j_free; unsigned long j_first; unsigned long j_last; unsigned long j_fc_first; unsigned long j_fc_off; unsigned long j_fc_last; struct block_device *j_dev; int j_blocksize; unsigned long long j_blk_offset; char j_devname[BDEVNAME_SIZE+24]; struct block_device *j_fs_dev; errseq_t j_fs_dev_wb_err; unsigned int j_total_len; atomic_t j_reserved_credits; spinlock_t j_list_lock; struct inode *j_inode; tid_t j_tail_sequence; tid_t j_transaction_sequence; tid_t j_commit_sequence; tid_t j_commit_request; __u8 j_uuid[16]; struct task_struct *j_task; int j_max_transaction_buffers; int j_revoke_records_per_block; int j_transaction_overhead_buffers; unsigned long j_commit_interval; struct timer_list j_commit_timer; spinlock_t j_revoke_lock; struct jbd2_revoke_table_s *j_revoke; struct jbd2_revoke_table_s *j_revoke_table[2]; struct buffer_head **j_wbuf; struct buffer_head **j_fc_wbuf; int j_wbufsize; int j_fc_wbufsize; pid_t j_last_sync_writer; u64 j_average_commit_time; u32 j_min_batch_time; u32 j_max_batch_time; void (*j_commit_callback)(journal_t *, transaction_t *); int (*j_submit_inode_data_buffers) (struct jbd2_inode *); int (*j_finish_inode_data_buffers) (struct jbd2_inode *); spinlock_t j_history_lock; struct proc_dir_entry *j_proc_entry; struct transaction_stats_s j_stats; unsigned int j_failed_commit; void *j_private; __u32 j_csum_seed; #ifdef CONFIG_DEBUG_LOCK_ALLOC; struct lockdep_map j_trans_commit_map; #endif; struct lock_class_key jbd2_trans_commit_key; void (*j_fc_cleanup_callback)(struct journal_s *journal, int full, tid_t tid); int (*j_fc_replay_callback)(struct journal_s *journal, struct buffer_head *bh, enum passtype pass, int off, tid_t expected_commit_id); int (*j_bmap)(struct journal_s *journal, sector_t *block); };”h]”hX struct journal_s { unsigned long j_flags; int j_errno; struct mutex j_abort_mutex; struct buffer_head *j_sb_buffer; journal_superblock_t *j_superblock; rwlock_t j_state_lock; int j_barrier_count; struct mutex j_barrier; transaction_t *j_running_transaction; transaction_t *j_committing_transaction; transaction_t *j_checkpoint_transactions; wait_queue_head_t j_wait_transaction_locked; wait_queue_head_t j_wait_done_commit; wait_queue_head_t j_wait_commit; wait_queue_head_t j_wait_updates; wait_queue_head_t j_wait_reserved; wait_queue_head_t j_fc_wait; struct mutex j_checkpoint_mutex; struct buffer_head *j_chkpt_bhs[JBD2_NR_BATCH]; struct shrinker *j_shrinker; struct percpu_counter j_checkpoint_jh_count; transaction_t *j_shrink_transaction; unsigned long j_head; unsigned long j_tail; unsigned long j_free; unsigned long j_first; unsigned long j_last; unsigned long j_fc_first; unsigned long j_fc_off; unsigned long j_fc_last; struct block_device *j_dev; int j_blocksize; unsigned long long j_blk_offset; char j_devname[BDEVNAME_SIZE+24]; struct block_device *j_fs_dev; errseq_t j_fs_dev_wb_err; unsigned int j_total_len; atomic_t j_reserved_credits; spinlock_t j_list_lock; struct inode *j_inode; tid_t j_tail_sequence; tid_t j_transaction_sequence; tid_t j_commit_sequence; tid_t j_commit_request; __u8 j_uuid[16]; struct task_struct *j_task; int j_max_transaction_buffers; int j_revoke_records_per_block; int j_transaction_overhead_buffers; unsigned long j_commit_interval; struct timer_list j_commit_timer; spinlock_t j_revoke_lock; struct jbd2_revoke_table_s *j_revoke; struct jbd2_revoke_table_s *j_revoke_table[2]; struct buffer_head **j_wbuf; struct buffer_head **j_fc_wbuf; int j_wbufsize; int j_fc_wbufsize; pid_t j_last_sync_writer; u64 j_average_commit_time; u32 j_min_batch_time; u32 j_max_batch_time; void (*j_commit_callback)(journal_t *, transaction_t *); int (*j_submit_inode_data_buffers) (struct jbd2_inode *); int (*j_finish_inode_data_buffers) (struct jbd2_inode *); spinlock_t j_history_lock; struct proc_dir_entry *j_proc_entry; struct transaction_stats_s j_stats; unsigned int j_failed_commit; void *j_private; __u32 j_csum_seed; #ifdef CONFIG_DEBUG_LOCK_ALLOC; struct lockdep_map j_trans_commit_map; #endif; struct lock_class_key jbd2_trans_commit_key; void (*j_fc_cleanup_callback)(struct journal_s *journal, int full, tid_t tid); int (*j_fc_replay_callback)(struct journal_s *journal, struct buffer_head *bh, enum passtype pass, int off, tid_t expected_commit_id); int (*j_bmap)(struct journal_s *journal, sector_t *block); };”…”�”}”hjN sbah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jÕh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mÿhj- ubhî)�”}”(hŒ **Members**”h]”j=)�”}”(hj_ h]”hŒMembers”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj] ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MPhj- ubjþ)�”}”(hhh]”(j)�”}”(hŒY``j_flags`` General journaling state flags [j_state_lock, no lock for quick racy checks] ”h]”(j )�”}”(hŒ ``j_flags``”h]”j®)�”}”(hj~ h]”hŒj_flags”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj| ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhjx ubj#)�”}”(hhh]”hî)�”}”(hŒLGeneral journaling state flags [j_state_lock, no lock for quick racy checks]”h]”hŒLGeneral journaling state flags [j_state_lock, no lock for quick racy checks]”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhj” ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjx ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j“ h´Mhju ubj)�”}”(hŒh``j_errno`` Is there an outstanding uncleared error on the journal (from a prior abort)? [j_state_lock] ”h]”(j )�”}”(hŒ ``j_errno``”h]”j®)�”}”(hj¸ h]”hŒj_errno”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¶ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhj² ubj#)�”}”(hhh]”hî)�”}”(hŒ[Is there an outstanding uncleared error on the journal (from a prior abort)? [j_state_lock]”h]”hŒ[Is there an outstanding uncleared error on the journal (from a prior abort)? [j_state_lock]”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MhjÎ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj² ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÍ h´Mhju ubj)�”}”(hŒ5``j_abort_mutex`` Lock the whole aborting procedure. ”h]”(j )�”}”(hŒ``j_abort_mutex``”h]”j®)�”}”(hjò h]”hŒ j_abort_mutex”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjð ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhjì ubj#)�”}”(hhh]”hî)�”}”(hŒ"Lock the whole aborting procedure.”h]”hŒ"Lock the whole aborting procedure.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjì ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Mhju ubj)�”}”(hŒ9``j_sb_buffer`` The first part of the superblock buffer. ”h]”(j )�”}”(hŒ``j_sb_buffer``”h]”j®)�”}”(hj+h]”hŒ j_sb_buffer”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhj%ubj#)�”}”(hhh]”hî)�”}”(hŒ(The first part of the superblock buffer.”h]”hŒ(The first part of the superblock buffer.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j@h´MhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@h´Mhju ubj)�”}”(hŒ;``j_superblock`` The second part of the superblock buffer. ”h]”(j )�”}”(hŒ``j_superblock``”h]”j®)�”}”(hjdh]”hŒ j_superblock”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhj^ubj#)�”}”(hhh]”hî)�”}”(hŒ)The second part of the superblock buffer.”h]”hŒ)The second part of the superblock buffer.”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jyh´Mhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jyh´Mhju ubj)�”}”(hŒ=``j_state_lock`` Protect the various scalars in the journal. ”h]”(j )�”}”(hŒ``j_state_lock``”h]”j®)�”}”(hj�h]”hŒ j_state_lock”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhj—ubj#)�”}”(hhh]”hî)�”}”(hŒ+Protect the various scalars in the journal.”h]”hŒ+Protect the various scalars in the journal.”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j²h´Mhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j²h´Mhju ubj)�”}”(hŒw``j_barrier_count`` Number of processes waiting to create a barrier lock [j_state_lock, no lock for quick racy checks] ”h]”(j )�”}”(hŒ``j_barrier_count``”h]”j®)�”}”(hjÖh]”hŒj_barrier_count”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M#hjÐubj#)�”}”(hhh]”hî)�”}”(hŒbNumber of processes waiting to create a barrier lock [j_state_lock, no lock for quick racy checks]”h]”hŒbNumber of processes waiting to create a barrier lock [j_state_lock, no lock for quick racy checks]”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M"hjìubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jëh´M#hju ubj)�”}”(hŒ'``j_barrier`` The barrier lock itself. ”h]”(j )�”}”(hŒ ``j_barrier``”h]”j®)�”}”(hjh]”hŒ j_barrier”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M*hj ubj#)�”}”(hhh]”hî)�”}”(hŒThe barrier lock itself.”h]”hŒThe barrier lock itself.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j%h´M*hj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j%h´M*hju ubj)�”}”(hŒ–``j_running_transaction`` Transactions: The current running transaction... [j_state_lock, no lock for quick racy checks] [caller holding open handle] ”h]”(j )�”}”(hŒ``j_running_transaction``”h]”j®)�”}”(hjIh]”hŒj_running_transaction”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M1hjCubj#)�”}”(hhh]”hî)�”}”(hŒ{Transactions: The current running transaction... [j_state_lock, no lock for quick racy checks] [caller holding open handle]”h]”hŒ{Transactions: The current running transaction... [j_state_lock, no lock for quick racy checks] [caller holding open handle]”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M/hj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j^h´M1hju ubj)�”}”(hŒp``j_committing_transaction`` the transaction we are pushing to disk [j_state_lock] [caller holding open handle] ”h]”(j )�”}”(hŒ``j_committing_transaction``”h]”j®)�”}”(hjƒh]”hŒj_committing_transaction”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M9hj}ubj#)�”}”(hhh]”hî)�”}”(hŒRthe transaction we are pushing to disk [j_state_lock] [caller holding open handle]”h]”hŒRthe transaction we are pushing to disk [j_state_lock] [caller holding open handle]”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M8hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j˜h´M9hju ubj)�”}”(hŒz``j_checkpoint_transactions`` ... and a linked circular list of all transactions waiting for checkpointing. [j_list_lock] ”h]”(j )�”}”(hŒ``j_checkpoint_transactions``”h]”j®)�”}”(hj½h]”hŒj_checkpoint_transactions”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MAhj·ubj#)�”}”(hhh]”hî)�”}”(hŒ[... and a linked circular list of all transactions waiting for checkpointing. [j_list_lock]”h]”hŒ[... and a linked circular list of all transactions waiting for checkpointing. [j_list_lock]”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M@hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒh´MAhju ubj)�”}”(hŒ‰``j_wait_transaction_locked`` Wait queue for waiting for a locked transaction to start committing, or for a barrier lock to be released. ”h]”(j )�”}”(hŒ``j_wait_transaction_locked``”h]”j®)�”}”(hj÷h]”hŒj_wait_transaction_locked”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjõubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MIhjñubj#)�”}”(hhh]”hî)�”}”(hŒjWait queue for waiting for a locked transaction to start committing, or for a barrier lock to be released.”h]”hŒjWait queue for waiting for a locked transaction to start committing, or for a barrier lock to be released.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MHhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´MIhju ubj)�”}”(hŒF``j_wait_done_commit`` Wait queue for waiting for commit to complete. ”h]”(j )�”}”(hŒ``j_wait_done_commit``”h]”j®)�”}”(hj1h]”hŒj_wait_done_commit”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MPhj+ubj#)�”}”(hhh]”hî)�”}”(hŒ.Wait queue for waiting for commit to complete.”h]”hŒ.Wait queue for waiting for commit to complete.”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jFh´MPhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jFh´MPhju ubj)�”}”(hŒ0``j_wait_commit`` Wait queue to trigger commit. ”h]”(j )�”}”(hŒ``j_wait_commit``”h]”j®)�”}”(hjjh]”hŒ j_wait_commit”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MUhjdubj#)�”}”(hhh]”hî)�”}”(hŒWait queue to trigger commit.”h]”hŒWait queue to trigger commit.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jh´MUhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´MUhju ubj)�”}”(hŒ?``j_wait_updates`` Wait queue to wait for updates to complete. ”h]”(j )�”}”(hŒ``j_wait_updates``”h]”j®)�”}”(hj£h]”hŒj_wait_updates”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MZhj�ubj#)�”}”(hhh]”hî)�”}”(hŒ+Wait queue to wait for updates to complete.”h]”hŒ+Wait queue to wait for updates to complete.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j¸h´MZhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¸h´MZhju ubj)�”}”(hŒL``j_wait_reserved`` Wait queue to wait for reserved buffer credits to drop. ”h]”(j )�”}”(hŒ``j_wait_reserved``”h]”j®)�”}”(hjÜh]”hŒj_wait_reserved”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M_hjÖubj#)�”}”(hhh]”hî)�”}”(hŒ7Wait queue to wait for reserved buffer credits to drop.”h]”hŒ7Wait queue to wait for reserved buffer credits to drop.”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jñh´M_hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jñh´M_hju ubj)�”}”(hŒG``j_fc_wait`` Wait queue to wait for completion of async fast commits. ”h]”(j )�”}”(hŒ ``j_fc_wait``”h]”j®)�”}”(hjh]”hŒ j_fc_wait”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mfhjubj#)�”}”(hhh]”hî)�”}”(hŒ8Wait queue to wait for completion of async fast commits.”h]”hŒ8Wait queue to wait for completion of async fast commits.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j*h´Mfhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j*h´Mfhju ubj)�”}”(hŒM``j_checkpoint_mutex`` Semaphore for locking against concurrent checkpoints. ”h]”(j )�”}”(hŒ``j_checkpoint_mutex``”h]”j®)�”}”(hjNh]”hŒj_checkpoint_mutex”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MmhjHubj#)�”}”(hhh]”hî)�”}”(hŒ5Semaphore for locking against concurrent checkpoints.”h]”hŒ5Semaphore for locking against concurrent checkpoints.”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jch´Mmhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jch´Mmhju ubj)�”}”(hŒã``j_chkpt_bhs`` List of buffer heads used by the checkpoint routine. This was moved from jbd2_log_do_checkpoint() to reduce stack usage. Access to this array is controlled by the **j_checkpoint_mutex**. [j_checkpoint_mutex] ”h]”(j )�”}”(hŒ``j_chkpt_bhs``”h]”j®)�”}”(hj‡h]”hŒ j_chkpt_bhs”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mwhj�ubj#)�”}”(hhh]”hî)�”}”(hŒÒList of buffer heads used by the checkpoint routine. This was moved from jbd2_log_do_checkpoint() to reduce stack usage. Access to this array is controlled by the **j_checkpoint_mutex**. [j_checkpoint_mutex]”h]”(hŒ¥List of buffer heads used by the checkpoint routine. This was moved from jbd2_log_do_checkpoint() to reduce stack usage. Access to this array is controlled by the ”…”�”}”(hj h²hh³Nh´Nubj=)�”}”(hŒ**j_checkpoint_mutex**”h]”hŒj_checkpoint_mutex”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj ubhŒ. [j_checkpoint_mutex]”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mthj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœh´Mwhju ubj)�”}”(hŒa``j_shrinker`` Journal head shrinker, reclaim buffer's journal head which has been written back. ”h]”(j )�”}”(hŒ``j_shrinker``”h]”j®)�”}”(hjÓh]”hŒ j_shrinker”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MhjÍubj#)�”}”(hhh]”hî)�”}”(hŒQJournal head shrinker, reclaim buffer's journal head which has been written back.”h]”hŒSJournal head shrinker, reclaim buffer’s journal head which has been written back.”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M~hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèh´Mhju ubj)�”}”(hŒZ``j_checkpoint_jh_count`` Number of journal buffers on the checkpoint list. [j_list_lock] ”h]”(j )�”}”(hŒ``j_checkpoint_jh_count``”h]”j®)�”}”(hj h]”hŒj_checkpoint_jh_count”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M†hjubj#)�”}”(hhh]”hî)�”}”(hŒ?Number of journal buffers on the checkpoint list. [j_list_lock]”h]”hŒ?Number of journal buffers on the checkpoint list. [j_list_lock]”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j"h´M†hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j"h´M†hju ubj)�”}”(hŒc``j_shrink_transaction`` Record next transaction will shrink on the checkpoint list. [j_list_lock] ”h]”(j )�”}”(hŒ``j_shrink_transaction``”h]”j®)�”}”(hjFh]”hŒj_shrink_transaction”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MŽhj@ubj#)�”}”(hhh]”hî)�”}”(hŒIRecord next transaction will shrink on the checkpoint list. [j_list_lock]”h]”hŒIRecord next transaction will shrink on the checkpoint list. [j_list_lock]”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M�hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[h´MŽhju ubj)�”}”(hŒZ``j_head`` Journal head: identifies the first unused block in the journal. [j_state_lock] ”h]”(j )�”}”(hŒ ``j_head``”h]”j®)�”}”(hj€h]”hŒj_head”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M–hjzubj#)�”}”(hhh]”hî)�”}”(hŒNJournal head: identifies the first unused block in the journal. [j_state_lock]”h]”hŒNJournal head: identifies the first unused block in the journal. [j_state_lock]”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M•hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j•h´M–hju ubj)�”}”(hŒ_``j_tail`` Journal tail: identifies the oldest still-used block in the journal. [j_state_lock] ”h]”(j )�”}”(hŒ ``j_tail``”h]”j®)�”}”(hjºh]”hŒj_tail”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mžhj´ubj#)�”}”(hhh]”hî)�”}”(hŒSJournal tail: identifies the oldest still-used block in the journal. [j_state_lock]”h]”hŒSJournal tail: identifies the oldest still-used block in the journal. [j_state_lock]”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M�hjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏh´Mžhju ubj)�”}”(hŒW``j_free`` Journal free: how many free blocks are there in the journal? [j_state_lock] ”h]”(j )�”}”(hŒ ``j_free``”h]”j®)�”}”(hjôh]”hŒj_free”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M¦hjîubj#)�”}”(hhh]”hî)�”}”(hŒKJournal free: how many free blocks are there in the journal? [j_state_lock]”h]”hŒKJournal free: how many free blocks are there in the journal? [j_state_lock]”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M¥hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´M¦hju ubj)�”}”(hŒV``j_first`` The block number of the first usable block in the journal [j_state_lock]. ”h]”(j )�”}”(hŒ ``j_first``”h]”j®)�”}”(hj.h]”hŒj_first”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M®hj(ubj#)�”}”(hhh]”hî)�”}”(hŒIThe block number of the first usable block in the journal [j_state_lock].”h]”hŒIThe block number of the first usable block in the journal [j_state_lock].”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M­hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jCh´M®hju ubj)�”}”(hŒ\``j_last`` The block number one beyond the last usable block in the journal [j_state_lock]. ”h]”(j )�”}”(hŒ ``j_last``”h]”j®)�”}”(hjhh]”hŒj_last”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M¶hjbubj#)�”}”(hhh]”hî)�”}”(hŒPThe block number one beyond the last usable block in the journal [j_state_lock].”h]”hŒPThe block number one beyond the last usable block in the journal [j_state_lock].”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mµhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j}h´M¶hju ubj)�”}”(hŒ^``j_fc_first`` The block number of the first fast commit block in the journal [j_state_lock]. ”h]”(j )�”}”(hŒ``j_fc_first``”h]”j®)�”}”(hj¢h]”hŒ j_fc_first”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M¾hjœubj#)�”}”(hhh]”hî)�”}”(hŒNThe block number of the first fast commit block in the journal [j_state_lock].”h]”hŒNThe block number of the first fast commit block in the journal [j_state_lock].”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M½hj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·h´M¾hju ubj)�”}”(hŒ¸``j_fc_off`` Number of fast commit blocks currently allocated. Accessed only during fast commit. Currently only process can do fast commit, so this field is not protected by any lock. ”h]”(j )�”}”(hŒ ``j_fc_off``”h]”j®)�”}”(hjÜh]”hŒj_fc_off”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÇhjÖubj#)�”}”(hhh]”hî)�”}”(hŒªNumber of fast commit blocks currently allocated. Accessed only during fast commit. Currently only process can do fast commit, so this field is not protected by any lock.”h]”hŒªNumber of fast commit blocks currently allocated. Accessed only during fast commit. Currently only process can do fast commit, so this field is not protected by any lock.”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÅhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jñh´MÇhju ubj)�”}”(hŒd``j_fc_last`` The block number one beyond the last fast commit block in the journal [j_state_lock]. ”h]”(j )�”}”(hŒ ``j_fc_last``”h]”j®)�”}”(hjh]”hŒ j_fc_last”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÏhjubj#)�”}”(hhh]”hî)�”}”(hŒUThe block number one beyond the last fast commit block in the journal [j_state_lock].”h]”hŒUThe block number one beyond the last fast commit block in the journal [j_state_lock].”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÎhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+h´MÏhju ubj)�”}”(hŒ-``j_dev`` Device where we store the journal. ”h]”(j )�”}”(hŒ ``j_dev``”h]”j®)�”}”(hjPh]”hŒj_dev”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÖhjJubj#)�”}”(hhh]”hî)�”}”(hŒ"Device where we store the journal.”h]”hŒ"Device where we store the journal.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jeh´MÖhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jeh´MÖhju ubj)�”}”(hŒH``j_blocksize`` Block size for the location where we store the journal. ”h]”(j )�”}”(hŒ``j_blocksize``”h]”j®)�”}”(hj‰h]”hŒ j_blocksize”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÛhjƒubj#)�”}”(hhh]”hî)�”}”(hŒ7Block size for the location where we store the journal.”h]”hŒ7Block size for the location where we store the journal.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jžh´MÛhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jžh´MÛhju ubj)�”}”(hŒS``j_blk_offset`` Starting block offset into the device where we store the journal. ”h]”(j )�”}”(hŒ``j_blk_offset``”h]”j®)�”}”(hjÂh]”hŒ j_blk_offset”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Màhj¼ubj#)�”}”(hhh]”hî)�”}”(hŒAStarting block offset into the device where we store the journal.”h]”hŒAStarting block offset into the device where we store the journal.”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j×h´MàhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j×h´Màhju ubj)�”}”(hŒ#``j_devname`` Journal device name. ”h]”(j )�”}”(hŒ ``j_devname``”h]”j®)�”}”(hjûh]”hŒ j_devname”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mçhjõubj#)�”}”(hhh]”hî)�”}”(hŒJournal device name.”h]”hŒJournal device name.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jh´Mçhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Mçhju ubj)�”}”(hŒb``j_fs_dev`` Device which holds the client fs. For internal journal this will be equal to j_dev. ”h]”(j )�”}”(hŒ ``j_fs_dev``”h]”j®)�”}”(hj4h]”hŒj_fs_dev”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Míhj.ubj#)�”}”(hhh]”hî)�”}”(hŒTDevice which holds the client fs. For internal journal this will be equal to j_dev.”h]”hŒTDevice which holds the client fs. For internal journal this will be equal to j_dev.”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MìhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jIh´Míhju ubj)�”}”(hŒP``j_fs_dev_wb_err`` Records the errseq of the client fs's backing block device. ”h]”(j )�”}”(hŒ``j_fs_dev_wb_err``”h]”j®)�”}”(hjnh]”hŒj_fs_dev_wb_err”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Môhjhubj#)�”}”(hhh]”hî)�”}”(hŒ;Records the errseq of the client fs's backing block device.”h]”hŒ=Records the errseq of the client fs’s backing block device.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jƒh´Môhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒh´Môhju ubj)�”}”(hŒF``j_total_len`` Total maximum capacity of the journal region on disk. ”h]”(j )�”}”(hŒ``j_total_len``”h]”j®)�”}”(hj§h]”hŒ j_total_len”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mûhj¡ubj#)�”}”(hhh]”hî)�”}”(hŒ5Total maximum capacity of the journal region on disk.”h]”hŒ5Total maximum capacity of the journal region on disk.”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j¼h´Mûhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼h´Mûhju ubj)�”}”(hŒP``j_reserved_credits`` Number of buffers reserved from the running transaction. ”h]”(j )�”}”(hŒ``j_reserved_credits``”h]”j®)�”}”(hjàh]”hŒj_reserved_credits”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MhjÚubj#)�”}”(hhh]”hî)�”}”(hŒ8Number of buffers reserved from the running transaction.”h]”hŒ8Number of buffers reserved from the running transaction.”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jõh´Mhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõh´Mhju ubj)�”}”(hŒE``j_list_lock`` Protects the buffer lists and internal buffer state. ”h]”(j )�”}”(hŒ``j_list_lock``”h]”j®)�”}”(hjh]”hŒ j_list_lock”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhjubj#)�”}”(hhh]”hî)�”}”(hŒ4Protects the buffer lists and internal buffer state.”h]”hŒ4Protects the buffer lists and internal buffer state.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j.h´Mhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.h´Mhju ubj)�”}”(hŒ…``j_inode`` Optional inode where we store the journal. If present, all journal block numbers are mapped into this inode via bmap(). ”h]”(j )�”}”(hŒ ``j_inode``”h]”j®)�”}”(hjRh]”hŒj_inode”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M hjLubj#)�”}”(hhh]”hî)�”}”(hŒxOptional inode where we store the journal. If present, all journal block numbers are mapped into this inode via bmap().”h]”hŒxOptional inode where we store the journal. If present, all journal block numbers are mapped into this inode via bmap().”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jgh´M hju ubj)�”}”(hŒX``j_tail_sequence`` Sequence number of the oldest transaction in the log [j_state_lock] ”h]”(j )�”}”(hŒ``j_tail_sequence``”h]”j®)�”}”(hjŒh]”hŒj_tail_sequence”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhj†ubj#)�”}”(hhh]”hî)�”}”(hŒCSequence number of the oldest transaction in the log [j_state_lock]”h]”hŒCSequence number of the oldest transaction in the log [j_state_lock]”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j¡h´Mhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¡h´Mhju ubj)�”}”(hŒ[``j_transaction_sequence`` Sequence number of the next transaction to grant [j_state_lock] ”h]”(j )�”}”(hŒ``j_transaction_sequence``”h]”j®)�”}”(hjÅh]”hŒj_transaction_sequence”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhj¿ubj#)�”}”(hhh]”hî)�”}”(hŒ?Sequence number of the next transaction to grant [j_state_lock]”h]”hŒ?Sequence number of the next transaction to grant [j_state_lock]”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÚh´MhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÚh´Mhju ubj)�”}”(hŒ``j_commit_sequence`` Sequence number of the most recently committed transaction [j_state_lock, no lock for quick racy checks] ”h]”(j )�”}”(hŒ``j_commit_sequence``”h]”j®)�”}”(hjþh]”hŒj_commit_sequence”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjüubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M#hjøubj#)�”}”(hhh]”hî)�”}”(hŒhSequence number of the most recently committed transaction [j_state_lock, no lock for quick racy checks]”h]”hŒhSequence number of the most recently committed transaction [j_state_lock, no lock for quick racy checks]”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M"hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M#hju ubj)�”}”(hŒ�``j_commit_request`` Sequence number of the most recent transaction wanting commit [j_state_lock, no lock for quick racy checks] ”h]”(j )�”}”(hŒ``j_commit_request``”h]”j®)�”}”(hj8h]”hŒj_commit_request”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M+hj2ubj#)�”}”(hhh]”hî)�”}”(hŒkSequence number of the most recent transaction wanting commit [j_state_lock, no lock for quick racy checks]”h]”hŒkSequence number of the most recent transaction wanting commit [j_state_lock, no lock for quick racy checks]”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M*hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jMh´M+hju ubj)�”}”(hX``j_uuid`` Journal uuid: identifies the object (filesystem, LVM volume etc) backed by this journal. This will eventually be replaced by an array of uuids, allowing us to index multiple devices within a single journal and to perform atomic updates across them. ”h]”(j )�”}”(hŒ ``j_uuid``”h]”j®)�”}”(hjrh]”hŒj_uuid”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M5hjlubj#)�”}”(hhh]”hî)�”}”(hŒùJournal uuid: identifies the object (filesystem, LVM volume etc) backed by this journal. This will eventually be replaced by an array of uuids, allowing us to index multiple devices within a single journal and to perform atomic updates across them.”h]”hŒùJournal uuid: identifies the object (filesystem, LVM volume etc) backed by this journal. This will eventually be replaced by an array of uuids, allowing us to index multiple devices within a single journal and to perform atomic updates across them.”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M2hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‡h´M5hju ubj)�”}”(hŒB``j_task`` Pointer to the current commit thread for this journal. ”h]”(j )�”}”(hŒ ``j_task``”h]”j®)�”}”(hj¬h]”hŒj_task”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M<hj¦ubj#)�”}”(hhh]”hî)�”}”(hŒ6Pointer to the current commit thread for this journal.”h]”hŒ6Pointer to the current commit thread for this journal.”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÁh´M<hjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÁh´M<hju ubj)�”}”(hŒs``j_max_transaction_buffers`` Maximum number of metadata buffers to allow in a single compound commit transaction. ”h]”(j )�”}”(hŒ``j_max_transaction_buffers``”h]”j®)�”}”(hjåh]”hŒj_max_transaction_buffers”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MBhjßubj#)�”}”(hhh]”hî)�”}”(hŒTMaximum number of metadata buffers to allow in a single compound commit transaction.”h]”hŒTMaximum number of metadata buffers to allow in a single compound commit transaction.”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MAhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³júh´MBhju ubj)�”}”(hŒZ``j_revoke_records_per_block`` Number of revoke records that fit in one descriptor block. ”h]”(j )�”}”(hŒ``j_revoke_records_per_block``”h]”j®)�”}”(hjh]”hŒj_revoke_records_per_block”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MIhjubj#)�”}”(hhh]”hî)�”}”(hŒ:Number of revoke records that fit in one descriptor block.”h]”hŒ:Number of revoke records that fit in one descriptor block.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j4h´MIhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j4h´MIhju ubj)�”}”(hŒc``j_transaction_overhead_buffers`` Number of blocks each transaction needs for its own bookkeeping ”h]”(j )�”}”(hŒ"``j_transaction_overhead_buffers``”h]”j®)�”}”(hjXh]”hŒj_transaction_overhead_buffers”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MPhjRubj#)�”}”(hhh]”hî)�”}”(hŒ?Number of blocks each transaction needs for its own bookkeeping”h]”hŒ?Number of blocks each transaction needs for its own bookkeeping”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jmh´MPhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jmh´MPhju ubj)�”}”(hŒY``j_commit_interval`` What is the maximum transaction lifetime before we begin a commit? ”h]”(j )�”}”(hŒ``j_commit_interval``”h]”j®)�”}”(hj‘h]”hŒj_commit_interval”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MWhj‹ubj#)�”}”(hhh]”hî)�”}”(hŒBWhat is the maximum transaction lifetime before we begin a commit?”h]”hŒBWhat is the maximum transaction lifetime before we begin a commit?”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j¦h´MWhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¦h´MWhju ubj)�”}”(hŒ?``j_commit_timer`` The timer used to wakeup the commit thread. ”h]”(j )�”}”(hŒ``j_commit_timer``”h]”j®)�”}”(hjÊh]”hŒj_commit_timer”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M^hjÄubj#)�”}”(hhh]”hî)�”}”(hŒ+The timer used to wakeup the commit thread.”h]”hŒ+The timer used to wakeup the commit thread.”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jßh´M^hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jßh´M^hju ubj)�”}”(hŒ,``j_revoke_lock`` Protect the revoke table. ”h]”(j )�”}”(hŒ``j_revoke_lock``”h]”j®)�”}”(hjh]”hŒ j_revoke_lock”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mchjýubj#)�”}”(hhh]”hî)�”}”(hŒProtect the revoke table.”h]”hŒProtect the revoke table.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jh´Mchjubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Mchju ubj)�”}”(hŒa``j_revoke`` The revoke table - maintains the list of revoked blocks in the current transaction. ”h]”(j )�”}”(hŒ ``j_revoke``”h]”j®)�”}”(hj<h]”hŒj_revoke”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mihj6ubj#)�”}”(hhh]”hî)�”}”(hŒSThe revoke table - maintains the list of revoked blocks in the current transaction.”h]”hŒSThe revoke table - maintains the list of revoked blocks in the current transaction.”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MhhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQh´Mihju ubj)�”}”(hŒ9``j_revoke_table`` Alternate revoke tables for j_revoke. ”h]”(j )�”}”(hŒ``j_revoke_table``”h]”j®)�”}”(hjvh]”hŒj_revoke_table”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mphjpubj#)�”}”(hhh]”hî)�”}”(hŒ%Alternate revoke tables for j_revoke.”h]”hŒ%Alternate revoke tables for j_revoke.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j‹h´MphjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹h´Mphju ubj)�”}”(hŒ=``j_wbuf`` Array of bhs for jbd2_journal_commit_transaction. ”h]”(j )�”}”(hŒ ``j_wbuf``”h]”j®)�”}”(hj¯h]”hŒj_wbuf”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Muhj©ubj#)�”}”(hhh]”hî)�”}”(hŒ1Array of bhs for jbd2_journal_commit_transaction.”h]”hŒ1Array of bhs for jbd2_journal_commit_transaction.”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÄh´MuhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÄh´Muhju ubj)�”}”(hŒ³``j_fc_wbuf`` Array of fast commit bhs for fast commit. Accessed only during a fast commit. Currently only process can do fast commit, so this field is not protected by any lock. ”h]”(j )�”}”(hŒ ``j_fc_wbuf``”h]”j®)�”}”(hjèh]”hŒ j_fc_wbuf”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M|hjâubj#)�”}”(hhh]”hî)�”}”(hŒ¤Array of fast commit bhs for fast commit. Accessed only during a fast commit. Currently only process can do fast commit, so this field is not protected by any lock.”h]”hŒ¤Array of fast commit bhs for fast commit. Accessed only during a fast commit. Currently only process can do fast commit, so this field is not protected by any lock.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mzhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jýh´M|hju ubj)�”}”(hŒ)``j_wbufsize`` Size of **j_wbuf** array. ”h]”(j )�”}”(hŒ``j_wbufsize``”h]”j®)�”}”(hj"h]”hŒ j_wbufsize”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M�hjubj#)�”}”(hhh]”hî)�”}”(hŒSize of **j_wbuf** array.”h]”(hŒSize of ”…”�”}”(hj;h²hh³Nh´Nubj=)�”}”(hŒ **j_wbuf**”h]”hŒj_wbuf”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj;ubhŒ array.”…”�”}”(hj;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³j7h´M�hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7h´M�hju ubj)�”}”(hŒ/``j_fc_wbufsize`` Size of **j_fc_wbuf** array. ”h]”(j )�”}”(hŒ``j_fc_wbufsize``”h]”j®)�”}”(hjmh]”hŒ j_fc_wbufsize”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjkubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mˆhjgubj#)�”}”(hhh]”hî)�”}”(hŒSize of **j_fc_wbuf** array.”h]”(hŒSize of ”…”�”}”(hj†h²hh³Nh´Nubj=)�”}”(hŒ **j_fc_wbuf**”h]”hŒ j_fc_wbuf”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj†ubhŒ array.”…”�”}”(hj†h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³j‚h´Mˆhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚h´Mˆhju ubj)�”}”(hŒf``j_last_sync_writer`` The pid of the last person to run a synchronous operation through the journal. ”h]”(j )�”}”(hŒ``j_last_sync_writer``”h]”j®)�”}”(hj¸h]”hŒj_last_sync_writer”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M�hj²ubj#)�”}”(hhh]”hî)�”}”(hŒNThe pid of the last person to run a synchronous operation through the journal.”h]”hŒNThe pid of the last person to run a synchronous operation through the journal.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M�hjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÍh´M�hju ubj)�”}”(hŒ}``j_average_commit_time`` The average amount of time in nanoseconds it takes to commit a transaction to disk. [j_state_lock] ”h]”(j )�”}”(hŒ``j_average_commit_time``”h]”j®)�”}”(hjòh]”hŒj_average_commit_time”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M˜hjìubj#)�”}”(hhh]”hî)�”}”(hŒbThe average amount of time in nanoseconds it takes to commit a transaction to disk. [j_state_lock]”h]”hŒbThe average amount of time in nanoseconds it takes to commit a transaction to disk. [j_state_lock]”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M—hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M˜hju ubj)�”}”(hŒ•``j_min_batch_time`` Minimum time that we should wait for additional filesystem operations to get batched into a synchronous handle in microseconds. ”h]”(j )�”}”(hŒ``j_min_batch_time``”h]”j®)�”}”(hj,h]”hŒj_min_batch_time”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M hj&ubj#)�”}”(hhh]”hî)�”}”(hŒMinimum time that we should wait for additional filesystem operations to get batched into a synchronous handle in microseconds.”h]”hŒMinimum time that we should wait for additional filesystem operations to get batched into a synchronous handle in microseconds.”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MŸhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jAh´M hju ubj)�”}”(hŒ•``j_max_batch_time`` Maximum time that we should wait for additional filesystem operations to get batched into a synchronous handle in microseconds. ”h]”(j )�”}”(hŒ``j_max_batch_time``”h]”j®)�”}”(hjfh]”hŒj_max_batch_time”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M¨hj`ubj#)�”}”(hhh]”hî)�”}”(hŒMaximum time that we should wait for additional filesystem operations to get batched into a synchronous handle in microseconds.”h]”hŒMaximum time that we should wait for additional filesystem operations to get batched into a synchronous handle in microseconds.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M§hj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{h´M¨hju ubj)�”}”(hŒL``j_commit_callback`` This function is called when a transaction is closed. ”h]”(j )�”}”(hŒ``j_commit_callback``”h]”j®)�”}”(hj h]”hŒj_commit_callback”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M¯hjšubj#)�”}”(hhh]”hî)�”}”(hŒ5This function is called when a transaction is closed.”h]”hŒ5This function is called when a transaction is closed.”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jµh´M¯hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµh´M¯hju ubj)�”}”(hŒÎ``j_submit_inode_data_buffers`` This function is called for all inodes associated with the committing transaction marked with JI_WRITE_DATA flag before we start to write out the transaction to the journal. ”h]”(j )�”}”(hŒ``j_submit_inode_data_buffers``”h]”j®)�”}”(hjÙh]”hŒj_submit_inode_data_buffers”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M¹hjÓubj#)�”}”(hhh]”hî)�”}”(hŒ­This function is called for all inodes associated with the committing transaction marked with JI_WRITE_DATA flag before we start to write out the transaction to the journal.”h]”hŒ­This function is called for all inodes associated with the committing transaction marked with JI_WRITE_DATA flag before we start to write out the transaction to the journal.”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´M·hjïubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jîh´M¹hju ubj)�”}”(hŒï``j_finish_inode_data_buffers`` This function is called for all inodes associated with the committing transaction marked with JI_WAIT_DATA flag after we have written the transaction to the journal but before we write out the commit block. ”h]”(j )�”}”(hŒ``j_finish_inode_data_buffers``”h]”j®)�”}”(hjh]”hŒj_finish_inode_data_buffers”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÄhj ubj#)�”}”(hhh]”hî)�”}”(hŒÎThis function is called for all inodes associated with the committing transaction marked with JI_WAIT_DATA flag after we have written the transaction to the journal but before we write out the commit block.”h]”hŒÎThis function is called for all inodes associated with the committing transaction marked with JI_WAIT_DATA flag after we have written the transaction to the journal but before we write out the commit block.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÁhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(h´MÄhju ubj)�”}”(hŒ@``j_history_lock`` Protect the transactions statistics history. ”h]”(j )�”}”(hŒ``j_history_lock``”h]”j®)�”}”(hjMh]”hŒj_history_lock”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÐhjGubj#)�”}”(hhh]”hî)�”}”(hŒ,Protect the transactions statistics history.”h]”hŒ,Protect the transactions statistics history.”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jbh´MÐhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jbh´MÐhju ubj)�”}”(hŒ@``j_proc_entry`` procfs entry for the jbd statistics directory. ”h]”(j )�”}”(hŒ``j_proc_entry``”h]”j®)�”}”(hj†h]”hŒ j_proc_entry”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÕhj€ubj#)�”}”(hhh]”hî)�”}”(hŒ.procfs entry for the jbd statistics directory.”h]”hŒ.procfs entry for the jbd statistics directory.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j›h´MÕhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›h´MÕhju ubj)�”}”(hŒ ``j_stats`` Overall statistics. ”h]”(j )�”}”(hŒ ``j_stats``”h]”j®)�”}”(hj¿h]”hŒj_stats”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MÚhj¹ubj#)�”}”(hhh]”hî)�”}”(hŒOverall statistics.”h]”hŒOverall statistics.”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÔh´MÚhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔh´MÚhju ubj)�”}”(hŒ.``j_failed_commit`` Failed journal commit ID. ”h]”(j )�”}”(hŒ``j_failed_commit``”h]”j®)�”}”(hjøh]”hŒj_failed_commit”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjöubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mßhjòubj#)�”}”(hhh]”hî)�”}”(hŒFailed journal commit ID.”h]”hŒFailed journal commit ID.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j h´Mßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjòubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´Mßhju ubj)�”}”(hŒc``j_private`` An opaque pointer to fs-private information. ext3 puts its superblock pointer here. ”h]”(j )�”}”(hŒ ``j_private``”h]”j®)�”}”(hj1h]”hŒ j_private”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Måhj+ubj#)�”}”(hhh]”hî)�”}”(hŒTAn opaque pointer to fs-private information. ext3 puts its superblock pointer here.”h]”hŒTAn opaque pointer to fs-private information. ext3 puts its superblock pointer here.”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MähjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jFh´Måhju ubj)�”}”(hŒO``j_csum_seed`` Precomputed journal UUID checksum for seeding other checksums. ”h]”(j )�”}”(hŒ``j_csum_seed``”h]”j®)�”}”(hjkh]”hŒ j_csum_seed”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mìhjeubj#)�”}”(hhh]”hî)�”}”(hŒ>Precomputed journal UUID checksum for seeding other checksums.”h]”hŒ>Precomputed journal UUID checksum for seeding other checksums.”…”�”•}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j€h´Mìhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j€h´Mìhju ubj)�”}”(hXˆ``j_trans_commit_map`` Lockdep entity to track transaction commit dependencies. Handles hold this "lock" for read, when we wait for commit, we acquire the "lock" for writing. This matches the properties of jbd2 journalling where the running transaction has to wait for all handles to be dropped to commit that transaction and also acquiring a handle may require transaction commit to finish. ”h]”(j )�”}”(hŒ``j_trans_commit_map``”h]”j®)�”}”(hj¤h]”hŒj_trans_commit_map”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mùhjžubj#)�”}”(hhh]”hî)�”}”(hXpLockdep entity to track transaction commit dependencies. Handles hold this "lock" for read, when we wait for commit, we acquire the "lock" for writing. This matches the properties of jbd2 journalling where the running transaction has to wait for all handles to be dropped to commit that transaction and also acquiring a handle may require transaction commit to finish.”h]”hXxLockdep entity to track transaction commit dependencies. Handles hold this “lockâ€� for read, when we wait for commit, we acquire the “lockâ€� for writing. This matches the properties of jbd2 journalling where the running transaction has to wait for all handles to be dropped to commit that transaction and also acquiring a handle may require transaction commit to finish.”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Môhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¹h´Mùhju ubj)�”}”(hŒM``jbd2_trans_commit_key`` "struct lock_class_key" for **j_trans_commit_map** ”h]”(j )�”}”(hŒ``jbd2_trans_commit_key``”h]”j®)�”}”(hjÞh]”hŒjbd2_trans_commit_key”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MhjØubj#)�”}”(hhh]”hî)�”}”(hŒ2"struct lock_class_key" for **j_trans_commit_map**”h]”(hŒ “struct lock_class_keyâ€� for ”…”�”}”(hj÷h²hh³Nh´Nubj=)�”}”(hŒ**j_trans_commit_map**”h]”hŒj_trans_commit_map”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³jóh´Mhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jóh´Mhju ubj)�”}”(hŒ|``j_fc_cleanup_callback`` Clean-up after fast commit or full commit. JBD2 calls this function after every commit operation. ”h]”(j )�”}”(hŒ``j_fc_cleanup_callback``”h]”j®)�”}”(hj%h]”hŒj_fc_cleanup_callback”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhjubj#)�”}”(hhh]”hî)�”}”(hŒaClean-up after fast commit or full commit. JBD2 calls this function after every commit operation.”h]”hŒaClean-up after fast commit or full commit. JBD2 calls this function after every commit operation.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:h´Mhju ubj)�”}”(hXÁ``j_fc_replay_callback`` File-system specific function that performs replay of a fast commit. JBD2 calls this function for each fast commit block found in the journal. This function should return JBD2_FC_REPLAY_CONTINUE to indicate that the block was processed correctly and more fast commit replay should continue. Return value of JBD2_FC_REPLAY_STOP indicates the end of replay (no more blocks remaining). A negative return value indicates error. ”h]”(j )�”}”(hŒ``j_fc_replay_callback``”h]”j®)�”}”(hj_h]”hŒj_fc_replay_callback”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´MhjYubj#)�”}”(hhh]”hî)�”}”(hX§File-system specific function that performs replay of a fast commit. JBD2 calls this function for each fast commit block found in the journal. This function should return JBD2_FC_REPLAY_CONTINUE to indicate that the block was processed correctly and more fast commit replay should continue. Return value of JBD2_FC_REPLAY_STOP indicates the end of replay (no more blocks remaining). A negative return value indicates error.”h]”hX§File-system specific function that performs replay of a fast commit. JBD2 calls this function for each fast commit block found in the journal. This function should return JBD2_FC_REPLAY_CONTINUE to indicate that the block was processed correctly and more fast commit replay should continue. Return value of JBD2_FC_REPLAY_STOP indicates the end of replay (no more blocks remaining). A negative return value indicates error.”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jth´Mhju ubj)�”}”(hŒV``j_bmap`` Bmap function that should be used instead of the generic VFS bmap function.”h]”(j )�”}”(hŒ ``j_bmap``”h]”j®)�”}”(hj™h]”hŒj_bmap”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:182: ./include/linux/jbd2.h”h´Mhj“ubj#)�”}”(hhh]”hî)�”}”(hŒKBmap function that should be used instead of the generic VFS bmap function.”h]”hŒKBmap function that should be used instead of the generic VFS bmap function.”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j®h´Mhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j®h´Mhju ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhj- ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj‰h²hh³Nh´Nubeh}”(h]”Œ structures”ah ]”h"]”Œ structures”ah$]”h&]”uh1hµhjjh²hh³hÊh´K´ubeh}”(h]”Œ data-types”ah ]”h"]”Œ data types”ah$]”h&]”uh1hµhh·h²hh³hÊh´K¬ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Functions”h]”hŒ Functions”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjéh²hh³hÊh´Kºubhî)�”}”(hŒ„The functions here are split into two groups those that affect a journal as a whole, and those which are used to manage transactions”h]”hŒ„The functions here are split into two groups those that affect a journal as a whole, and those which are used to manage transactions”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´K¼hjéh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ Journal Level”h]”hŒ Journal Level”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KÀubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ-jbd2_journal_force_commit_nested (C function)”Œ"c.jbd2_journal_force_commit_nested”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ9int jbd2_journal_force_commit_nested (journal_t *journal)”h]”j·)�”}”(hŒ8int jbd2_journal_force_commit_nested(journal_t *journal)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒint”h]”hŒint”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j2hj.h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj.h²hh³jCh´Mubjà)�”}”(hŒ jbd2_journal_force_commit_nested”h]”jæ)�”}”(hŒ jbd2_journal_force_commit_nested”h]”hŒ jbd2_journal_force_commit_nested”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjRubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj.h²hh³jCh´MubhŒdesc_parameterlist”“”)�”}”(hŒ(journal_t *journal)”h]”hŒdesc_parameter”“”)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjvubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”Œ identifier”Œ reftarget”j{Œmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j”Œ ASTIdentifier”“”)�”}”j�jXsbŒ"c.jbd2_journal_force_commit_nested”†”asbuh1hhjrubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjrubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j¯hjrubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjlubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj.h²hh³jCh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj*h²hh³jCh´Mubah}”(h]”j%ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jCh´Mhj'h²hubj)�”}”(hhh]”hî)�”}”(hŒNForce and wait upon a commit if the calling process is not within transaction.”h]”hŒNForce and wait upon a commit if the calling process is not within transaction.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mhjçh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'h²hh³jCh´Mubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j j4j j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hŒÞ**Parameters** ``journal_t *journal`` journal to force Returns true if progress was made. **Description** This is used for forcing out undo-protected data which contains bitmaps, when the fs is running out of space.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mhj ubjþ)�”}”(hhh]”j)�”}”(hŒK``journal_t *journal`` journal to force Returns true if progress was made. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hj+ h]”hŒjournal_t *journal”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj) ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mhj% ubj#)�”}”(hhh]”hî)�”}”(hŒ3journal to force Returns true if progress was made.”h]”hŒ3journal to force Returns true if progress was made.”…”�”}”(hjD h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MhjA ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj% ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@ h´Mhj" ubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhj ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjg h]”hŒ Description”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hje ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mhj ubhî)�”}”(hŒmThis is used for forcing out undo-protected data which contains bitmaps, when the fs is running out of space.”h]”hŒmThis is used for forcing out undo-protected data which contains bitmaps, when the fs is running out of space.”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ&jbd2_journal_force_commit (C function)”Œc.jbd2_journal_force_commit”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ2int jbd2_journal_force_commit (journal_t *journal)”h]”j·)�”}”(hŒ1int jbd2_journal_force_commit(journal_t *journal)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj¨ h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M#ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj¨ h²hh³jº h´M#ubjà)�”}”(hŒjbd2_journal_force_commit”h]”jæ)�”}”(hŒjbd2_journal_force_commit”h]”hŒjbd2_journal_force_commit”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÉ ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj¨ h²hh³jº h´M#ubjk)�”}”(hŒ(journal_t *journal)”h]”jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjé ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jî Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�jÏ sbŒc.jbd2_journal_force_commit”†”asbuh1hhjå ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjå ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjå ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hj'!h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjå ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjá ubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj¨ h²hh³jº h´M#ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj¤ h²hh³jº h´M#ubah}”(h]”jŸ ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jº h´M#hj¡ h²hubj)�”}”(hhh]”hî)�”}”(hŒ"force any uncommitted transactions”h]”hŒ"force any uncommitted transactions”…”�”}”(hjQ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M#hjN!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡ h²hh³jº h´M#ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3ji!j4ji!j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hŒ×**Parameters** ``journal_t *journal`` journal to force **Description** Caller want unconditional commit. We can only force the running transaction if we don't have an active handle, otherwise, we will deadlock.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjs!h]”hŒ Parameters”…”�”}”(hju!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjq!ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M'hjm!ubjþ)�”}”(hhh]”j)�”}”(hŒ(``journal_t *journal`` journal to force ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hj’!h]”hŒjournal_t *journal”…”�”}”(hj”!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj�!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M$hjŒ!ubj#)�”}”(hhh]”hî)�”}”(hŒjournal to force”h]”hŒjournal to force”…”�”}”(hj«!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j§!h´M$hj¨!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjŒ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§!h´M$hj‰!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhjm!ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjÍ!h]”hŒ Description”…”�”}”(hjÏ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjË!ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M&hjm!ubhî)�”}”(hŒ‹Caller want unconditional commit. We can only force the running transaction if we don't have an active handle, otherwise, we will deadlock.”h]”hŒ�Caller want unconditional commit. We can only force the running transaction if we don’t have an active handle, otherwise, we will deadlock.”…”�”}”(hjã!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M%hjm!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ"jbd2_journal_init_dev (C function)”Œc.jbd2_journal_init_dev”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒŒjournal_t * jbd2_journal_init_dev (struct block_device *bdev, struct block_device *fs_dev, unsigned long long start, int len, int blocksize)”h]”j·)�”}”(hŒŠjournal_t *jbd2_journal_init_dev(struct block_device *bdev, struct block_device *fs_dev, unsigned long long start, int len, int blocksize)”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j"Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�Œjbd2_journal_init_dev”sbŒc.jbd2_journal_init_dev”†”asbuh1hhj"h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M[ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7"h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj"h²hh³j6"h´M[ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjE"h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj"h²hh³j6"h´M[ubjà)�”}”(hŒjbd2_journal_init_dev”h]”jæ)�”}”(hj3"h]”hŒjbd2_journal_init_dev”…”�”}”(hjV"h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjR"ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj"h²hh³j6"h´M[ubjk)�”}”(hŒj(struct block_device *bdev, struct block_device *fs_dev, unsigned long long start, int len, int blocksize)”h]”(jq)�”}”(hŒstruct block_device *bdev”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hjq"h²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjm"ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~"h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjm"ubh)�”}”(hhh]”jæ)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hj�"h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjŒ"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j‘"Œmodname”NŒ classname”Nj“j–)�”}”j™]”j1"Œc.jbd2_journal_init_dev”†”asbuh1hhjm"ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­"h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjm"ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj»"h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjm"ubjæ)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjÈ"h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjm"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphji"ubjq)�”}”(hŒstruct block_device *fs_dev”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hjá"h²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjÝ"ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî"h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÝ"ubh)�”}”(hhh]”jæ)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hjÿ"h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjü"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j#Œmodname”NŒ classname”Nj“j–)�”}”j™]”j1"Œc.jbd2_journal_init_dev”†”asbuh1hhjÝ"ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÝ"ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj+#h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjÝ"ubjæ)�”}”(hŒfs_dev”h]”hŒfs_dev”…”�”}”(hj8#h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÝ"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphji"ubjq)�”}”(hŒunsigned long long start”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjQ#h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjM#ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_#h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjM#ubj3)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjm#h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjM#ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{#h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjM#ubj3)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‰#h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjM#ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—#h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjM#ubjæ)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj¥#h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjM#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphji"ubjq)�”}”(hŒint len”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj¾#h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjº#ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ#h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjº#ubjæ)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjÚ#h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjº#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphji"ubjq)�”}”(hŒ int blocksize”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjó#h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjï#ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjï#ubjæ)�”}”(hŒ blocksize”h]”hŒ blocksize”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjï#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphji"ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj"h²hh³j6"h´M[ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj "h²hh³j6"h´M[ubah}”(h]”j"ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j6"h´M[hj"h²hubj)�”}”(hhh]”hî)�”}”(hŒ+creates and initialises a journal structure”h]”hŒ+creates and initialises a journal structure”…”�”}”(hj9$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M[hj6$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"h²hh³j6"h´M[ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jQ$j4jQ$j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hX **Parameters** ``struct block_device *bdev`` Block device on which to create the journal ``struct block_device *fs_dev`` Device which hold journalled filesystem for this journal. ``unsigned long long start`` Block nr Start of journal. ``int len`` Length of the journal in blocks. ``int blocksize`` blocksize of journalling device **Return** a newly created journal_t * **Description** jbd2_journal_init_dev creates a journal which maps a fixed contiguous range of blocks on an arbitrary block device.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj[$h]”hŒ Parameters”…”�”}”(hj]$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjY$ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M_hjU$ubjþ)�”}”(hhh]”(j)�”}”(hŒJ``struct block_device *bdev`` Block device on which to create the journal ”h]”(j )�”}”(hŒ``struct block_device *bdev``”h]”j®)�”}”(hjz$h]”hŒstruct block_device *bdev”…”�”}”(hj|$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjx$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M\hjt$ubj#)�”}”(hhh]”hî)�”}”(hŒ+Block device on which to create the journal”h]”hŒ+Block device on which to create the journal”…”�”}”(hj“$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j�$h´M\hj�$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjt$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�$h´M\hjq$ubj)�”}”(hŒZ``struct block_device *fs_dev`` Device which hold journalled filesystem for this journal. ”h]”(j )�”}”(hŒ``struct block_device *fs_dev``”h]”j®)�”}”(hj³$h]”hŒstruct block_device *fs_dev”…”�”}”(hjµ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj±$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M]hj­$ubj#)�”}”(hhh]”hî)�”}”(hŒ9Device which hold journalled filesystem for this journal.”h]”hŒ9Device which hold journalled filesystem for this journal.”…”�”}”(hjÌ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÈ$h´M]hjÉ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj­$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÈ$h´M]hjq$ubj)�”}”(hŒ8``unsigned long long start`` Block nr Start of journal. ”h]”(j )�”}”(hŒ``unsigned long long start``”h]”j®)�”}”(hjì$h]”hŒunsigned long long start”…”�”}”(hjî$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjê$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M^hjæ$ubj#)�”}”(hhh]”hî)�”}”(hŒBlock nr Start of journal.”h]”hŒBlock nr Start of journal.”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j%h´M^hj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjæ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j%h´M^hjq$ubj)�”}”(hŒ-``int len`` Length of the journal in blocks. ”h]”(j )�”}”(hŒ ``int len``”h]”j®)�”}”(hj%%h]”hŒint len”…”�”}”(hj'%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj#%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M_hj%ubj#)�”}”(hhh]”hî)�”}”(hŒ Length of the journal in blocks.”h]”hŒ Length of the journal in blocks.”…”�”}”(hj>%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j:%h´M_hj;%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:%h´M_hjq$ubj)�”}”(hŒ2``int blocksize`` blocksize of journalling device ”h]”(j )�”}”(hŒ``int blocksize``”h]”j®)�”}”(hj^%h]”hŒ int blocksize”…”�”}”(hj`%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj\%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M`hjX%ubj#)�”}”(hhh]”hî)�”}”(hŒblocksize of journalling device”h]”hŒblocksize of journalling device”…”�”}”(hjw%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³js%h´M`hjt%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjX%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³js%h´M`hjq$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhjU$ubhî)�”}”(hŒ **Return**”h]”j=)�”}”(hj™%h]”hŒReturn”…”�”}”(hj›%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj—%ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MbhjU$ubhî)�”}”(hŒa newly created journal_t *”h]”hŒa newly created journal_t *”…”�”}”(hj¯%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MbhjU$ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjÀ%h]”hŒ Description”…”�”}”(hjÂ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj¾%ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MdhjU$ubhŒ block_quote”“”)�”}”(hŒsjbd2_journal_init_dev creates a journal which maps a fixed contiguous range of blocks on an arbitrary block device.”h]”hî)�”}”(hŒsjbd2_journal_init_dev creates a journal which maps a fixed contiguous range of blocks on an arbitrary block device.”h]”hŒsjbd2_journal_init_dev creates a journal which maps a fixed contiguous range of blocks on an arbitrary block device.”…”�”}”(hjÜ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MchjØ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÖ%h³jê%h´MchjU$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ$jbd2_journal_init_inode (C function)”Œc.jbd2_journal_init_inode”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ9journal_t * jbd2_journal_init_inode (struct inode *inode)”h]”j·)�”}”(hŒ7journal_t *jbd2_journal_init_inode(struct inode *inode)”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j&Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�Œjbd2_journal_init_inode”sbŒc.jbd2_journal_init_inode”†”asbuh1hhj &h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M{ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6&h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj &h²hh³j5&h´M{ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjD&h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj &h²hh³j5&h´M{ubjà)�”}”(hŒjbd2_journal_init_inode”h]”jæ)�”}”(hj2&h]”hŒjbd2_journal_init_inode”…”�”}”(hjU&h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjQ&ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj &h²hh³j5&h´M{ubjk)�”}”(hŒ(struct inode *inode)”h]”jq)�”}”(hŒstruct inode *inode”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hjp&h²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjl&ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}&h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjl&ubh)�”}”(hhh]”jæ)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjŽ&h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj‹&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j�&Œmodname”NŒ classname”Nj“j–)�”}”j™]”j0&Œc.jbd2_journal_init_inode”†”asbuh1hhjl&ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬&h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjl&ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjº&h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjl&ubjæ)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÇ&h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjl&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjh&ubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj &h²hh³j5&h´M{ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj &h²hh³j5&h´M{ubah}”(h]”j&ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j5&h´M{hj&h²hubj)�”}”(hhh]”hî)�”}”(hŒ(creates a journal which maps to a inode.”h]”hŒ(creates a journal which maps to a inode.”…”�”}”(hjñ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M{hjî&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj&h²hh³j5&h´M{ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j 'j4j 'j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hX**Parameters** ``struct inode *inode`` An inode to create the journal in **Description** jbd2_journal_init_inode creates a journal which maps an on-disk inode as the journal. The inode must exist already, must support bmap() and must have all data blocks preallocated.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj'h]”hŒ Parameters”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mhj 'ubjþ)�”}”(hhh]”j)�”}”(hŒ:``struct inode *inode`` An inode to create the journal in ”h]”(j )�”}”(hŒ``struct inode *inode``”h]”j®)�”}”(hj2'h]”hŒstruct inode *inode”…”�”}”(hj4'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj0'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M|hj,'ubj#)�”}”(hhh]”hî)�”}”(hŒ!An inode to create the journal in”h]”hŒ!An inode to create the journal in”…”�”}”(hjK'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jG'h´M|hjH'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj,'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jG'h´M|hj)'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhj 'ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjm'h]”hŒ Description”…”�”}”(hjo'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjk'ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M~hj 'ubhî)�”}”(hŒ´jbd2_journal_init_inode creates a journal which maps an on-disk inode as the journal. The inode must exist already, must support bmap() and must have all data blocks preallocated.”h]”hŒ´jbd2_journal_init_inode creates a journal which maps an on-disk inode as the journal. The inode must exist already, must support bmap() and must have all data blocks preallocated.”…”�”}”(hjƒ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M}hj 'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ)jbd2_journal_update_sb_errno (C function)”Œc.jbd2_journal_update_sb_errno”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ6void jbd2_journal_update_sb_errno (journal_t *journal)”h]”j·)�”}”(hŒ5void jbd2_journal_update_sb_errno(journal_t *journal)”h]”(j3)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj²'h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj®'h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MïubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ'h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj®'h²hh³jÀ'h´Mïubjà)�”}”(hŒjbd2_journal_update_sb_errno”h]”jæ)�”}”(hŒjbd2_journal_update_sb_errno”h]”hŒjbd2_journal_update_sb_errno”…”�”}”(hjÓ'h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÏ'ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj®'h²hh³jÀ'h´Mïubjk)�”}”(hŒ(journal_t *journal)”h]”jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjò'h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjï'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jô'Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�jÕ'sbŒc.jbd2_journal_update_sb_errno”†”asbuh1hhjë'ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjë'ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj (h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjë'ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hj-(h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjë'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjç'ubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj®'h²hh³jÀ'h´Mïubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjª'h²hh³jÀ'h´Mïubah}”(h]”j¥'ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jÀ'h´Mïhj§'h²hubj)�”}”(hhh]”hî)�”}”(hŒUpdate error in the journal.”h]”hŒUpdate error in the journal.”…”�”}”(hjW(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MïhjT(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§'h²hh³jÀ'h´Mïubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jo(j4jo(j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hŒ©**Parameters** ``journal_t *journal`` The journal to update. **Description** Update a journal's errno. Write updated superblock to disk waiting for IO to complete.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjy(h]”hŒ Parameters”…”�”}”(hj{(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjw(ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Móhjs(ubjþ)�”}”(hhh]”j)�”}”(hŒ.``journal_t *journal`` The journal to update. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hj˜(h]”hŒjournal_t *journal”…”�”}”(hjš(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj–(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mðhj’(ubj#)�”}”(hhh]”hî)�”}”(hŒThe journal to update.”h]”hŒThe journal to update.”…”�”}”(hj±(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j­(h´Mðhj®(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj’(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j­(h´Mðhj�(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhjs(ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjÓ(h]”hŒ Description”…”�”}”(hjÕ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjÑ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mòhjs(ubhî)�”}”(hŒWUpdate a journal's errno. Write updated superblock to disk waiting for IO to complete.”h]”hŒYUpdate a journal’s errno. Write updated superblock to disk waiting for IO to complete.”…”�”}”(hjé(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mñhjs(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œjbd2_journal_load (C function)”Œc.jbd2_journal_load”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ*int jbd2_journal_load (journal_t *journal)”h]”j·)�”}”(hŒ)int jbd2_journal_load(journal_t *journal)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj)h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj')h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj)h²hh³j&)h´Mubjà)�”}”(hŒjbd2_journal_load”h]”jæ)�”}”(hŒjbd2_journal_load”h]”hŒjbd2_journal_load”…”�”}”(hj9)h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj5)ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj)h²hh³j&)h´Mubjk)�”}”(hŒ(journal_t *journal)”h]”jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjX)h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjU)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jZ)Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j;)sbŒc.jbd2_journal_load”†”asbuh1hhjQ)ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx)h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjQ)ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj†)h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjQ)ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hj“)h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjQ)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjM)ubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj)h²hh³j&)h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj)h²hh³j&)h´Mubah}”(h]”j )ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j&)h´Mhj )h²hubj)�”}”(hhh]”hî)�”}”(hŒRead journal from disk.”h]”hŒRead journal from disk.”…”�”}”(hj½)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mhjº)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj )h²hh³j&)h´Mubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jÕ)j4jÕ)j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hŒà**Parameters** ``journal_t *journal`` Journal to act on. **Description** Given a journal_t structure which tells us which disk blocks contain a journal, read the journal from disk to initialise the in-memory structures.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjß)h]”hŒ Parameters”…”�”}”(hjá)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjÝ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M hjÙ)ubjþ)�”}”(hhh]”j)�”}”(hŒ*``journal_t *journal`` Journal to act on. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hjþ)h]”hŒjournal_t *journal”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjü)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mhjø)ubj#)�”}”(hhh]”hî)�”}”(hŒJournal to act on.”h]”hŒJournal to act on.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j*h´Mhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjø)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j*h´Mhjõ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhjÙ)ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj9*h]”hŒ Description”…”�”}”(hj;*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj7*ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M hjÙ)ubhî)�”}”(hŒ’Given a journal_t structure which tells us which disk blocks contain a journal, read the journal from disk to initialise the in-memory structures.”h]”hŒ’Given a journal_t structure which tells us which disk blocks contain a journal, read the journal from disk to initialise the in-memory structures.”…”�”}”(hjO*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MhjÙ)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ!jbd2_journal_destroy (C function)”Œc.jbd2_journal_destroy”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ-int jbd2_journal_destroy (journal_t *journal)”h]”j·)�”}”(hŒ,int jbd2_journal_destroy(journal_t *journal)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj~*h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjz*h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M3ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�*h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjz*h²hh³jŒ*h´M3ubjà)�”}”(hŒjbd2_journal_destroy”h]”jæ)�”}”(hŒjbd2_journal_destroy”h]”hŒjbd2_journal_destroy”…”�”}”(hjŸ*h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj›*ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjz*h²hh³jŒ*h´M3ubjk)�”}”(hŒ(journal_t *journal)”h]”jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hj¾*h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj»*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jÀ*Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j¡*sbŒc.jbd2_journal_destroy”†”asbuh1hhj·*ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ*h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj·*ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjì*h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj·*ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hjù*h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj·*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj³*ubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjz*h²hh³jŒ*h´M3ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjv*h²hh³jŒ*h´M3ubah}”(h]”jq*ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jŒ*h´M3hjs*h²hubj)�”}”(hhh]”hî)�”}”(hŒRelease a journal_t structure.”h]”hŒRelease a journal_t structure.”…”�”}”(hj#+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M3hj +h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjs*h²hh³jŒ*h´M3ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j;+j4j;+j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hŒÏ**Parameters** ``journal_t *journal`` Journal to act on. **Description** Release a journal_t structure once it is no longer in use by the journaled object. Return <0 if we couldn't clean up the journal.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjE+h]”hŒ Parameters”…”�”}”(hjG+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjC+ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M7hj?+ubjþ)�”}”(hhh]”j)�”}”(hŒ*``journal_t *journal`` Journal to act on. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hjd+h]”hŒjournal_t *journal”…”�”}”(hjf+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjb+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M4hj^+ubj#)�”}”(hhh]”hî)�”}”(hŒJournal to act on.”h]”hŒJournal to act on.”…”�”}”(hj}+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jy+h´M4hjz+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj^+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jy+h´M4hj[+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhj?+ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjŸ+h]”hŒ Description”…”�”}”(hj¡+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj�+ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M6hj?+ubhî)�”}”(hŒ�Release a journal_t structure once it is no longer in use by the journaled object. Return <0 if we couldn't clean up the journal.”h]”hŒƒRelease a journal_t structure once it is no longer in use by the journaled object. Return <0 if we couldn’t clean up the journal.”…”�”}”(hjµ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M5hj?+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ-jbd2_journal_check_used_features (C function)”Œ"c.jbd2_journal_check_used_features”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒyint jbd2_journal_check_used_features (journal_t *journal, unsigned long compat, unsigned long ro, unsigned long incompat)”h]”j·)�”}”(hŒxint jbd2_journal_check_used_features(journal_t *journal, unsigned long compat, unsigned long ro, unsigned long incompat)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjä+h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjà+h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MŽubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó+h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjà+h²hh³jò+h´MŽubjà)�”}”(hŒ jbd2_journal_check_used_features”h]”jæ)�”}”(hŒ jbd2_journal_check_used_features”h]”hŒ jbd2_journal_check_used_features”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj,ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjà+h²hh³jò+h´MŽubjk)�”}”(hŒT(journal_t *journal, unsigned long compat, unsigned long ro, unsigned long incompat)”h]”(jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hj$,h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj!,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j&,Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j,sbŒ"c.jbd2_journal_check_used_features”†”asbuh1hhj,ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD,h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj,ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjR,h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj,ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hj_,h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj,ubjq)�”}”(hŒunsigned long compat”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjx,h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjt,ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†,h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjt,ubj3)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj”,h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjt,ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢,h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjt,ubjæ)�”}”(hŒcompat”h]”hŒcompat”…”�”}”(hj°,h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjt,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj,ubjq)�”}”(hŒunsigned long ro”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÉ,h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÅ,ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×,h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÅ,ubj3)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjå,h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÅ,ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó,h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÅ,ubjæ)�”}”(hŒro”h]”hŒro”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÅ,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj,ubjq)�”}”(hŒunsigned long incompat”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj-ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(-h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj-ubj3)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj6-h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj-ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD-h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj-ubjæ)�”}”(hŒincompat”h]”hŒincompat”…”�”}”(hjR-h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj,ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjà+h²hh³jò+h´MŽubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjÜ+h²hh³jò+h´MŽubah}”(h]”j×+ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jò+h´MŽhjÙ+h²hubj)�”}”(hhh]”hî)�”}”(hŒ%Check if features specified are used.”h]”hŒ%Check if features specified are used.”…”�”}”(hj|-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MŽhjy-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ+h²hh³jò+h´MŽubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j”-j4j”-j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hXp**Parameters** ``journal_t *journal`` Journal to check. ``unsigned long compat`` bitmask of compatible features ``unsigned long ro`` bitmask of features that force read-only mount ``unsigned long incompat`` bitmask of incompatible features **Description** Check whether the journal uses all of a given set of features. Return true (non-zero) if it does.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjž-h]”hŒ Parameters”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjœ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M’hj˜-ubjþ)�”}”(hhh]”(j)�”}”(hŒ)``journal_t *journal`` Journal to check. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hj½-h]”hŒjournal_t *journal”…”�”}”(hj¿-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj»-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M�hj·-ubj#)�”}”(hhh]”hî)�”}”(hŒJournal to check.”h]”hŒJournal to check.”…”�”}”(hjÖ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÒ-h´M�hjÓ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj·-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒ-h´M�hj´-ubj)�”}”(hŒ8``unsigned long compat`` bitmask of compatible features ”h]”(j )�”}”(hŒ``unsigned long compat``”h]”j®)�”}”(hjö-h]”hŒunsigned long compat”…”�”}”(hjø-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjô-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M�hjð-ubj#)�”}”(hhh]”hî)�”}”(hŒbitmask of compatible features”h]”hŒbitmask of compatible features”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j .h´M�hj .ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjð-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j .h´M�hj´-ubj)�”}”(hŒD``unsigned long ro`` bitmask of features that force read-only mount ”h]”(j )�”}”(hŒ``unsigned long ro``”h]”j®)�”}”(hj/.h]”hŒunsigned long ro”…”�”}”(hj1.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj-.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M‘hj).ubj#)�”}”(hhh]”hî)�”}”(hŒ.bitmask of features that force read-only mount”h]”hŒ.bitmask of features that force read-only mount”…”�”}”(hjH.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jD.h´M‘hjE.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj).ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jD.h´M‘hj´-ubj)�”}”(hŒ<``unsigned long incompat`` bitmask of incompatible features ”h]”(j )�”}”(hŒ``unsigned long incompat``”h]”j®)�”}”(hjh.h]”hŒunsigned long incompat”…”�”}”(hjj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjf.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M’hjb.ubj#)�”}”(hhh]”hî)�”}”(hŒ bitmask of incompatible features”h]”hŒ bitmask of incompatible features”…”�”}”(hj�.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j}.h´M’hj~.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjb.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j}.h´M’hj´-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhj˜-ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj£.h]”hŒ Description”…”�”}”(hj¥.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj¡.ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M”hj˜-ubhî)�”}”(hŒbCheck whether the journal uses all of a given set of features. Return true (non-zero) if it does.”h]”hŒbCheck whether the journal uses all of a given set of features. Return true (non-zero) if it does.”…”�”}”(hj¹.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M“hj˜-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ2jbd2_journal_check_available_features (C function)”Œ'c.jbd2_journal_check_available_features”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ~int jbd2_journal_check_available_features (journal_t *journal, unsigned long compat, unsigned long ro, unsigned long incompat)”h]”j·)�”}”(hŒ}int jbd2_journal_check_available_features(journal_t *journal, unsigned long compat, unsigned long ro, unsigned long incompat)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjè.h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjä.h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M­ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷.h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjä.h²hh³jö.h´M­ubjà)�”}”(hŒ%jbd2_journal_check_available_features”h]”jæ)�”}”(hŒ%jbd2_journal_check_available_features”h]”hŒ%jbd2_journal_check_available_features”…”�”}”(hj /h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj/ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjä.h²hh³jö.h´M­ubjk)�”}”(hŒT(journal_t *journal, unsigned long compat, unsigned long ro, unsigned long incompat)”h]”(jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hj(/h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj%/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j*/Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j /sbŒ'c.jbd2_journal_check_available_features”†”asbuh1hhj!/ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH/h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj!/ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjV/h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj!/ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hjc/h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj!/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj/ubjq)�”}”(hŒunsigned long compat”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj|/h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjx/ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ/h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjx/ubj3)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj˜/h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjx/ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦/h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjx/ubjæ)�”}”(hŒcompat”h]”hŒcompat”…”�”}”(hj´/h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjx/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj/ubjq)�”}”(hŒunsigned long ro”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÍ/h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÉ/ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ/h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÉ/ubj3)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjé/h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÉ/ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷/h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÉ/ubjæ)�”}”(hŒro”h]”hŒro”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÉ/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj/ubjq)�”}”(hŒunsigned long incompat”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj0ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,0h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj0ubj3)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj:0h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj0ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH0h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj0ubjæ)�”}”(hŒincompat”h]”hŒincompat”…”�”}”(hjV0h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj/ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjä.h²hh³jö.h´M­ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjà.h²hh³jö.h´M­ubah}”(h]”jÛ.ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jö.h´M­hjÝ.h²hubj)�”}”(hhh]”hî)�”}”(hŒ&Check feature set in journalling layer”h]”hŒ&Check feature set in journalling layer”…”�”}”(hj€0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M­hj}0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÝ.h²hh³jö.h´M­ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j˜0j4j˜0j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hX€**Parameters** ``journal_t *journal`` Journal to check. ``unsigned long compat`` bitmask of compatible features ``unsigned long ro`` bitmask of features that force read-only mount ``unsigned long incompat`` bitmask of incompatible features **Description** Check whether the journaling code supports the use of all of a given set of features on this journal. Return true”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj¢0h]”hŒ Parameters”…”�”}”(hj¤0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj 0ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M±hjœ0ubjþ)�”}”(hhh]”(j)�”}”(hŒ)``journal_t *journal`` Journal to check. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hjÁ0h]”hŒjournal_t *journal”…”�”}”(hjÃ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¿0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M®hj»0ubj#)�”}”(hhh]”hî)�”}”(hŒJournal to check.”h]”hŒJournal to check.”…”�”}”(hjÚ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÖ0h´M®hj×0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj»0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÖ0h´M®hj¸0ubj)�”}”(hŒ8``unsigned long compat`` bitmask of compatible features ”h]”(j )�”}”(hŒ``unsigned long compat``”h]”j®)�”}”(hjú0h]”hŒunsigned long compat”…”�”}”(hjü0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjø0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M¯hjô0ubj#)�”}”(hhh]”hî)�”}”(hŒbitmask of compatible features”h]”hŒbitmask of compatible features”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j1h´M¯hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjô0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j1h´M¯hj¸0ubj)�”}”(hŒD``unsigned long ro`` bitmask of features that force read-only mount ”h]”(j )�”}”(hŒ``unsigned long ro``”h]”j®)�”}”(hj31h]”hŒunsigned long ro”…”�”}”(hj51h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj11ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M°hj-1ubj#)�”}”(hhh]”hî)�”}”(hŒ.bitmask of features that force read-only mount”h]”hŒ.bitmask of features that force read-only mount”…”�”}”(hjL1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jH1h´M°hjI1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj-1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jH1h´M°hj¸0ubj)�”}”(hŒ<``unsigned long incompat`` bitmask of incompatible features ”h]”(j )�”}”(hŒ``unsigned long incompat``”h]”j®)�”}”(hjl1h]”hŒunsigned long incompat”…”�”}”(hjn1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M±hjf1ubj#)�”}”(hhh]”hî)�”}”(hŒ bitmask of incompatible features”h]”hŒ bitmask of incompatible features”…”�”}”(hj…1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j�1h´M±hj‚1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjf1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�1h´M±hj¸0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhjœ0ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj§1h]”hŒ Description”…”�”}”(hj©1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj¥1ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M³hjœ0ubhî)�”}”(hŒrCheck whether the journaling code supports the use of all of a given set of features on this journal. Return true”h]”hŒrCheck whether the journaling code supports the use of all of a given set of features on this journal. Return true”…”�”}”(hj½1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M²hjœ0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ&jbd2_journal_set_features (C function)”Œc.jbd2_journal_set_features”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒrint jbd2_journal_set_features (journal_t *journal, unsigned long compat, unsigned long ro, unsigned long incompat)”h]”j·)�”}”(hŒqint jbd2_journal_set_features(journal_t *journal, unsigned long compat, unsigned long ro, unsigned long incompat)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjì1h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjè1h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MåubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû1h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjè1h²hh³jú1h´Måubjà)�”}”(hŒjbd2_journal_set_features”h]”jæ)�”}”(hŒjbd2_journal_set_features”h]”hŒjbd2_journal_set_features”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj 2ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjè1h²hh³jú1h´Måubjk)�”}”(hŒT(journal_t *journal, unsigned long compat, unsigned long ro, unsigned long incompat)”h]”(jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hj,2h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj)2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j.2Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j2sbŒc.jbd2_journal_set_features”†”asbuh1hhj%2ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL2h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj%2ubj°)�”}”(•hj³h]”hŒ*”…”�”}”(hjZ2h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj%2ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hjg2h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj%2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj!2ubjq)�”}”(hŒunsigned long compat”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj€2h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj|2ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ2h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj|2ubj3)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjœ2h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj|2ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª2h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj|2ubjæ)�”}”(hŒcompat”h]”hŒcompat”…”�”}”(hj¸2h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj|2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj!2ubjq)�”}”(hŒunsigned long ro”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÑ2h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÍ2ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß2h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÍ2ubj3)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjí2h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÍ2ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû2h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÍ2ubjæ)�”}”(hŒro”h]”hŒro”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÍ2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj!2ubjq)�”}”(hŒunsigned long incompat”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj"3h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj3ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj03h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj3ubj3)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj>3h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj3ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL3h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj3ubjæ)�”}”(hŒincompat”h]”hŒincompat”…”�”}”(hjZ3h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj!2ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjè1h²hh³jú1h´Måubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjä1h²hh³jú1h´Måubah}”(h]”jß1ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jú1h´Måhjá1h²hubj)�”}”(hhh]”hî)�”}”(hŒ.Mark a given journal feature in the superblock”h]”hŒ.Mark a given journal feature in the superblock”…”�”}”(hj„3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Måhj�3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjá1h²hh³jú1h´Måubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jœ3j4jœ3j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hX**Parameters** ``journal_t *journal`` Journal to act on. ``unsigned long compat`` bitmask of compatible features ``unsigned long ro`` bitmask of features that force read-only mount ``unsigned long incompat`` bitmask of incompatible features **Description** Mark a given journal feature as present on the superblock. Returns true if the requested features could be set.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj¦3h]”hŒ Parameters”…”�”}”(hj¨3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj¤3ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Méhj 3ubjþ)�”}”(hhh]”(j)�”}”(hŒ*``journal_t *journal`` Journal to act on. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hjÅ3h]”hŒjournal_t *journal”…”�”}”(hjÇ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÃ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mæhj¿3ubj#)�”}”(hhh]”hî)�”}”(hŒJournal to act on.”h]”hŒJournal to act on.”…”�”}”(hjÞ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÚ3h´MæhjÛ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¿3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÚ3h´Mæhj¼3ubj)�”}”(hŒ8``unsigned long compat`` bitmask of compatible features ”h]”(j )�”}”(hŒ``unsigned long compat``”h]”j®)�”}”(hjþ3h]”hŒunsigned long compat”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjü3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mçhjø3ubj#)�”}”(hhh]”hî)�”}”(hŒbitmask of compatible features”h]”hŒbitmask of compatible features”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j4h´Mçhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjø3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j4h´Mçhj¼3ubj)�”}”(hŒD``unsigned long ro`` bitmask of features that force read-only mount ”h]”(j )�”}”(hŒ``unsigned long ro``”h]”j®)�”}”(hj74h]”hŒunsigned long ro”…”�”}”(hj94h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj54ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mèhj14ubj#)�”}”(hhh]”hî)�”}”(hŒ.bitmask of features that force read-only mount”h]”hŒ.bitmask of features that force read-only mount”…”�”}”(hjP4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jL4h´MèhjM4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj14ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jL4h´Mèhj¼3ubj)�”}”(hŒ<``unsigned long incompat`` bitmask of incompatible features ”h]”(j )�”}”(hŒ``unsigned long incompat``”h]”j®)�”}”(hjp4h]”hŒunsigned long incompat”…”�”}”(hjr4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjn4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Méhjj4ubj#)�”}”(hhh]”hî)�”}”(hŒ bitmask of incompatible features”h]”hŒ bitmask of incompatible features”…”�”}”(hj‰4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j…4h´Méhj†4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j…4h´Méhj¼3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhj 3ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj«4h]”hŒ Description”…”�”}”(hj­4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj©4ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mëhj 3ubhî)�”}”(hŒpMark a given journal feature as present on the superblock. Returns true if the requested features could be set.”h]”hŒpMark a given journal feature as present on the superblock. Returns true if the requested features could be set.”…”�”}”(hjÁ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mêhj 3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œjbd2_journal_flush (C function)”Œc.jbd2_journal_flush”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ?int jbd2_journal_flush (journal_t *journal, unsigned int flags)”h]”j·)�”}”(hŒ>int jbd2_journal_flush(journal_t *journal, unsigned int flags)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjð4h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjì4h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M] ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ4h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjì4h²hh³jþ4h´M] ubjà)�”}”(hŒjbd2_journal_flush”h]”jæ)�”}”(hŒjbd2_journal_flush”h]”hŒjbd2_journal_flush”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj 5ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjì4h²hh³jþ4h´M] ubjk)�”}”(hŒ((journal_t *journal, unsigned int flags)”h]”(jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hj05h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj-5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j25Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j5sbŒc.jbd2_journal_flush”†”asbuh1hhj)5ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP5h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj)5ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj^5h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj)5ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hjk5h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj)5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj%5ubjq)�”}”(hŒunsigned int flags”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj„5h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj€5ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’5h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj€5ubj3)�”}”(hŒint”h]”hŒint”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj€5ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®5h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj€5ubjæ)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj¼5h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj€5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj%5ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjì4h²hh³jþ4h´M] ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjè4h²hh³jþ4h´M] ubah}”(h]”jã4ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jþ4h´M] hjå4h²hubj)�”}”(hhh]”hî)�”}”(hŒ Flush journal”h]”hŒ Flush journal”…”�”}”(hjæ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M] hjã5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjå4h²hh³jþ4h´M] ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jþ5j4jþ5j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hXI**Parameters** ``journal_t *journal`` Journal to act on. ``unsigned int flags`` optional operation on the journal blocks after the flush (see below) **Description** Flush all data for a given journal to disk and empty the journal. Filesystems can use this when remounting readonly to ensure that recovery does not need to happen on remount. Optionally, a discard or zeroout can be issued on the journal blocks after flushing. flags: JBD2_JOURNAL_FLUSH_DISCARD: issues discards for the journal blocks JBD2_JOURNAL_FLUSH_ZEROOUT: issues zeroouts for the journal blocks”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj6h]”hŒ Parameters”…”�”}”(hj 6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Ma hj6ubjþ)�”}”(hhh]”(j)�”}”(hŒ*``journal_t *journal`` Journal to act on. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hj'6h]”hŒjournal_t *journal”…”�”}”(hj)6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj%6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M^ hj!6ubj#)�”}”(hhh]”hî)�”}”(hŒJournal to act on.”h]”hŒJournal to act on.”…”�”}”(hj@6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j<6h´M^ hj=6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj!6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j<6h´M^ hj6ubj)�”}”(hŒ\``unsigned int flags`` optional operation on the journal blocks after the flush (see below) ”h]”(j )�”}”(hŒ``unsigned int flags``”h]”j®)�”}”(hj`6h]”hŒunsigned int flags”…”�”}”(hjb6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj^6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M_ hjZ6ubj#)�”}”(hhh]”hî)�”}”(hŒDoptional operation on the journal blocks after the flush (see below)”h]”hŒDoptional operation on the journal blocks after the flush (see below)”…”�”}”(hjy6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ju6h´M_ hjv6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjZ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ju6h´M_ hj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhj6ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj›6h]”hŒ Description”…”�”}”(hj�6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj™6ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Ma hj6ubhî)�”}”(hXFlush all data for a given journal to disk and empty the journal. Filesystems can use this when remounting readonly to ensure that recovery does not need to happen on remount. Optionally, a discard or zeroout can be issued on the journal blocks after flushing.”h]”hXFlush all data for a given journal to disk and empty the journal. Filesystems can use this when remounting readonly to ensure that recovery does not need to happen on remount. Optionally, a discard or zeroout can be issued on the journal blocks after flushing.”…”�”}”(hj±6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M` hj6ubjþ)�”}”(hhh]”j)�”}”(hŒŒflags: JBD2_JOURNAL_FLUSH_DISCARD: issues discards for the journal blocks JBD2_JOURNAL_FLUSH_ZEROOUT: issues zeroouts for the journal blocks”h]”(j )�”}”(hŒflags:”h]”hŒflags:”…”�”}”(hjÇ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mf hjÃ6ubj#)�”}”(hhh]”hî)�”}”(hŒ…JBD2_JOURNAL_FLUSH_DISCARD: issues discards for the journal blocks JBD2_JOURNAL_FLUSH_ZEROOUT: issues zeroouts for the journal blocks”h]”hŒ…JBD2_JOURNAL_FLUSH_DISCARD: issues discards for the journal blocks JBD2_JOURNAL_FLUSH_ZEROOUT: issues zeroouts for the journal blocks”…”�”}”(hjÙ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÕ6h´Mf hjÖ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÃ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÕ6h´Mf hjÀ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhj6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œjbd2_journal_wipe (C function)”Œc.jbd2_journal_wipe”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ5int jbd2_journal_wipe (journal_t *journal, int write)”h]”j·)�”}”(hŒ4int jbd2_journal_wipe(journal_t *journal, int write)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj7h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M± ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(7h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj7h²hh³j'7h´M± ubjà)�”}”(hŒjbd2_journal_wipe”h]”jæ)�”}”(hŒjbd2_journal_wipe”h]”hŒjbd2_journal_wipe”…”�”}”(hj:7h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj67ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj7h²hh³j'7h´M± ubjk)�”}”(hŒ(journal_t *journal, int write)”h]”(jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjY7h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjV7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j[7Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j<7sbŒc.jbd2_journal_wipe”†”asbuh1hhjR7ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy7h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjR7ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj‡7h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjR7ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hj”7h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjR7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjN7ubjq)�”}”(hŒ int write”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj­7h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj©7ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»7h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj©7ubjæ)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hjÉ7h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj©7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjN7ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj7h²hh³j'7h´M± ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj7h²hh³j'7h´M± ubah}”(h]”j 7ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j'7h´M± hj7h²hubj)�”}”(hhh]”hî)�”}”(hŒWipe journal contents”h]”hŒWipe journal contents”…”�”}”(hjó7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M± hjð7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7h²hh³j'7h´M± ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j 8j4j 8j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hXž**Parameters** ``journal_t *journal`` Journal to act on. ``int write`` flag (see below) **Description** Wipe out all of the contents of a journal, safely. This will produce a warning if the journal contains any valid recovery information. Must be called between journal_init_*() and jbd2_journal_load(). If 'write' is non-zero, then we wipe out the journal on disk; otherwise we merely suppress recovery.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj8h]”hŒ Parameters”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mµ hj8ubjþ)�”}”(hhh]”(j)�”}”(hŒ*``journal_t *journal`` Journal to act on. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hj48h]”hŒjournal_t *journal”…”�”}”(hj68h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj28ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M² hj.8ubj#)�”}”(hhh]”hî)�”}”(hŒJournal to act on.”h]”hŒJournal to act on.”…”�”}”(hjM8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jI8h´M² hjJ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj.8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jI8h´M² hj+8ubj)�”}”(hŒ``int write`` flag (see below) ”h]”(j )�”}”(hŒ ``int write``”h]”j®)�”}”(hjm8h]”hŒ int write”…”�”}”(hjo8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjk8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M³ hjg8ubj#)�”}”(hhh]”hî)�”}”(hŒflag (see below)”h]”hŒflag (see below)”…”�”}”(hj†8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j‚8h´M³ hjƒ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjg8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚8h´M³ hj+8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhj8ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj¨8h]”hŒ Description”…”�”}”(hjª8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj¦8ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mµ hj8ubhî)�”}”(hŒÈWipe out all of the contents of a journal, safely. This will produce a warning if the journal contains any valid recovery information. Must be called between journal_init_*() and jbd2_journal_load().”h]”hŒÈWipe out all of the contents of a journal, safely. This will produce a warning if the journal contains any valid recovery information. Must be called between journal_init_*() and jbd2_journal_load().”…”�”}”(hj¾8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M´ hj8ubhî)�”}”(hŒdIf 'write' is non-zero, then we wipe out the journal on disk; otherwise we merely suppress recovery.”h]”hŒhIf ‘write’ is non-zero, then we wipe out the journal on disk; otherwise we merely suppress recovery.”…”�”}”(hjÍ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M¸ hj8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œjbd2_journal_abort (C function)”Œc.jbd2_journal_abort”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ7void jbd2_journal_abort (journal_t *journal, int errno)”h]”j·)�”}”(hŒ6void jbd2_journal_abort(journal_t *journal, int errno)”h]”(j3)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjü8h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjø8h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MÕ ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 9h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjø8h²hh³j 9h´MÕ ubjà)�”}”(hŒjbd2_journal_abort”h]”jæ)�”}”(hŒjbd2_journal_abort”h]”hŒjbd2_journal_abort”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj9ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjø8h²hh³j 9h´MÕ ubjk)�”}”(hŒ(journal_t *journal, int errno)”h]”(jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hj<9h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj99ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j>9Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j9sbŒc.jbd2_journal_abort”†”asbuh1hhj59ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\9h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj59ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjj9h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj59ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hjw9h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj59ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj19ubjq)�”}”(hŒ int errno”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj�9h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjŒ9ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž9h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjŒ9ubjæ)�”}”(hŒerrno”h]”hŒerrno”…”�”}”(hj¬9h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjŒ9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj19ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjø8h²hh³j 9h´MÕ ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjô8h²hh³j 9h´MÕ ubah}”(h]”jï8ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j 9h´MÕ hjñ8h²hubj)�”}”(hhh]”hî)�”}”(hŒ!Shutdown the journal immediately.”h]”hŒ!Shutdown the journal immediately.”…”�”}”(hjÖ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MÕ hjÓ9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñ8h²hh³j 9h´MÕ ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jî9j4jî9j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hX®**Parameters** ``journal_t *journal`` the journal to shutdown. ``int errno`` an error number to record in the journal indicating the reason for the shutdown. **Description** Perform a complete, immediate shutdown of the ENTIRE journal (not of a single transaction). This operation cannot be undone without closing and reopening the journal. The jbd2_journal_abort function is intended to support higher level error recovery mechanisms such as the ext2/ext3 remount-readonly error mode. Journal abort has very specific semantics. Any existing dirty, unjournaled buffers in the main filesystem will still be written to disk by bdflush, but the journaling mechanism will be suspended immediately and no further transaction commits will be honoured. Any dirty, journaled buffers will be written back to disk without hitting the journal. Atomicity cannot be guaranteed on an aborted filesystem, but we _do_ attempt to leave as much data as possible behind for fsck to use for cleanup. Any attempt to get a new transaction handle on a journal which is in ABORT state will just result in an -EROFS error return. A jbd2_journal_stop on an existing handle will return -EIO if we have entered abort state during the update. Recursive transactions are not disturbed by journal abort until the final jbd2_journal_stop, which will receive the -EIO error. Finally, the jbd2_journal_abort call allows the caller to supply an errno which will be recorded (if possible) in the journal superblock. This allows a client to record failure conditions in the middle of a transaction without having to complete the transaction to record the failure to disk. ext3_error, for example, now uses this functionality.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjø9h]”hŒ Parameters”…”�”}”(hjú9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjö9ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MÙ hjò9ubjþ)�”}”(hhh]”(j)�”}”(hŒ0``journal_t *journal`` the journal to shutdown. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hj:h]”hŒjournal_t *journal”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MÖ hj:ubj#)�”}”(hhh]”hî)�”}”(hŒthe journal to shutdown.”h]”hŒthe journal to shutdown.”…”�”}”(hj0:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j,:h´MÖ hj-:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,:h´MÖ hj:ubj)�”}”(hŒ_``int errno`` an error number to record in the journal indicating the reason for the shutdown. ”h]”(j )�”}”(hŒ ``int errno``”h]”j®)�”}”(hjP:h]”hŒ int errno”…”�”}”(hjR:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjN:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MØ hjJ:ubj#)�”}”(hhh]”hî)�”}”(hŒPan error number to record in the journal indicating the reason for the shutdown.”h]”hŒPan error number to record in the journal indicating the reason for the shutdown.”…”�”}”(hji:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M× hjf:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjJ:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³je:h´MØ hj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhjò9ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjŒ:h]”hŒ Description”…”�”}”(hjŽ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjŠ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MÚ hjò9ubhî)�”}”(hŒ§Perform a complete, immediate shutdown of the ENTIRE journal (not of a single transaction). This operation cannot be undone without closing and reopening the journal.”h]”hŒ§Perform a complete, immediate shutdown of the ENTIRE journal (not of a single transaction). This operation cannot be undone without closing and reopening the journal.”…”�”}”(hj¢:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MÙ hjò9ubhî)�”}”(hŒ�The jbd2_journal_abort function is intended to support higher level error recovery mechanisms such as the ext2/ext3 remount-readonly error mode.”h]”hŒ�The jbd2_journal_abort function is intended to support higher level error recovery mechanisms such as the ext2/ext3 remount-readonly error mode.”…”�”}”(hj±:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MÝ hjò9ubhî)�”}”(hXJournal abort has very specific semantics. Any existing dirty, unjournaled buffers in the main filesystem will still be written to disk by bdflush, but the journaling mechanism will be suspended immediately and no further transaction commits will be honoured.”h]”hXJournal abort has very specific semantics. Any existing dirty, unjournaled buffers in the main filesystem will still be written to disk by bdflush, but the journaling mechanism will be suspended immediately and no further transaction commits will be honoured.”…”�”}”(hjÀ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Má hjò9ubhî)�”}”(hŒêAny dirty, journaled buffers will be written back to disk without hitting the journal. Atomicity cannot be guaranteed on an aborted filesystem, but we _do_ attempt to leave as much data as possible behind for fsck to use for cleanup.”h]”hŒêAny dirty, journaled buffers will be written back to disk without hitting the journal. Atomicity cannot be guaranteed on an aborted filesystem, but we _do_ attempt to leave as much data as possible behind for fsck to use for cleanup.”…”�”}”(hjÏ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mæ hjò9ubhî)�”}”(hŒêAny attempt to get a new transaction handle on a journal which is in ABORT state will just result in an -EROFS error return. A jbd2_journal_stop on an existing handle will return -EIO if we have entered abort state during the update.”h]”hŒêAny attempt to get a new transaction handle on a journal which is in ABORT state will just result in an -EROFS error return. A jbd2_journal_stop on an existing handle will return -EIO if we have entered abort state during the update.”…”�”}”(hjÞ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Më hjò9ubhî)�”}”(hŒRecursive transactions are not disturbed by journal abort until the final jbd2_journal_stop, which will receive the -EIO error.”h]”hŒRecursive transactions are not disturbed by journal abort until the final jbd2_journal_stop, which will receive the -EIO error.”…”�”}”(hjí:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mð hjò9ubhî)�”}”(hX\Finally, the jbd2_journal_abort call allows the caller to supply an errno which will be recorded (if possible) in the journal superblock. This allows a client to record failure conditions in the middle of a transaction without having to complete the transaction to record the failure to disk. ext3_error, for example, now uses this functionality.”h]”hX\Finally, the jbd2_journal_abort call allows the caller to supply an errno which will be recorded (if possible) in the journal superblock. This allows a client to record failure conditions in the middle of a transaction without having to complete the transaction to record the failure to disk. ext3_error, for example, now uses this functionality.”…”�”}”(hjü:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´Mó hjò9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œjbd2_journal_errno (C function)”Œc.jbd2_journal_errno”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ+int jbd2_journal_errno (journal_t *journal)”h]”j·)�”}”(hŒ*int jbd2_journal_errno(journal_t *journal)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj+;h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj';h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M0 ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:;h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj';h²hh³j9;h´M0 ubjà)�”}”(hŒjbd2_journal_errno”h]”jæ)�”}”(hŒjbd2_journal_errno”h]”hŒjbd2_journal_errno”…”�”}”(hjL;h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjH;ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj';h²hh³j9;h´M0 ubjk)�”}”(hŒ(journal_t *journal)”h]”jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjk;h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjh;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jm;Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�jN;sbŒc.jbd2_journal_errno”†”asbuh1hhjd;ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹;h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjd;ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj™;h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjd;ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hj¦;h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjd;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj`;ubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj';h²hh³j9;h´M0 ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj#;h²hh³j9;h´M0 ubah}”(h]”j;ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j9;h´M0 hj ;h²hubj)�”}”(hhh]”hî)�”}”(hŒ"returns the journal's error state.”h]”hŒ$returns the journal’s error state.”…”�”}”(hjÐ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M0 hjÍ;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ;h²hh³j9;h´M0 ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jè;j4jè;j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hX<**Parameters** ``journal_t *journal`` journal to examine. **Description** This is the errno number set with jbd2_journal_abort(), the last time the journal was mounted - if the journal was stopped without calling abort this will be 0. If the journal has been aborted on this mount time -EROFS will be returned.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjò;h]”hŒ Parameters”…”�”}”(hjô;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjð;ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M4 hjì;ubjþ)�”}”(hhh]”j)�”}”(hŒ+``journal_t *journal`` journal to examine. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hj<h]”hŒjournal_t *journal”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M1 hj <ubj#)�”}”(hhh]”hî)�”}”(hŒjournal to examine.”h]”hŒjournal to examine.”…”�”}”(hj*<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j&<h´M1 hj'<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj <ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j&<h´M1 hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhjì;ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjL<h]”hŒ Description”…”�”}”(hjN<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjJ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M3 hjì;ubhî)�”}”(hŒ This is the errno number set with jbd2_journal_abort(), the last time the journal was mounted - if the journal was stopped without calling abort this will be 0.”h]”hŒ This is the errno number set with jbd2_journal_abort(), the last time the journal was mounted - if the journal was stopped without calling abort this will be 0.”…”�”}”(hjb<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M2 hjì;ubhî)�”}”(hŒKIf the journal has been aborted on this mount time -EROFS will be returned.”h]”hŒKIf the journal has been aborted on this mount time -EROFS will be returned.”…”�”}”(hjq<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M6 hjì;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ#jbd2_journal_clear_err (C function)”Œc.jbd2_journal_clear_err”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ/int jbd2_journal_clear_err (journal_t *journal)”h]”j·)�”}”(hŒ.int jbd2_journal_clear_err(journal_t *journal)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj <h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjœ<h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MH ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯<h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjœ<h²hh³j®<h´MH ubjà)�”}”(hŒjbd2_journal_clear_err”h]”jæ)�”}”(hŒjbd2_journal_clear_err”h]”hŒjbd2_journal_clear_err”…”�”}”(hjÁ<h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj½<ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjœ<h²hh³j®<h´MH ubjk)�”}”(hŒ(journal_t *journal)”h]”jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjà<h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÝ<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jâ<Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�jÃ<sbŒc.jbd2_journal_clear_err”†”asbuh1hhjÙ<ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÙ<ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjÙ<ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÙ<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjÕ<ubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjœ<h²hh³j®<h´MH ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj˜<h²hh³j®<h´MH ubah}”(h]”j“<ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j®<h´MH hj•<h²hubj)�”}”(hhh]”hî)�”}”(hŒ clears the journal's error state”h]”hŒ"clears the journal’s error state”…”�”}”(hjE=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MH hjB=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•<h²hh³j®<h´MH ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j]=j4j]=j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hŒ’**Parameters** ``journal_t *journal`` journal to act on. **Description** An error must be cleared or acked to take a FS out of readonly mode.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjg=h]”hŒ Parameters”…”�”}”(hji=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hje=ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´ML hja=ubjþ)�”}”(hhh]”j)�”}”(hŒ*``journal_t *journal`` journal to act on. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hj†=h]”hŒjournal_t *journal”…”�”}”(hjˆ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj„=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MI hj€=ubj#)�”}”(hhh]”hî)�”}”(hŒjournal to act on.”h]”hŒjournal to act on.”…”�”}”(hjŸ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j›=h´MI hjœ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj€=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›=h´MI hj}=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhja=ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjÁ=h]”hŒ Description”…”�”}”(hjÃ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj¿=ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MK hja=ubhî)�”}”(hŒDAn error must be cleared or acked to take a FS out of readonly mode.”h]”hŒDAn error must be cleared or acked to take a FS out of readonly mode.”…”�”}”(hj×=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´MJ hja=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ!jbd2_journal_ack_err (C function)”Œc.jbd2_journal_ack_err”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ.void jbd2_journal_ack_err (journal_t *journal)”h]”j·)�”}”(hŒ-void jbd2_journal_ack_err(journal_t *journal)”h]”(j3)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj>h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M\ ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj>h²hh³j>h´M\ ubjà)�”}”(hŒjbd2_journal_ack_err”h]”jæ)�”}”(hŒjbd2_journal_ack_err”h]”hŒjbd2_journal_ack_err”…”�”}”(hj'>h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj#>ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj>h²hh³j>h´M\ ubjk)�”}”(hŒ(journal_t *journal)”h]”jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjF>h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjC>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jH>Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j)>sbŒc.jbd2_journal_ack_err”†”asbuh1hhj?>ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf>h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj?>ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjt>h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj?>ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hj�>h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj?>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj;>ubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj>h²hh³j>h´M\ ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjþ=h²hh³j>h´M\ ubah}”(h]”jù=ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j>h´M\ hjû=h²hubj)�”}”(hhh]”hî)�”}”(hŒAck journal err.”h]”hŒAck journal err.”…”�”}”(hj«>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M\ hj¨>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû=h²hh³j>h´M\ ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jÃ>j4jÃ>j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hŒ’**Parameters** ``journal_t *journal`` journal to act on. **Description** An error must be cleared or acked to take a FS out of readonly mode.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjÍ>h]”hŒ Parameters”…”�”}”(hjÏ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjË>ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M` hjÇ>ubjþ)�”}”(hhh]”j)�”}”(hŒ*``journal_t *journal`` journal to act on. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hjì>h]”hŒjournal_t *journal”…”�”}”(hjî>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjê>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M] hjæ>ubj#)�”}”(hhh]”hî)�”}”(hŒjournal to act on.”h]”hŒjournal to act on.”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j?h´M] hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjæ>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j?h´M] hjã>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhjÇ>ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj'?h]”hŒ Description”…”�”}”(hj)?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj%?ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M_ hjÇ>ubhî)�”}”(hŒDAn error must be cleared or acked to take a FS out of readonly mode.”h]”hŒDAn error must be cleared or acked to take a FS out of readonly mode.”…”�”}”(hj=?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³ŒZ/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:194: ./fs/jbd2/journal.c”h´M^ hjÇ>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ!jbd2_journal_recover (C function)”Œc.jbd2_journal_recover”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ-int jbd2_journal_recover (journal_t *journal)”h]”j·)�”}”(hŒ,int jbd2_journal_recover(journal_t *journal)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjl?h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjh?h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´MubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{?h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjh?h²hh³jz?h´Mubjà)�”}”(hŒjbd2_journal_recover”h]”jæ)�”}”(hŒjbd2_journal_recover”h]”hŒjbd2_journal_recover”…”�”}”(hj�?h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj‰?ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjh?h²hh³jz?h´Mubjk)�”}”(hŒ(journal_t *journal)”h]”jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hj¬?h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj©?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j®?Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j�?sbŒc.jbd2_journal_recover”†”asbuh1hhj¥?ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ?h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj¥?ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjÚ?h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj¥?ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hjç?h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj¥?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj¡?ubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjh?h²hh³jz?h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjd?h²hh³jz?h´Mubah}”(h]”j_?ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jz?h´Mhja?h²hubj)�”}”(hhh]”hî)�”}”(hŒrecovers a on-disk journal”h]”hŒrecovers a on-disk journal”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´Mhj@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhja?h²hh³jz?h´Mubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j)@j4j)@j5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hX€**Parameters** ``journal_t *journal`` the journal to recover **Description** The primary function for recovering the log contents when mounting a journaled device. Recovery is done in three passes. In the first pass, we look for the end of the log. In the second, we assemble the list of revoke blocks. In the third and final pass, we replay any un-revoked blocks in the log.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj3@h]”hŒ Parameters”…”�”}”(hj5@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj1@ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´Mhj-@ubjþ)�”}”(hhh]”j)�”}”(hŒ.``journal_t *journal`` the journal to recover ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hjR@h]”hŒjournal_t *journal”…”�”}”(hjT@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjP@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´MhjL@ubj#)�”}”(hhh]”hî)�”}”(hŒthe journal to recover”h]”hŒthe journal to recover”…”�”}”(hjk@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jg@h´Mhjh@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjL@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jg@h´MhjI@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhj-@ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj�@h]”hŒ Description”…”�”}”(hj�@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj‹@ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´Mhj-@ubhî)�”}”(hŒVThe primary function for recovering the log contents when mounting a journaled device.”h]”hŒVThe primary function for recovering the log contents when mounting a journaled device.”…”�”}”(hj£@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´Mhj-@ubhî)�”}”(hŒÖRecovery is done in three passes. In the first pass, we look for the end of the log. In the second, we assemble the list of revoke blocks. In the third and final pass, we replay any un-revoked blocks in the log.”h]”hŒÖRecovery is done in three passes. In the first pass, we look for the end of the log. In the second, we assemble the list of revoke blocks. In the third and final pass, we replay any un-revoked blocks in the log.”…”�”}”(hj²@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´Mhj-@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ'jbd2_journal_skip_recovery (C function)”Œc.jbd2_journal_skip_recovery”hNt”auh1jšhjh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ3int jbd2_journal_skip_recovery (journal_t *journal)”h]”j·)�”}”(hŒ2int jbd2_journal_skip_recovery(journal_t *journal)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjá@h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÝ@h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´M\ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð@h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÝ@h²hh³jï@h´M\ubjà)�”}”(hŒjbd2_journal_skip_recovery”h]”jæ)�”}”(hŒjbd2_journal_skip_recovery”h]”hŒjbd2_journal_skip_recovery”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjþ@ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjÝ@h²hh³jï@h´M\ubjk)�”}”(hŒ(journal_t *journal)”h]”jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hj!Ah²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjAubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j#AŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�jAsbŒc.jbd2_journal_skip_recovery”†”asbuh1hhjAubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAAh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjAubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjOAh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjAubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hj\Ah²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjAubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjÝ@h²hh³jï@h´M\ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjÙ@h²hh³jï@h´M\ubah}”(h]”jÔ@ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jï@h´M\hjÖ@h²hubj)�”}”(hhh]”hî)�”}”(hŒ&Start journal and wipe exiting records”h]”hŒ&Start journal and wipe exiting records”…”�”}”(hj†Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´M\hjƒAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖ@h²hh³jï@h´M\ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jžAj4jžAj5‰j6‰j7‰uh1j«h²hhjh³Nh´Nubj´)�”}”(hXû**Parameters** ``journal_t *journal`` journal to startup **Description** Locate any valid recovery information from the journal and set up the journal structures in memory to ignore it (presumably because the caller has evidence that it is out of date). This function doesn't appear to be exported.. We perform one pass over the journal to allow us to tell the user how much recovery information is being erased, and to let us initialise the journal transaction sequence numbers to the next unused ID.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj¨Ah]”hŒ Parameters”…”�”}”(hjªAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj¦Aubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´M`hj¢Aubjþ)�”}”(hhh]”j)�”}”(hŒ*``journal_t *journal`` journal to startup ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hjÇAh]”hŒjournal_t *journal”…”�”}”(hjÉAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÅAubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´M]hjÁAubj#)�”}”(hhh]”hî)�”}”(hŒjournal to startup”h]”hŒjournal to startup”…”�”}”(hjàAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÜAh´M]hjÝAubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÁAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÜAh´M]hj¾Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhj¢Aubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjBh]”hŒ Description”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´M_hj¢Aubhî)�”}”(hŒâLocate any valid recovery information from the journal and set up the journal structures in memory to ignore it (presumably because the caller has evidence that it is out of date). This function doesn't appear to be exported..”h]”hŒäLocate any valid recovery information from the journal and set up the journal structures in memory to ignore it (presumably because the caller has evidence that it is out of date). This function doesn’t appear to be exported..”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´M^hj¢Aubhî)�”}”(hŒÉWe perform one pass over the journal to allow us to tell the user how much recovery information is being erased, and to let us initialise the journal transaction sequence numbers to the next unused ID.”h]”hŒÉWe perform one pass over the journal to allow us to tell the user how much recovery information is being erased, and to let us initialise the journal transaction sequence numbers to the next unused ID.”…”�”}”(hj'Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ[/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:197: ./fs/jbd2/recovery.c”h´Mchj¢Aubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjh²hh³Nh´Nubeh}”(h]”Œ journal-level”ah ]”h"]”Œ journal level”ah$]”h&]”uh1hµhjéh²hh³hÊh´KÀubh¶)�”}”(hhh]”(h»)�”}”(hŒTransaction Level”h]”hŒTransaction Level”…”�”}”(hjHBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjEBh²hh³hÊh´KÉubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œjbd2_journal_start (C function)”Œc.jbd2_journal_start”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ?handle_t * jbd2_journal_start (journal_t *journal, int nblocks)”h]”j·)�”}”(hŒ=handle_t *jbd2_journal_start(journal_t *journal, int nblocks)”h]”(h)�”}”(hhh]”jæ)�”}”(hŒhandle_t”h]”hŒhandle_t”…”�”}”(hjrBh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjoBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jtBŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�Œjbd2_journal_start”sbŒc.jbd2_journal_start”†”asbuh1hhjkBh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”Bh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjkBh²hh³j“Bh´M ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj¢Bh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjkBh²hh³j“Bh´M ubjà)�”}”(hŒjbd2_journal_start”h]”jæ)�”}”(hj�Bh]”hŒjbd2_journal_start”…”�”}”(hj³Bh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj¯Bubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjkBh²hh³j“Bh´M ubjk)�”}”(hŒ!(journal_t *journal, int nblocks)”h]”(jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjÑBh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÎBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jÓBŒmodname”NŒ classname”Nj“j–)�”}”j™]”jŽBŒc.jbd2_journal_start”†”asbuh1hhjÊBubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïBh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÊBubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjýBh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjÊBubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hj Ch²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÊBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjÆBubjq)�”}”(hŒ int nblocks”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj#Ch²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjCubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1Ch²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjCubjæ)�”}”(hŒnblocks”h]”hŒnblocks”…”�”}”(hj?Ch²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjÆBubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjkBh²hh³j“Bh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjgBh²hh³j“Bh´M ubah}”(h]”jbBah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j“Bh´M hjdBh²hubj)�”}”(hhh]”hî)�”}”(hŒObtain a new handle.”h]”hŒObtain a new handle.”…”�”}”(hjiCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M hjfCh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdBh²hh³j“Bh´M ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j�Cj4j�Cj5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hXƒ**Parameters** ``journal_t *journal`` Journal to start transaction on. ``int nblocks`` number of block buffer we might modify **Description** We make sure that the transaction can guarantee at least nblocks of modified buffers in the log. We block until the log can guarantee that much space. Additionally, if rsv_blocks > 0, we also create another handle with rsv_blocks reserved blocks in the journal. This handle is stored in h_rsv_handle. It is not attached to any particular transaction and thus doesn't block transaction commit. If the caller uses this reserved handle, it has to set h_rsv_handle to NULL as otherwise jbd2_journal_stop() on the parent handle will dispose the reserved one. Reserved handle has to be converted to a normal handle using jbd2_journal_start_reserved() before it can be used. Return a pointer to a newly allocated handle, or an ERR_PTR() value on failure.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj‹Ch]”hŒ Parameters”…”�”}”(hj�Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj‰Cubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M hj…Cubjþ)�”}”(hhh]”(j)�”}”(hŒ8``journal_t *journal`` Journal to start transaction on. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hjªCh]”hŒjournal_t *journal”…”�”}”(hj¬Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj¨Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M hj¤Cubj#)�”}”(hhh]”hî)�”}”(hŒ Journal to start transaction on.”h]”hŒ Journal to start transaction on.”…”�”}”(hjÃCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j¿Ch´M hjÀCubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¤Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¿Ch´M hj¡Cubj)�”}”(hŒ7``int nblocks`` number of block buffer we might modify ”h]”(j )�”}”(hŒ``int nblocks``”h]”j®)�”}”(hjãCh]”hŒ int nblocks”…”�”}”(hjåCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjáCubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M hjÝCubj#)�”}”(hhh]”hî)�”}”(hŒ&number of block buffer we might modify”h]”hŒ&number of block buffer we might modify”…”�”}”(hjüCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jøCh´M hjùCubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÝCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jøCh´M hj¡Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhj…Cubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjDh]”hŒ Description”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M hj…Cubhî)�”}”(hXœWe make sure that the transaction can guarantee at least nblocks of modified buffers in the log. We block until the log can guarantee that much space. Additionally, if rsv_blocks > 0, we also create another handle with rsv_blocks reserved blocks in the journal. This handle is stored in h_rsv_handle. It is not attached to any particular transaction and thus doesn't block transaction commit. If the caller uses this reserved handle, it has to set h_rsv_handle to NULL as otherwise jbd2_journal_stop() on the parent handle will dispose the reserved one. Reserved handle has to be converted to a normal handle using jbd2_journal_start_reserved() before it can be used.”h]”hXžWe make sure that the transaction can guarantee at least nblocks of modified buffers in the log. We block until the log can guarantee that much space. Additionally, if rsv_blocks > 0, we also create another handle with rsv_blocks reserved blocks in the journal. This handle is stored in h_rsv_handle. It is not attached to any particular transaction and thus doesn’t block transaction commit. If the caller uses this reserved handle, it has to set h_rsv_handle to NULL as otherwise jbd2_journal_stop() on the parent handle will dispose the reserved one. Reserved handle has to be converted to a normal handle using jbd2_journal_start_reserved() before it can be used.”…”�”}”(hj4Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M hj…Cubhî)�”}”(hŒOReturn a pointer to a newly allocated handle, or an ERR_PTR() value on failure.”h]”hŒOReturn a pointer to a newly allocated handle, or an ERR_PTR() value on failure.”…”�”}”(hjCDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mhj…Cubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ(jbd2_journal_start_reserved (C function)”Œc.jbd2_journal_start_reserved”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ[int jbd2_journal_start_reserved (handle_t *handle, unsigned int type, unsigned int line_no)”h]”j·)�”}”(hŒZint jbd2_journal_start_reserved(handle_t *handle, unsigned int type, unsigned int line_no)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjrDh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjnDh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M8ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjnDh²hh³j€Dh´M8ubjà)�”}”(hŒjbd2_journal_start_reserved”h]”jæ)�”}”(hŒjbd2_journal_start_reserved”h]”hŒjbd2_journal_start_reserved”…”�”}”(hj“Dh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj�Dubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjnDh²hh³j€Dh´M8ubjk)�”}”(hŒ;(handle_t *handle, unsigned int type, unsigned int line_no)”h]”(jq)�”}”(hŒhandle_t *handle”h]”(h)�”}”(hhh]”jæ)�”}”(hŒhandle_t”h]”hŒhandle_t”…”�”}”(hj²Dh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj¯Dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j´DŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j•DsbŒc.jbd2_journal_start_reserved”†”asbuh1hhj«DubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒDh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj«Dubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjàDh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj«Dubjæ)�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hjíDh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj«Dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj§Dubjq)�”}”(hŒunsigned int type”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjEub•jÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjEubj3)�”}”(hŒint”h]”hŒint”…”�”}”(hj"Eh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjEubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Eh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjEubjæ)�”}”(hŒtype”h]”hŒtype”…”�”}”(hj>Eh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj§Dubjq)�”}”(hŒunsigned int line_no”h]”(j3)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjWEh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjSEubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeEh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjSEubj3)�”}”(hŒint”h]”hŒint”…”�”}”(hjsEh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjSEubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Eh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjSEubjæ)�”}”(hŒline_no”h]”hŒline_no”…”�”}”(hj�Eh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjSEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj§Dubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjnDh²hh³j€Dh´M8ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjjDh²hh³j€Dh´M8ubah}”(h]”jeDah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j€Dh´M8hjgDh²hubj)�”}”(hhh]”hî)�”}”(hŒstart reserved handle”h]”hŒstart reserved handle”…”�”}”(hj¹Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M8hj¶Eh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjgDh²hh³j€Dh´M8ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jÑEj4jÑEj5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hXM**Parameters** ``handle_t *handle`` handle to start ``unsigned int type`` for handle statistics ``unsigned int line_no`` for handle statistics **Description** Start handle that has been previously reserved with jbd2_journal_reserve(). This attaches **handle** to the running transaction (or creates one if there's not transaction running). Unlike jbd2_journal_start() this function cannot block on journal commit, checkpointing, or similar stuff. It can block on memory allocation or frozen journal though. Return 0 on success, non-zero on error - handle is freed in that case.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjÛEh]”hŒ Parameters”…”�”}”(hjÝEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjÙEubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M<hjÕEubjþ)�”}”(hhh]”(j)�”}”(hŒ%``handle_t *handle`` handle to start ”h]”(j )�”}”(hŒ``handle_t *handle``”h]”j®)�”}”(hjúEh]”hŒhandle_t *handle”…”�”}”(hjüEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjøEubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M9hjôEubj#)�”}”(hhh]”hî)�”}”(hŒhandle to start”h]”hŒhandle to start”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jFh´M9hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjôEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jFh´M9hjñEubj)�”}”(hŒ,``unsigned int type`` for handle statistics ”h]”(j )�”}”(hŒ``unsigned int type``”h]”j®)�”}”(hj3Fh]”hŒunsigned int type”…”�”}”(hj5Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj1Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M:hj-Fubj#)�”}”(hhh]”hî)�”}”(hŒfor handle statistics”h]”hŒfor handle statistics”…”�”}”(hjLFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jHFh´M:hjIFubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj-Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jHFh´M:hjñEubj)�”}”(hŒ/``unsigned int line_no`` for handle statistics ”h]”(j )�”}”(hŒ``unsigned int line_no``”h]”j®)�”}”(hjlFh]”hŒunsigned int line_no”…”�”}”(hjnFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M;hjfFubj#)�”}”(hhh]”hî)�”}”(hŒfor handle statistics”h]”hŒfor handle statistics”…”�”}”(hj…Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j�Fh´M;hj‚Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjfFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�Fh´M;hjñEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhjÕEubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj§Fh]”hŒ Description”…”�”}”(hj©Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj¥Fubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M=hjÕEubhî)�”}”(hX[Start handle that has been previously reserved with jbd2_journal_reserve(). This attaches **handle** to the running transaction (or creates one if there's not transaction running). Unlike jbd2_journal_start() this function cannot block on journal commit, checkpointing, or similar stuff. It can block on memory allocation or frozen journal though.”h]”(hŒZStart handle that has been previously reserved with jbd2_journal_reserve(). This attaches ”…”�”}”(hj½Fh²hh³Nh´Nubj=)�”}”(hŒ **handle**”h]”hŒhandle”…”�”}”(hjÅFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj½FubhŒù to the running transaction (or creates one if there’s not transaction running). Unlike jbd2_journal_start() this function cannot block on journal commit, checkpointing, or similar stuff. It can block on memory allocation or frozen journal though.”…”�”}”(hj½Fh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M<hjÕEubhî)�”}”(hŒFReturn 0 on success, non-zero on error - handle is freed in that case.”h]”hŒFReturn 0 on success, non-zero on error - handle is freed in that case.”…”�”}”(hjÞFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MBhjÕEubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ jbd2_journal_extend (C function)”Œc.jbd2_journal_extend”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒKint jbd2_journal_extend (handle_t *handle, int nblocks, int revoke_records)”h]”j·)�”}”(hŒJint jbd2_journal_extend(handle_t *handle, int nblocks, int revoke_records)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj Gh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj Gh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MnubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj Gh²hh³jGh´Mnubjà)�”}”(hŒjbd2_journal_extend”h]”jæ)�”}”(hŒjbd2_journal_extend”h]”hŒjbd2_journal_extend”…”�”}”(hj.Gh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj*Gubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj Gh²hh³jGh´Mnubjk)�”}”(hŒ3(handle_t *handle, int nblocks, int revoke_records)”h]”(jq)�”}”(hŒhandle_t *handle”h]”(h)�”}”(hhh]”jæ)�”}”(hŒhandle_t”h]”hŒhandle_t”…”�”}”(hjMGh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjJGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jOGŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j0GsbŒc.jbd2_journal_extend”†”asbuh1hhjFGubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmGh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjFGubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj{Gh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjFGubjæ)�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hjˆGh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjFGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjBGubjq)�”}”(hŒ int nblocks”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj¡Gh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj�GubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Gh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj�Gubjæ)�”}”(hŒnblocks”h]”hŒnblocks”…”�”}”(hj½Gh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj�Gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjBGubjq)�”}”(hŒint revoke_records”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjÖGh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÒGubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäGh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÒGubjæ)�”}”(hŒrevoke_records”h]”hŒrevoke_records”…”�”}”(hjòGh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÒGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjBGubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj Gh²hh³jGh´Mnubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjGh²hh³jGh´Mnubah}”(h]”jGah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jGh´MnhjGh²hubj)�”}”(hhh]”hî)�”}”(hŒextend buffer credits.”h]”hŒextend buffer credits.”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MnhjHh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjGh²hh³jGh´Mnubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j4Hj4j4Hj5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hX**Parameters** ``handle_t *handle`` handle to 'extend' ``int nblocks`` nr blocks to try to extend by. ``int revoke_records`` number of revoke records to try to extend by. **Description** Some transactions, such as large extends and truncates, can be done atomically all at once or in several stages. The operation requests a credit for a number of buffer modifications in advance, but can extend its credit if it needs more. jbd2_journal_extend tries to give the running handle more buffer credits. It does not guarantee that allocation - this is a best-effort only. The calling process MUST be able to deal cleanly with a failure to extend here. Return 0 on success, non-zero on failure. return code < 0 implies an error return code > 0 implies normal transaction-full status.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj>Hh]”hŒ Parameters”…”�”}”(hj@Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M|hj8Hubhî)�”}”(hŒXreturn code < 0 implies an error return code > 0 implies normal transaction-full status.”h]”hŒXreturn code < 0 implies an error return code > 0 implies normal transaction-full status.”…”�”}”(hjMIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M~hj8Hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ"jbd2__journal_restart (C function)”Œc.jbd2__journal_restart”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ]int jbd2__journal_restart (handle_t *handle, int nblocks, int revoke_records, gfp_t gfp_mask)”h]”j·)�”}”(hŒ\int jbd2__journal_restart(handle_t *handle, int nblocks, int revoke_records, gfp_t gfp_mask)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj|Ih²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjxIh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MèubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹Ih²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjxIh²hh³jŠIh´Mèubjà)�”}”(hŒjbd2__journal_restart”h]”jæ)�”}”(hŒjbd2__journal_restart”h]”hŒjbd2__journal_restart”…”�”}”(hj�Ih²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj™Iubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjxIh²hh³jŠIh´Mèubjk)�”}”(hŒC(handle_t *handle, int nblocks, int revoke_records, gfp_t gfp_mask)”h]”(jq)�”}”(hŒhandle_t *handle”h]”(h)�”}”(hhh]”jæ)�”}”(hŒhandle_t”h]”hŒhandle_t”…”�”}”(hj¼Ih²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj¹Iubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j¾IŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�jŸIsbŒc.jbd2__journal_restart”†”asbuh1hhjµIubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜIh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjµIubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjêIh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjµIubjæ)�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hj÷Ih²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjµIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj±Iubjq)�”}”(hŒ int nblocks”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj JubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj Jubjæ)�”}”(hŒnblocks”h]”hŒnblocks”…”�”}”(hj,Jh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj Jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj±Iubjq)�”}”(hŒint revoke_records”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjEJh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjAJubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSJh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjAJubjæ)�”}”(hŒrevoke_records”h]”hŒrevoke_records”…”�”}”(hjaJh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjAJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj±Iubjq)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”jæ)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj}Jh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjzJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jJŒmodname”NŒ classname”Nj“j–)�”}”j™]”jØIŒc.jbd2__journal_restart”†”asbuh1hhjvJubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›Jh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjvJubjæ)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj©Jh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjvJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj±Iubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjxIh²hh³jŠIh´Mèubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjtIh²hh³jŠIh´Mèubah}”(h]”joIah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jŠIh´MèhjqIh²hubj)�”}”(hhh]”hî)�”}”(hŒrestart a handle .”h]”hŒrestart a handle .”…”�”}”(hjÓJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MèhjÐJh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqIh²hh³jŠIh´Mèubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jëJj4jëJj5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hX™**Parameters** ``handle_t *handle`` handle to restart ``int nblocks`` nr credits requested ``int revoke_records`` number of revoke record credits requested ``gfp_t gfp_mask`` memory allocation flags (for start_this_handle) **Description** Restart a handle for a multi-transaction filesystem operation. If the jbd2_journal_extend() call above fails to grant new buffer credits to a running handle, a call to jbd2_journal_restart will commit the handle's transaction so far and reattach the handle to a new transaction capable of guaranteeing the requested number of credits. We preserve reserved handle if there's any attached to the passed in handle.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjõJh]”hŒ Parameters”…”�”}”(hj÷Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjóJubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MìhjïJubjþ)�”}”(hhh]”(j)�”}”(hŒ'``handle_t *handle`` handle to restart ”h]”(j )�”}”(hŒ``handle_t *handle``”h]”j®)�”}”(hjKh]”hŒhandle_t *handle”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MéhjKubj#)�”}”(hhh]”hî)�”}”(hŒhandle to restart”h]”hŒhandle to restart”…”�”}”(hj-Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j)Kh´Méhj*Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)Kh´Méhj Kubj)�”}”(hŒ%``int nblocks`` nr credits requested ”h]”(j )�”}”(hŒ``int nblocks``”h]”j®)�”}”(hjMKh]”hŒ int nblocks”…”�”}”(hjOKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjKKubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MêhjGKubj#)�”}”(hhh]”hî)�”}”(hŒnr credits requested”h]”hŒnr credits requested”…”�”}”(hjfKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jbKh´MêhjcKubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjGKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jbKh´Mêhj Kubj)�”}”(hŒA``int revoke_records`` number of revoke record credits requested ”h]”(j )�”}”(hŒ``int revoke_records``”h]”j®)�”}”(hj†Kh]”hŒint revoke_records”…”�”}”(hjˆKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj„Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mëhj€Kubj#)�”}”(hhh]”hî)�”}”(hŒ)number of revoke record credits requested”h]”hŒ)number of revoke record credits requested”…”�”}”(hjŸKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j›Kh´MëhjœKubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj€Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›Kh´Mëhj Kubj)�”}”(hŒC``gfp_t gfp_mask`` memory allocation flags (for start_this_handle) ”h]”(j )�”}”(hŒ``gfp_t gfp_mask``”h]”j®)�”}”(hj¿Kh]”hŒgfp_t gfp_mask”…”�”}”(hjÁKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj½Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mìhj¹Kubj#)�”}”(hhh]”hî)�”}”(hŒ/memory allocation flags (for start_this_handle)”h]”hŒ/memory allocation flags (for start_this_handle)”…”�”}”(hjØKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÔKh´MìhjÕKubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¹Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔKh´Mìhj Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhjïJubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjúKh]”hŒ Description”…”�”}”(hjüKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjøKubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MîhjïJubhî)�”}”(hŒ>Restart a handle for a multi-transaction filesystem operation.”h]”hŒ>Restart a handle for a multi-transaction filesystem operation.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MíhjïJubhî)�”}”(hX\If the jbd2_journal_extend() call above fails to grant new buffer credits to a running handle, a call to jbd2_journal_restart will commit the handle's transaction so far and reattach the handle to a new transaction capable of guaranteeing the requested number of credits. We preserve reserved handle if there's any attached to the passed in handle.”h]”hX`If the jbd2_journal_extend() call above fails to grant new buffer credits to a running handle, a call to jbd2_journal_restart will commit the handle’s transaction so far and reattach the handle to a new transaction capable of guaranteeing the requested number of credits. We preserve reserved handle if there’s any attached to the passed in handle.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MðhjïJubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ&jbd2_journal_lock_updates (C function)”Œc.jbd2_journal_lock_updates”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ3void jbd2_journal_lock_updates (journal_t *journal)”h]”j·)�”}”(hŒ2void jbd2_journal_lock_updates(journal_t *journal)”h]”(j3)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjNLh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjJLh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MSubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]Lh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjJLh²hh³j\Lh´MSubjà)�”}”(hŒjbd2_journal_lock_updates”h]”jæ)�”}”(hŒjbd2_journal_lock_updates”h]”hŒjbd2_journal_lock_updates”…”�”}”(hjoLh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjkLubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjJLh²hh³j\Lh´MSubjk)�”}”(hŒ(journal_t *journal)”h]”jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjŽLh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj‹Lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j�LŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�jqLsbŒc.jbd2_journal_lock_updates”†”asbuh1hhj‡LubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®Lh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj‡Lubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj¼Lh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj‡Lubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hjÉLh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj‡Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjƒLubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjJLh²hh³j\Lh´MSubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjFLh²hh³j\Lh´MSubah}”(h]”jALah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j\Lh´MShjCLh²hubj)�”}”(hhh]”hî)�”}”(hŒ establish a transaction barrier.”h]”hŒ establish a transaction barrier.”…”�”}”(hjóLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MShjðLh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCLh²hh³j\Lh´MSubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j Mj4j Mj5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hXJ**Parameters** ``journal_t *journal`` Journal to establish a barrier on. **Description** This locks out any further updates from being started, and blocks until all existing updates have completed, returning only once the journal is in a quiescent state with no updates running. The journal lock should not be held on entry.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjMh]”hŒ Parameters”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MWhjMubjþ)�”}”(hhh]”j)�”}”(hŒ:``journal_t *journal`` Journal to establish a barrier on. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hj4Mh]”hŒjournal_t *journal”…”�”}”(hj6Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj2Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MThj.Mubj#)�”}”(hhh]”hî)�”}”(hŒ"Journal to establish a barrier on.”h]”hŒ"Journal to establish a barrier on.”…”�”}”(hjMMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jIMh´MThjJMubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj.Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jIMh´MThj+Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhjMubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjoMh]”hŒ Description”…”�”}”(hjqMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjmMubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MVhjMubhî)�”}”(hŒ½This locks out any further updates from being started, and blocks until all existing updates have completed, returning only once the journal is in a quiescent state with no updates running.”h]”hŒ½This locks out any further updates from being started, and blocks until all existing updates have completed, returning only once the journal is in a quiescent state with no updates running.”…”�”}”(hj…Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MUhjMubhî)�”}”(hŒ-The journal lock should not be held on entry.”h]”hŒ-The journal lock should not be held on entry.”…”�”}”(hj”Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MYhjMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ(jbd2_journal_unlock_updates (C function)”Œc.jbd2_journal_unlock_updates”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ5void jbd2_journal_unlock_updates (journal_t *journal)”h]”j·)�”}”(hŒ4void jbd2_journal_unlock_updates(journal_t *journal)”h]”(j3)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÃMh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj¿Mh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MzubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒMh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj¿Mh²hh³jÑMh´Mzubjà)�”}”(hŒjbd2_journal_unlock_updates”h]”jæ)�”}”(hŒjbd2_journal_unlock_updates”h]”hŒjbd2_journal_unlock_updates”…”�”}”(hjäMh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjàMubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj¿Mh²hh³jÑMh´Mzubjk)�”}”(hŒ(journal_t *journal)”h]”jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jNŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�jæMsbŒc.jbd2_journal_unlock_updates”†”asbuh1hhjüMubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Nh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjüMubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj1Nh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjüMubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hj>Nh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjüMubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjøMubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj¿Mh²hh³jÑMh´Mzubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj»Mh²hh³jÑMh´Mzubah}”(h]”j¶Mah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jÑMh´Mzhj¸Mh²hubj)�”}”(hhh]”hî)�”}”(hŒrelease barrier”h]”hŒrelease barrier”…”�”}”(hjhNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MzhjeNh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸Mh²hh³jÑMh´Mzubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j€Nj4j€Nj5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hŒ×**Parameters** ``journal_t *journal`` Journal to release the barrier on. **Description** Release a transaction barrier obtained with jbd2_journal_lock_updates(). Should be called without the journal lock held.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjŠNh]”hŒ Parameters”…”�”}”(hjŒNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjˆNubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M~hj„Nubjþ)�”}”(hhh]”j)�”}”(hŒ:``journal_t *journal`` Journal to release the barrier on. ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hj©Nh]”hŒjournal_t *journal”…”�”}”(hj«Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj§Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M{hj£Nubj#)�”}”(hhh]”hî)�”}”(hŒ"Journal to release the barrier on.”h]”hŒ"Journal to release the barrier on.”…”�”}”(hjÂNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j¾Nh´M{hj¿Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj£Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¾Nh´M{hj Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhj„Nubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjäNh]”hŒ Description”…”�”}”(hjæNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjâNubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M}hj„Nubhî)�”}”(hŒHRelease a transaction barrier obtained with jbd2_journal_lock_updates().”h]”hŒHRelease a transaction barrier obtained with jbd2_journal_lock_updates().”…”�”}”(hjúNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M|hj„Nubhî)�”}”(hŒ/Should be called without the journal lock held.”h]”hŒ/Should be called without the journal lock held.”…”�”}”(hj Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M~hj„Nubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ*jbd2_journal_get_write_access (C function)”Œc.jbd2_journal_get_write_access”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒLint jbd2_journal_get_write_access (handle_t *handle, struct buffer_head *bh)”h]”j·)�”}”(hŒKint jbd2_journal_get_write_access(handle_t *handle, struct buffer_head *bh)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj8Oh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj4Oh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MÆubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGOh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj4Oh²hh³jFOh´MÆubjà)�”}”(hŒjbd2_journal_get_write_access”h]”jæ)�”}”(hŒjbd2_journal_get_write_access”h]”hŒjbd2_journal_get_write_access”…”�”}”(hjYOh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjUOubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj4Oh²hh³jFOh´MÆubjk)�”}”(hŒ*(handle_t *handle, struct buffer_head *bh)”h]”(jq)�”}”(hŒhandle_t *handle”h]”(h)�”}”(hhh]”jæ)�”}”(hŒhandle_t”h]”hŒhandle_t”…”�”}”(hjxOh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjuOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jzOŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j[OsbŒc.jbd2_journal_get_write_access”†”asbuh1hhjqOubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜Oh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjqOubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj¦Oh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjqOubjæ)�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hj³Oh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjqOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjmOubjq)�”}”(hŒstruct buffer_head *bh”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hjÌOh²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjÈOubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙOh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÈOubh)�”}”(hhh]”jæ)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjêOh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjçOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jìOŒmodname”NŒ classname”Nj“j–)�”}”j™]”j”OŒc.jbd2_journal_get_write_access”†”asbuh1hhjÈOubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÈOubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjÈOubjæ)�”}”(hŒbh”h]”hŒbh”…”�”}”(hj#Ph²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÈOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjmOubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj4Oh²hh³jFOh´MÆubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj0Oh²hh³jFOh´MÆubah}”(h]”j+Oah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jFOh´MÆhj-Oh²hubj)�”}”(hhh]”hî)�”}”(hŒ@notify intent to modify a buffer for metadata (not data) update.”h]”hŒ@notify intent to modify a buffer for metadata (not data) update.”…”�”}”(hjMPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MÆhjJPh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-Oh²hh³jFOh´MÆubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jePj4jePj5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hX`**Parameters** ``handle_t *handle`` transaction to add buffer modifications to ``struct buffer_head *bh`` bh to be used for metadata writes **Return** error code or 0 on success. **Description** In full data journalling mode the buffer may be of type BJ_AsyncData, because we're ``write()ing`` a buffer which is also part of a shared mapping.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjoPh]”hŒ Parameters”…”�”}”(hjqPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjmPubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MÊhjiPubjþ)�”}”(hhh]”(j)�”}”(hŒ@``handle_t *handle`` transaction to add buffer modifications to ”h]”(j )�”}”(hŒ``handle_t *handle``”h]”j®)�”}”(hjŽPh]”hŒhandle_t *handle”…”�”}”(hj�Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjŒPubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MÈhjˆPubj#)�”}”(hhh]”hî)�”}”(hŒ*transaction to add buffer modifications to”h]”hŒ*transaction to add buffer modifications to”…”�”}”(hj§Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j£Ph´MÈhj¤Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjˆPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j£Ph´MÈhj…Pubj)�”}”(hŒ=``struct buffer_head *bh`` bh to be used for metadata writes ”h]”(j )�”}”(hŒ``struct buffer_head *bh``”h]”j®)�”}”(hjÇPh]”hŒstruct buffer_head *bh”…”�”}”(hjÉPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÅPubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MÉhjÁPubj#)�”}”(hhh]”hî)�”}”(hŒ!bh to be used for metadata writes”h]”hŒ!bh to be used for metadata writes”…”�”}”(hjàPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jÜPh´MÉhjÝPubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÁPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÜPh´MÉhj…Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhjiPubhî)�”}”(hŒ **Return**”h]”j=)�”}”(hjQh]”hŒReturn”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MËhjiPubhî)�”}”(hŒerror code or 0 on success.”h]”hŒerror code or 0 on success.”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MËhjiPubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj)Qh]”hŒ Description”…”�”}”(hj+Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj'Qubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MÍhjiPubhî)�”}”(hŒ“In full data journalling mode the buffer may be of type BJ_AsyncData, because we're ``write()ing`` a buffer which is also part of a shared mapping.”h]”(hŒVIn full data journalling mode the buffer may be of type BJ_AsyncData, because we’re ”…”�”}”(hj?Qh²hh³Nh´Nubj®)�”}”(hŒ``write()ing``”h]”hŒ write()ing”…”�”}”(hjGQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj?QubhŒ1 a buffer which is also part of a shared mapping.”…”�”}”(hj?Qh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MÌhjiPubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ+jbd2_journal_get_create_access (C function)”Œ c.jbd2_journal_get_create_access”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒMint jbd2_journal_get_create_access (handle_t *handle, struct buffer_head *bh)”h]”j·)�”}”(hŒLint jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj€Qh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj|Qh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Qh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj|Qh²hh³jŽQh´Mubjà)�”}”(hŒjbd2_journal_get_create_access”h]”jæ)�”}”(hŒjbd2_journal_get_create_access”h]”hŒjbd2_journal_get_create_access”…”�”}”(hj¡Qh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj�Qubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj|Qh²hh³jŽQh´Mubjk)�”}”(hŒ*(handle_t *handle, struct buffer_head *bh)”h]”(jq)�”}”(hŒhandle_t *handle”h]”(h)�”}”(hhh]”jæ)�”}”(hŒhandle_t”h]”hŒhandle_t”…”�”}”(hjÀQh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj½Qubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jÂQŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j£QsbŒ c.jbd2_journal_get_create_access”†”asbuh1hhj¹QubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàQh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj¹Qubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjîQh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj¹Qubjæ)�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hjûQh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj¹Qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjµQubjq)�”}”(hŒstruct buffer_head *bh”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjRubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!Rh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjRubh)�”}”(hhh]”jæ)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hj2Rh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj/Rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j4RŒmodname”NŒ classname”Nj“j–)�”}”j™]”jÜQŒ c.jbd2_journal_get_create_access”†”asbuh1hhjRubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPRh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjRubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj^Rh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjRubjæ)�”}”(hŒbh”h]”hŒbh”…”�”}”(hjkRh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjµQubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj|Qh²hh³jŽQh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjxQh²hh³jŽQh´Mubah}”(h]”jsQah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jŽQh´MhjuQh²hubj)�”}”(hhh]”hî)�”}”(hŒ%notify intent to use newly created bh”h]”hŒ%notify intent to use newly created bh”…”�”}”(hj•Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mhj’Rh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjuQh²hh³jŽQh´Mubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j­Rj4j­Rj5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hŒ¡**Parameters** ``handle_t *handle`` transaction to new buffer to ``struct buffer_head *bh`` new buffer. **Description** Call this if you create a new bh.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj·Rh]”hŒ Parameters”…”�”}”(hj¹Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjµRubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mhj±Rubjþ)�”}”(hhh]”(j)�”}”(hŒ2``handle_t *handle`` transaction to new buffer to ”h]”(j )�”}”(hŒ``handle_t *handle``”h]”j®)�”}”(hjÖRh]”hŒhandle_t *handle”…”�”}”(hjØRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÔRubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MhjÐRubj#)�”}”(hhh]”hî)�”}”(hŒtransaction to new buffer to”h]”hŒtransaction to new buffer to”…”�”}”(hjïRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jëRh´MhjìRubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÐRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jëRh´MhjÍRubj)�”}”(hŒ'``struct buffer_head *bh`` new buffer. ”h]”(j )�”}”(hŒ``struct buffer_head *bh``”h]”j®)�”}”(hjSh]”hŒstruct buffer_head *bh”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj Subah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mhj Subj#)�”}”(hhh]”hî)�”}”(hŒ new buffer.”h]”hŒ new buffer.”…”�”}”(hj(Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j$Sh´Mhj%Subah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$Sh´MhjÍRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhj±Rubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjJSh]”hŒ Description”…”�”}”(hjLSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjHSubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mhj±Rubhî)�”}”(hŒ!Call this if you create a new bh.”h]”hŒ!Call this if you create a new bh.”…”�”}”(hj`Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mhj±Rubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ)jbd2_journal_get_undo_access (C function)”Œc.jbd2_journal_get_undo_access”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒKint jbd2_journal_get_undo_access (handle_t *handle, struct buffer_head *bh)”h]”j·)�”}”(hŒJint jbd2_journal_get_undo_access(handle_t *handle, struct buffer_head *bh)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj�Sh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj‹Sh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M`ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžSh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj‹Sh²hh³j�Sh´M`ubjà)�”}”(hŒjbd2_journal_get_undo_access”h]”jæ)�”}”(hŒjbd2_journal_get_undo_access”h]”hŒjbd2_journal_get_undo_access”…”�”}”(hj°Sh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj¬Subah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj‹Sh²hh³j�Sh´M`ubjk)�”}”(hŒ*(handle_t *handle, struct buffer_head *bh)”h]”(jq)�”}”(hŒhandle_t *handle”h]”(h)�”}”(hhh]”jæ)�”}”(hŒhandle_t”h]”hŒhandle_t”…”�”}”(hjÏSh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÌSubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jÑSŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j²SsbŒc.jbd2_journal_get_undo_access”†”asbuh1hhjÈSubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïSh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÈSubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjýSh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjÈSubjæ)�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hj Th²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÈSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjÄSubjq)�”}”(hŒstruct buffer_head *bh”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hj#Th²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjTubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Th²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjTubh)�”}”(hhh]”jæ)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hjATh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj>Tubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jCTŒmodname”NŒ classname”Nj“j–)�”}”j™]”jëSŒc.jbd2_journal_get_undo_access”†”asbuh1hhjTubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_Th²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjTubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjmTh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjTubjæ)�”}”(hŒbh”h]”hŒbh”…”�”}”(hjzTh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjÄSubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj‹Sh²hh³j�Sh´M`ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj‡Sh²hh³j�Sh´M`ubah}”(h]”j‚Sah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j�Sh´M`hj„Sh²hubj)�”}”(hhh]”hî)�”}”(hŒANotify intent to modify metadata with non-rewindable consequences”h]”hŒANotify intent to modify metadata with non-rewindable consequences”…”�”}”(hj¤Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M`hj¡Th²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„Sh²hh³j�Sh´M`ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j¼Tj4j¼Tj5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hXS**Parameters** ``handle_t *handle`` transaction ``struct buffer_head *bh`` buffer to undo **Description** Sometimes there is a need to distinguish between metadata which has been committed to disk and that which has not. The ext3fs code uses this for freeing and allocating space, we have to make sure that we do not reuse freed space until the deallocation has been committed, since if we overwrote that space we would make the delete un-rewindable in case of a crash. To deal with that, jbd2_journal_get_undo_access requests write access to a buffer for parts of non-rewindable operations such as delete operations on the bitmaps. The journaling code must keep a copy of the buffer's contents prior to the undo_access call until such time as we know that the buffer has definitely been committed to disk. We never need to know which transaction the committed data is part of, buffers touched here are guaranteed to be dirtied later and so will be committed to a new transaction in due course, at which point we can discard the old committed data pointer. Returns error number or 0 on success.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjÆTh]”hŒ Parameters”…”�”}”(hjÈTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjÄTubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MdhjÀTubjþ)�”}”(hhh]”(j)�”}”(hŒ!``handle_t *handle`` transaction ”h]”(j )�”}”(hŒ``handle_t *handle``”h]”j®)�”}”(hjåTh]”hŒhandle_t *handle”…”�”}”(hjçTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjãTubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MbhjßTubj#)�”}”(hhh]”hî)�”}”(hŒ transaction”h]”hŒ transaction”…”�”}”(hjþTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³júTh´MbhjûTubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjßTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³júTh´MbhjÜTubj)�”}”(hŒ*``struct buffer_head *bh`` buffer to undo ”h]”(j )�”}”(hŒ``struct buffer_head *bh``”h]”j®)�”}”(hjUh]”hŒstruct buffer_head *bh”…”�”}”(hj Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjUubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MchjUubj#)�”}”(hhh]”hî)�”}”(hŒbuffer to undo”h]”hŒbuffer to undo”…”�”}”(hj7Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j3Uh´Mchj4Uubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j3Uh´MchjÜTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhjÀTubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjYUh]”hŒ Description”…”�”}”(hj[Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjWUubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MehjÀTubhî)�”}”(hXlSometimes there is a need to distinguish between metadata which has been committed to disk and that which has not. The ext3fs code uses this for freeing and allocating space, we have to make sure that we do not reuse freed space until the deallocation has been committed, since if we overwrote that space we would make the delete un-rewindable in case of a crash.”h]”hXlSometimes there is a need to distinguish between metadata which has been committed to disk and that which has not. The ext3fs code uses this for freeing and allocating space, we have to make sure that we do not reuse freed space until the deallocation has been committed, since if we overwrote that space we would make the delete un-rewindable in case of a crash.”…”�”}”(hjoUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MdhjÀTubhî)�”}”(hXQTo deal with that, jbd2_journal_get_undo_access requests write access to a buffer for parts of non-rewindable operations such as delete operations on the bitmaps. The journaling code must keep a copy of the buffer's contents prior to the undo_access call until such time as we know that the buffer has definitely been committed to disk.”h]”hXSTo deal with that, jbd2_journal_get_undo_access requests write access to a buffer for parts of non-rewindable operations such as delete operations on the bitmaps. The journaling code must keep a copy of the buffer’s contents prior to the undo_access call until such time as we know that the buffer has definitely been committed to disk.”…”�”}”(hj~Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MkhjÀTubhî)�”}”(hŒùWe never need to know which transaction the committed data is part of, buffers touched here are guaranteed to be dirtied later and so will be committed to a new transaction in due course, at which point we can discard the old committed data pointer.”h]”hŒùWe never need to know which transaction the committed data is part of, buffers touched here are guaranteed to be dirtied later and so will be committed to a new transaction in due course, at which point we can discard the old committed data pointer.”…”�”}”(hj�Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MqhjÀTubhî)�”}”(hŒ%Returns error number or 0 on success.”h]”hŒ%Returns error number or 0 on success.”…”�”}”(hjœUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MvhjÀTubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ&jbd2_journal_set_triggers (C function)”Œc.jbd2_journal_set_triggers”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ^void jbd2_journal_set_triggers (struct buffer_head *bh, struct jbd2_buffer_trigger_type *type)”h]”j·)�”}”(hŒ]void jbd2_journal_set_triggers(struct buffer_head *bh, struct jbd2_buffer_trigger_type *type)”h]”(j3)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjËUh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjÇUh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M­ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚUh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÇUh²hh³jÙUh´M­ubjà)�”}”(hŒjbd2_journal_set_triggers”h]”jæ)�”}”(hŒjbd2_journal_set_triggers”h]”hŒjbd2_journal_set_triggers”…”�”}”(hjìUh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjèUubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjÇUh²hh³jÙUh´M­ubjk)�”}”(hŒ?(struct buffer_head *bh, struct jbd2_buffer_trigger_type *type)”h]”(jq)�”}”(hŒstruct buffer_head *bh”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjVubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjVubh)�”}”(hhh]”jæ)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hj&Vh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj#Vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j(VŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�jîUsbŒc.jbd2_journal_set_triggers”†”asbuh1hhjVubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFVh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjVubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjTVh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjVubjæ)�”}”(hŒbh”h]”hŒbh”…”�”}”(hjaVh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjVubjq)�”}”(hŒ%struct jbd2_buffer_trigger_type *type”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hjzVh²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjvVubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡Vh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjvVubh)�”}”(hhh]”jæ)�”}”(hŒjbd2_buffer_trigger_type”h]”hŒjbd2_buffer_trigger_type”…”�”}”(hj˜Vh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj•Vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jšVŒmodname”NŒ classname”Nj“j–)�”}”j™]”jBVŒc.jbd2_journal_set_triggers”†”asbuh1hhjvVubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶Vh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjvVubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjÄVh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjvVubjæ)�”}”(hŒtype”h]”hŒtype”…”�”}”(hjÑVh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjvVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjVubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjÇUh²hh³jÙUh´M­ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjÃUh²hh³jÙUh´M­ubah}”(h]”j¾Uah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jÙUh´M­hjÀUh²hubj)�”}”(hhh]”hî)�”}”(hŒ Add triggers for commit writeout”h]”hŒ Add triggers for commit writeout”…”�”}”(hjûVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M­hjøVh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀUh²hh³jÙUh´M­ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jWj4jWj5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hX­**Parameters** ``struct buffer_head *bh`` buffer to trigger on ``struct jbd2_buffer_trigger_type *type`` struct jbd2_buffer_trigger_type containing the trigger(s). **Description** Set any triggers on this journal_head. This is always safe, because triggers for a committing buffer will be saved off, and triggers for a running transaction will match the buffer in that transaction. Call with NULL to clear the triggers.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjWh]”hŒ Parameters”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M±hjWubjþ)�”}”(hhh]”(j)�”}”(hŒ0``struct buffer_head *bh`` buffer to trigger on ”h]”(j )�”}”(hŒ``struct buffer_head *bh``”h]”j®)�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj:Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M®hj6Wubj#)�”}”(hhh]”hî)�”}”(hŒbuffer to trigger on”h]”hŒbuffer to trigger on”…”�”}”(hjUWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jQWh´M®hjRWubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj6Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQWh´M®hj3Wubj)�”}”(hŒe``struct jbd2_buffer_trigger_type *type`` struct jbd2_buffer_trigger_type containing the trigger(s). ”h]”(j )�”}”(hŒ)``struct jbd2_buffer_trigger_type *type``”h]”j®)�”}”(hjuWh]”hŒ%struct jbd2_buffer_trigger_type *type”…”�”}”(hjwWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjsWubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M¯hjoWubj#)�”}”(hhh]”hî)�”}”(hŒ:struct jbd2_buffer_trigger_type containing the trigger(s).”h]”hŒ:struct jbd2_buffer_trigger_type containing the trigger(s).”…”�”}”(hjŽWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jŠWh´M¯hj‹Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjoWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠWh´M¯hj3Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhjWubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj°Wh]”hŒ Description”…”�”}”(hj²Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj®Wubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M±hjWubhî)�”}”(hŒÊSet any triggers on this journal_head. This is always safe, because triggers for a committing buffer will be saved off, and triggers for a running transaction will match the buffer in that transaction.”h]”hŒÊSet any triggers on this journal_head. This is always safe, because triggers for a committing buffer will be saved off, and triggers for a running transaction will match the buffer in that transaction.”…”�”}”(hjÆWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M°hjWubhî)�”}”(hŒ%Call with NULL to clear the triggers.”h]”hŒ%Call with NULL to clear the triggers.”…”�”}”(hjÕWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M´hjWubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ(jbd2_journal_dirty_metadata (C function)”Œc.jbd2_journal_dirty_metadata”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒJint jbd2_journal_dirty_metadata (handle_t *handle, struct buffer_head *bh)”h]”j·)�”}”(hŒIint jbd2_journal_dirty_metadata(handle_t *handle, struct buffer_head *bh)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjXh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M×ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjXh²hh³jXh´M×ubjà)�”}”(hŒjbd2_journal_dirty_metadata”h]”jæ)�”}”(hŒjbd2_journal_dirty_metadata”h]”hŒjbd2_journal_dirty_metadata”…”�”}”(hj%Xh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj!Xubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjXh²hh³jXh´M×ubjk)�”}”(hŒ*(handle_t *handle, struct buffer_head *bh)”h]”(jq)�”}”(hŒhandle_t *handle”h]”(h)�”}”(hhh]”jæ)�”}”(hŒhandle_t”h]”hŒhandle_t”…”�”}”(hjDXh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjAXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jFXŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j'XsbŒc.jbd2_journal_dirty_metadata”†”asbuh1hhj=XubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdXh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj=Xubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjrXh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj=Xubjæ)�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj=Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj9Xubjq)�”}”(hŒstruct buffer_head *bh”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hj˜Xh²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hj”XubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Xh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj”Xubh)�”}”(hhh]”jæ)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hj¶Xh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj³Xubah}”(h]”h ]”•„ªh"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j¸XŒmodname”NŒ classname”Nj“j–)�”}”j™]”j`XŒc.jbd2_journal_dirty_metadata”†”asbuh1hhj”XubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔXh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj”Xubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjâXh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hj”Xubjæ)�”}”(hŒbh”h]”hŒbh”…”�”}”(hjïXh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj”Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj9Xubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjXh²hh³jXh´M×ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjüWh²hh³jXh´M×ubah}”(h]”j÷Wah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jXh´M×hjùWh²hubj)�”}”(hhh]”hî)�”}”(hŒ*mark a buffer as containing dirty metadata”h]”hŒ*mark a buffer as containing dirty metadata”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M×hjYh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjùWh²hh³jXh´M×ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j1Yj4j1Yj5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hX**Parameters** ``handle_t *handle`` transaction to add buffer to. ``struct buffer_head *bh`` buffer to mark **Description** mark dirty metadata which needs to be journaled as part of the current transaction. The buffer must have previously had jbd2_journal_get_write_access() called so that it has a valid journal_head attached to the buffer head. The buffer is placed on the transaction's metadata list and is marked as belonging to the transaction. Returns error number or 0 on success. Special care needs to be taken if the buffer already belongs to the current committing transaction (in which case we should have frozen data present for that commit). In that case, we don't relink the buffer: that only gets done when the old transaction finally completes its commit.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj;Yh]”hŒ Parameters”…”�”}”(hj=Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj9Yubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MÛhj5Yubjþ)�”}”(hhh]”(j)�”}”(hŒ3``handle_t *handle`` transaction to add buffer to. ”h]”(j )�”}”(hŒ``handle_t *handle``”h]”j®)�”}”(hjZYh]”hŒhandle_t *handle”…”�”}”(hj\Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjXYubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MØhjTYubj#)�”}”(hhh]”hî)�”}”(hŒtransaction to add buffer to.”h]”hŒtransaction to add buffer to.”…”�”}”(hjsYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³joYh´MØhjpYubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjTYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³joYh´MØhjQYubj)�”}”(hŒ*``struct buffer_head *bh`` buffer to mark ”h]”(j )�”}”(hŒ``struct buffer_head *bh``”h]”j®)�”}”(hj“Yh]”hŒstruct buffer_head *bh”…”�”}”(hj•Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj‘Yubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MÙhj�Yubj#)�”}”(hhh]”hî)�”}”(hŒbuffer to mark”h]”hŒbuffer to mark”…”�”}”(hj¬Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j¨Yh´MÙhj©Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj�Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¨Yh´MÙhjQYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhj5Yubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjÎYh]”hŒ Description”…”�”}”(hjÐYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjÌYubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MÛhj5Yubhî)�”}”(hŒSmark dirty metadata which needs to be journaled as part of the current transaction.”h]”hŒSmark dirty metadata which needs to be journaled as part of the current transaction.”…”�”}”(hjäYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MÚhj5Yubhî)�”}”(hŒ‹The buffer must have previously had jbd2_journal_get_write_access() called so that it has a valid journal_head attached to the buffer head.”h]”hŒ‹The buffer must have previously had jbd2_journal_get_write_access() called so that it has a valid journal_head attached to the buffer head.”…”�”}”(hjóYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MÝhj5Yubhî)�”}”(hŒfThe buffer is placed on the transaction's metadata list and is marked as belonging to the transaction.”h]”hŒhThe buffer is placed on the transaction’s metadata list and is marked as belonging to the transaction.”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Máhj5Yubhî)�”}”(hŒ%Returns error number or 0 on success.”h]”hŒ%Returns error number or 0 on success.”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mähj5Yubhî)�”}”(hXSpecial care needs to be taken if the buffer already belongs to the current committing transaction (in which case we should have frozen data present for that commit). In that case, we don't relink the buffer: that only gets done when the old transaction finally completes its commit.”h]”hXSpecial care needs to be taken if the buffer already belongs to the current committing transaction (in which case we should have frozen data present for that commit). In that case, we don’t relink the buffer: that only gets done when the old transaction finally completes its commit.”…”�”}”(hj Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mæhj5Yubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ jbd2_journal_forget (C function)”Œc.jbd2_journal_forget”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒBint jbd2_journal_forget (handle_t *handle, struct buffer_head *bh)”h]”j·)�”}”(hŒAint jbd2_journal_forget(handle_t *handle, struct buffer_head *bh)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjOZh²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjKZh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M–ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^Zh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjKZh²hh³j]Zh´M–ubjà)�”}”(hŒjbd2_journal_forget”h]”jæ)�”}”(hŒjbd2_journal_forget”h]”hŒjbd2_journal_forget”…”�”}”(hjpZh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjlZubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjKZh²hh³j]Zh´M–ubjk)�”}”(hŒ*(handle_t *handle, struct buffer_head *bh)”h]”(jq)�”}”(hŒhandle_t *handle”h]”(h)�”}”(hhh]”jæ)�”}”(hŒhandle_t”h]”hŒhandle_t”…”�”}”(hj�Zh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjŒZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j‘ZŒmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�jrZsbŒc.jbd2_journal_forget”†”asbuh1hhjˆZubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Zh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjˆZubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj½Zh²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjˆZubjæ)�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hjÊZh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjˆZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj„Zubjq)�”}”(hŒstruct buffer_head *bh”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hjãZh²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjßZubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðZh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjßZubh)�”}”(hhh]”jæ)�”}”(hŒ buffer_head”h]”hŒ buffer_head”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjþZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j[Œmodname”NŒ classname”Nj“j–)�”}”j™]”j«ZŒc.jbd2_journal_forget”†”asbuh1hhjßZubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjßZubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj-[h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjßZubjæ)�”}”(hŒbh”h]”hŒbh”…”�”}”(hj:[h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjßZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphj„Zubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjKZh²hh³j]Zh´M–ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjGZh²hh³j]Zh´M–ubah}”(h]”jBZah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j]Zh´M–hjDZh²hubj)�”}”(hhh]”hî)�”}”(hŒ,bforget() for potentially-journaled buffers.”h]”hŒ,bforget() for potentially-journaled buffers.”…”�”}”(hjd[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M–hja[h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDZh²hh³j]Zh´M–ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j|[j4j|[j5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hX**Parameters** ``handle_t *handle`` transaction handle ``struct buffer_head *bh`` bh to 'forget' **Description** We can only do the bforget if there are no commits pending against the buffer. If the buffer is dirty in the current running transaction we can safely unlink it. bh may not be a journalled buffer at all - it may be a non-JBD buffer which came off the hashtable. Check for this. Decrements bh->b_count by one. Allow this call even if the handle has aborted --- it may be part of the caller's cleanup after an abort.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hj†[h]”hŒ Parameters”…”�”}”(hjˆ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj„[ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mšhj€[ubjþ)�”}”(hhh]”(j)�”}”(hŒ(``handle_t *handle`` transaction handle ”h]”(j )�”}”(hŒ``handle_t *handle``”h]”j®)�”}”(hj¥[h]”hŒhandle_t *handle”…”�”}”(hj§[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj£[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M—hjŸ[ubj#)�”}”(hhh]”hî)�”}”(hŒtransaction handle”h]”hŒtransaction handle”…”�”}”(hj¾[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jº[h´M—hj»[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjŸ[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jº[h´M—hjœ[ubj)�”}”(hŒ*``struct buffer_head *bh`` bh to 'forget' ”h]”(j )�”}”(hŒ``struct buffer_head *bh``”h]”j®)�”}”(hjÞ[h]”hŒstruct buffer_head *bh”…”�”}”(hjà[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÜ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M˜hjØ[ubj#)�”}”(hhh]”hî)�”}”(hŒbh to 'forget'”h]”hŒbh to ‘forget’”…”�”}”(hj÷[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jó[h´M˜hjô[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjØ[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jó[h´M˜hjœ[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhj€[ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj\h]”hŒ Description”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mšhj€[ubhî)�”}”(hŒ¢We can only do the bforget if there are no commits pending against the buffer. If the buffer is dirty in the current running transaction we can safely unlink it.”h]”hŒ¢We can only do the bforget if there are no commits pending against the buffer. If the buffer is dirty in the current running transaction we can safely unlink it.”…”�”}”(hj/\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M™hj€[ubhî)�”}”(hŒtbh may not be a journalled buffer at all - it may be a non-JBD buffer which came off the hashtable. Check for this.”h]”hŒtbh may not be a journalled buffer at all - it may be a non-JBD buffer which came off the hashtable. Check for this.”…”�”}”(hj>\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M�hj€[ubhî)�”}”(hŒDecrements bh->b_count by one.”h]”hŒDecrements bh->b_count by one.”…”�”}”(hjM\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M hj€[ubhî)�”}”(hŒiAllow this call even if the handle has aborted --- it may be part of the caller's cleanup after an abort.”h]”hŒkAllow this call even if the handle has aborted --- it may be part of the caller’s cleanup after an abort.”…”�”}”(hj\\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M¢hj€[ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œjbd2_journal_stop (C function)”Œc.jbd2_journal_stop”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒ(int jbd2_journal_stop (handle_t *handle)”h]”j·)�”}”(hŒ'int jbd2_journal_stop(handle_t *handle)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hj‹\h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj‡\h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MQubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš\h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj‡\h²hh³j™\h´MQubjà)�”}”(hŒjbd2_journal_stop”h]”jæ)�”}”(hŒjbd2_journal_stop”h]”hŒjbd2_journal_stop”…”�”}”(hj¬\h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj¨\ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj‡\h²hh³j™\h´MQubjk)�”}”(hŒ(handle_t *handle)”h]”jq)�”}”(hŒhandle_t *handle”h]”(h)�”}”(hhh]”jæ)�”}”(hŒhandle_t”h]”hŒhandle_t”…”�”}”(hjË\h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÈ\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jÍ\Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j®\sbŒc.jbd2_journal_stop”†”asbuh1hhjÄ\ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë\h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÄ\ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjù\h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjÄ\ubjæ)�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÄ\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjÀ\ubah}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj‡\h²hh³j™\h´MQubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhjƒ\h²hh³j™\h´MQubah}”(h]”j~\ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j™\h´MQhj€\h²hubj)�”}”(hhh]”hî)�”}”(hŒcomplete a transaction”h]”hŒcomplete a transaction”…”�”}”(hj0]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MQhj-]h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€\h²hh³j™\h´MQubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3jH]j4jH]j5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hX?**Parameters** ``handle_t *handle`` transaction to complete. **Description** All done for a particular handle. There is not much action needed here. We just return any remaining buffer credits to the transaction and remove the handle. The only complication is that we need to start a commit operation if the filesystem is marked for synchronous update. jbd2_journal_stop itself will not usually return an error, but it may do so in unusual circumstances. In particular, expect it to return -EIO if a jbd2_journal_abort has been executed since the transaction began.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjR]h]”hŒ Parameters”…”�”}”(hjT]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjP]ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MUhjL]ubjþ)�”}”(hhh]”j)�”}”(hŒ.``handle_t *handle`` transaction to complete. ”h]”(j )�”}”(hŒ``handle_t *handle``”h]”j®)�”}”(hjq]h]”hŒhandle_t *handle”…”�”}”(hjs]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjo]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MRhjk]ubj#)�”}”(hhh]”hî)�”}”(hŒtransaction to complete.”h]”hŒtransaction to complete.”…”�”}”(hjŠ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j†]h´MRhj‡]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjk]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†]h´MRhjh]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhjL]ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hj¬]h]”hŒ Description”…”�”}”(hj®]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjª]ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MThjL]ubhî)�”}”(hŒ!All done for a particular handle.”h]”hŒ!All done for a particular handle.”…”�”}”(hjÂ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MShjL]ubhî)�”}”(hŒóThere is not much action needed here. We just return any remaining buffer credits to the transaction and remove the handle. The only complication is that we need to start a commit operation if the filesystem is marked for synchronous update.”h]”hŒóThere is not much action needed here. We just return any remaining buffer credits to the transaction and remove the handle. The only complication is that we need to start a commit operation if the filesystem is marked for synchronous update.”…”�”}”(hjÑ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MUhjL]ubhî)�”}”(hŒÕjbd2_journal_stop itself will not usually return an error, but it may do so in unusual circumstances. In particular, expect it to return -EIO if a jbd2_journal_abort has been executed since the transaction began.”h]”hŒÕjbd2_journal_stop itself will not usually return an error, but it may do so in unusual circumstances. In particular, expect it to return -EIO if a jbd2_journal_abort has been executed since the transaction began.”…”�”}”(hjà]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´MZhjL]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ-jbd2_journal_try_to_free_buffers (C function)”Œ"c.jbd2_journal_try_to_free_buffers”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒObool jbd2_journal_try_to_free_buffers (journal_t *journal, struct folio *folio)”h]”j·)�”}”(hŒNbool jbd2_journal_try_to_free_buffers(journal_t *journal, struct folio *folio)”h]”(j3)�”}”(hŒbool”h]”hŒbool”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hj ^h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´McubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj ^h²hh³j^h´Mcubjà)�”}”(hŒ jbd2_journal_try_to_free_buffers”h]”jæ)�”}”(hŒ jbd2_journal_try_to_free_buffers”h]”hŒ jbd2_journal_try_to_free_buffers”…”�”}”(hj0^h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj,^ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhj ^h²hh³j^h´Mcubjk)�”}”(hŒ)(journal_t *journal, struct folio *folio)”h]”(jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjO^h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjL^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jQ^Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j2^sbŒ"c.jbd2_journal_try_to_free_buffers”†”asbuh1hhjH^ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo^h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjH^ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hj}^h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjH^ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hjŠ^h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjH^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjD^ubjq)�”}”(hŒstruct folio *folio”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hj£^h²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjŸ^ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°^h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjŸ^ubh)�”}”(hhh]”jæ)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÁ^h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj¾^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jÃ^Œmodname”NŒ classname”Nj“j–)�”}”j™]”jk^Œ"c.jbd2_journal_try_to_free_buffers”†”asbuh1hhjŸ^ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß^h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjŸ^ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjí^h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjŸ^ubjæ)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjú^h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjŸ^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjD^ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhj ^h²hh³j^h´Mcubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj^h²hh³j^h´Mcubah}”(h]”j^ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³j^h´Mchj^h²hubj)�”}”(hhh]”hî)�”}”(hŒtry to free page buffers.”h]”hŒtry to free page buffers.”…”�”}”(hj$_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mchj!_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^h²hh³j^h´Mcubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j<_j4j<_j5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hX¡**Parameters** ``journal_t *journal`` journal for operation ``struct folio *folio`` Folio to detach data from. **Description** For all the buffers on this page, if they are fully written out ordered data, move them onto BUF_CLEAN so try_to_free_buffers() can reap them. This function returns non-zero if we wish try_to_free_buffers() to be called. We do this if the page is releasable by try_to_free_buffers(). We also do it if the page has locked or dirty buffers and the caller wants us to perform sync or async writeout. This complicates JBD locking somewhat. We aren't protected by the BKL here. We wish to remove the buffer from its committing or running transaction's ->t_datalist via __jbd2_journal_unfile_buffer. This may *change* the value of transaction_t->t_datalist, so anyone who looks at t_datalist needs to lock against this function. Even worse, someone may be doing a jbd2_journal_dirty_data on this buffer. So we need to lock against that. jbd2_journal_dirty_data() will come out of the lock with the buffer dirty, which makes it ineligible for release here. Who else is affected by this? hmm... Really the only contender is do_get_write_access() - it could be looking at the buffer while journal_try_to_free_buffer() is changing its state. But that cannot happen because we never reallocate freed data as metadata while the data is part of a transaction. Yes? Return false on failure, true on success”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjF_h]”hŒ Parameters”…”�”}”(hjH_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjD_ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mghj@_ubjþ)�”}”(hhh]”(j)�”}”(hŒ-``journal_t *journal`` journal for operation ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hje_h]”hŒjournal_t *journal”…”�”}”(hjg_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjc_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mdhj__ubj#)�”}”(hhh]”hî)�”}”(hŒjournal for operation”h]”hŒjournal for operation”…”�”}”(hj~_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jz_h´Mdhj{_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj__ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jz_h´Mdhj\_ubj)�”}”(hŒ3``struct folio *folio`` Folio to detach data from. ”h]”(j )�”}”(hŒ``struct folio *folio``”h]”j®)�”}”(hjž_h]”hŒstruct folio *folio”…”�”}”(hj _h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjœ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mehj˜_ubj#)�”}”(hhh]”hî)�”}”(hŒFolio to detach data from.”h]”hŒFolio to detach data from.”…”�”}”(hj·_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j³_h´Mehj´_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj˜_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j³_h´Mehj\_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhj@_ubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjÙ_h]”hŒ Description”…”�”}”(hjÛ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj×_ubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mghj@_ubhî)�”}”(hŒŽFor all the buffers on this page, if they are fully written out ordered data, move them onto BUF_CLEAN so try_to_free_buffers() can reap them.”h]”hŒŽFor all the buffers on this page, if they are fully written out ordered data, move them onto BUF_CLEAN so try_to_free_buffers() can reap them.”…”�”}”(hjï_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mfhj@_ubhî)�”}”(hŒýThis function returns non-zero if we wish try_to_free_buffers() to be called. We do this if the page is releasable by try_to_free_buffers(). We also do it if the page has locked or dirty buffers and the caller wants us to perform sync or async writeout.”h]”hŒýThis function returns non-zero if we wish try_to_free_buffers() to be called. We do this if the page is releasable by try_to_free_buffers(). We also do it if the page has locked or dirty buffers and the caller wants us to perform sync or async writeout.”…”�”}”(hjþ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mjhj@_ubhî)�”}”(hŒÆThis complicates JBD locking somewhat. We aren't protected by the BKL here. We wish to remove the buffer from its committing or running transaction's ->t_datalist via __jbd2_journal_unfile_buffer.”h]”hŒÊThis complicates JBD locking somewhat. We aren’t protected by the BKL here. We wish to remove the buffer from its committing or running transaction’s ->t_datalist via __jbd2_journal_unfile_buffer.”…”�”}”(hj `h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mohj@_ubhî)�”}”(hŒ€This may *change* the value of transaction_t->t_datalist, so anyone who looks at t_datalist needs to lock against this function.”h]”(hŒ This may ”…”�”}”(hj`h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*change*”h]”hŒchange”…”�”}”(hj&`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j$`hj`ubhŒo the value of transaction_t->t_datalist, so anyone who looks at t_datalist needs to lock against this function.”…”�”}”(hj`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mshj@_ubhî)�”}”(hŒäEven worse, someone may be doing a jbd2_journal_dirty_data on this buffer. So we need to lock against that. jbd2_journal_dirty_data() will come out of the lock with the buffer dirty, which makes it ineligible for release here.”h]”hŒäEven worse, someone may be doing a jbd2_journal_dirty_data on this buffer. So we need to lock against that. jbd2_journal_dirty_data() will come out of the lock with the buffer dirty, which makes it ineligible for release here.”…”�”}”(hj?`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mvhj@_ubhî)�”}”(hX1Who else is affected by this? hmm... Really the only contender is do_get_write_access() - it could be looking at the buffer while journal_try_to_free_buffer() is changing its state. But that cannot happen because we never reallocate freed data as metadata while the data is part of a transaction. Yes?”h]”hX1Who else is affected by this? hmm... Really the only contender is do_get_write_access() - it could be looking at the buffer while journal_try_to_free_buffer() is changing its state. But that cannot happen because we never reallocate freed data as metadata while the data is part of a transaction. Yes?”…”�”}”(hjN`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M{hj@_ubhî)�”}”(hŒ(Return false on failure, true on success”h]”hŒ(Return false on failure, true on success”…”�”}”(hj]`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M�hj@_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubj›)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j§Œ*jbd2_journal_invalidate_folio (C function)”Œc.jbd2_journal_invalidate_folio”hNt”auh1jšhjEBh²hh³Nh´Nubj¬)�”}”(hhh]”(j±)�”}”(hŒiint jbd2_journal_invalidate_folio (journal_t *journal, struct folio *folio, size_t offset, size_t length)”h]”j·)�”}”(hŒhint jbd2_journal_invalidate_folio(journal_t *journal, struct folio *folio, size_t offset, size_t length)”h]”(j3)�”}”(hŒint”h]”hŒint”…”�”}”(hjŒ`h²hh³Nh´Nubah}”(h]”h ]”j?ah"]”h$]”h&]”uh1j2hjˆ`h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M§ ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›`h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjˆ`h²hh³jš`h´M§ ubjà)�”}”(hŒjbd2_journal_invalidate_folio”h]”jæ)�”}”(hŒjbd2_journal_invalidate_folio”h]”hŒjbd2_journal_invalidate_folio”…”�”}”(hj­`h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj©`ubah}”(h]”h ]”(jøjùeh"]”h$]”h&]”jåjæuh1jßhjˆ`h²hh³jš`h´M§ ubjk)�”}”(hŒG(journal_t *journal, struct folio *folio, size_t offset, size_t length)”h]”(jq)�”}”(hŒjournal_t *journal”h]”(h)�”}”(hhh]”jæ)�”}”(hŒ journal_t”h]”hŒ journal_t”…”�”}”(hjÌ`h²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÉ`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jÎ`Œmodname”NŒ classname”Nj“j–)�”}”j™]”jœ)�”}”j�j¯`sbŒc.jbd2_journal_invalidate_folio”†”asbuh1hhjÅ`ubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì`h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÅ`ubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjú`h²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjÅ`ubjæ)�”}”(hŒjournal”h]”hŒjournal”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÅ`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjÁ`ubjq)�”}”(hŒstruct folio *folio”h]”(j½)�”}”(hjVh]”hŒstruct”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”jÉah"]”h$]”h&]”uh1j¼hjaubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-ah²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjaubh)�”}”(hhh]”jæ)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj>ah²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj;aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j@aŒmodname”NŒ classname”Nj“j–)�”}”j™]”jè`Œc.jbd2_journal_invalidate_folio”†”asbuh1hhjaubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\ah²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjaubj°)�”}”(hj³h]”hŒ*”…”�”}”(hjjah²hh³Nh´Nubah}”(h]”h ]”j¼ah"]”h$]”h&]”uh1j¯hjaubjæ)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjwah²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjÁ`ubjq)�”}”(hŒ size_t offset”h]”(h)�”}”(hhh]”jæ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj“ah²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhj�aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”j•aŒmodname”NŒ classname”Nj“j–)�”}”j™]”jè`Œc.jbd2_journal_invalidate_folio”†”asbuh1hhjŒaubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±ah²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjŒaubjæ)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hj¿ah²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjŒaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjÁ`ubjq)�”}”(hŒ size_t length”h]”(h)�”}”(hhh]”jæ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÛah²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjØaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jmŒreftype”j�Œ reftarget”jÝaŒmodname”NŒ classname”Nj“j–)�”}”j™]”jè`Œc.jbd2_journal_invalidate_folio”†”asbuh1hhjÔaubjÏ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùah²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÔaubjæ)�”}”(hŒlength”h]”hŒlength”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jñah"]”h$]”h&]”uh1jåhjÔaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjåjæuh1jphjÁ`ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæuh1jjhjˆ`h²hh³jš`h´M§ ubeh}”(h]”h ]”h"]”h$]”h&]”jåjæjˆuh1j¶jjhj„`h²hh³jš`h´M§ ubah}”(h]”j`ah ]”(j j eh"]”h$]”h&]”jˆj)jhuh1j°h³jš`h´M§ hj�`h²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jhj�`h²hh³jš`h´M§ ubeh}”(h]”h ]”(jmŒfunction”eh"]”h$]”h&]”j2jmj3j:bj4j:bj5‰j6‰j7‰uh1j«h²hhjEBh³Nh´Nubj´)�”}”(hXÖ**Parameters** ``journal_t *journal`` journal to use for flush... ``struct folio *folio`` folio to flush ``size_t offset`` start of the range to invalidate ``size_t length`` length of the range to invalidate **Description** Reap page buffers containing data after in the specified range in page. Can return -EBUSY if buffers are part of the committing transaction and the page is straddling i_size. Caller then has to wait for current commit and try again.”h]”(hî)�”}”(hŒ**Parameters**”h]”j=)�”}”(hjDbh]”hŒ Parameters”…”�”}”(hjFbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjBbubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M« hj>bubjþ)�”}”(hhh]”(j)�”}”(hŒ3``journal_t *journal`` journal to use for flush... ”h]”(j )�”}”(hŒ``journal_t *journal``”h]”j®)�”}”(hjcbh]”hŒjournal_t *journal”…”�”}”(hjebh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjabubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M¨ hj]bubj#)�”}”(hhh]”hî)�”}”(hŒjournal to use for flush...”h]”hŒjournal to use for flush...”…”�”}”(hj|bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jxbh´M¨ hjybubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj]bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jxbh´M¨ hjZbubj)�”}”(hŒ'``struct folio *folio`` folio to flush ”h]”(j )�”}”(hŒ``struct folio *folio``”h]”j®)�”}”(hjœbh]”hŒstruct folio *folio”…”�”}”(hjžbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjšbubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M© hj–bubj#)�”}”(hhh]”hî)�”}”(hŒfolio to flush”h]”hŒfolio to flush”…”�”}”(hjµbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j±bh´M© hj²bubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj–bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±bh´M© hjZbubj)�”}”(hŒ3``size_t offset`` start of the range to invalidate ”h]”(j )�”}”(hŒ``size_t offset``”h]”j®)�”}”(hjÕbh]”hŒ size_t offset”…”�”}”(hj×bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjÓbubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´Mª hjÏbubj#)�”}”(hhh]”hî)�”}”(hŒ start of the range to invalidate”h]”hŒ start of the range to invalidate”…”�”}”(hjîbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³jêbh´Mª hjëbubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÏbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêbh´Mª hjZbubj)�”}”(hŒ4``size_t length`` length of the range to invalidate ”h]”(j )�”}”(hŒ``size_t length``”h]”j®)�”}”(hjch]”hŒ size_t length”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hj cubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M« hjcubj#)�”}”(hhh]”hî)�”}”(hŒ!length of the range to invalidate”h]”hŒ!length of the range to invalidate”…”�”}”(hj'ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³j#ch´M« hj$cubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j#ch´M« hjZbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jýhj>bubhî)�”}”(hŒ**Description**”h]”j=)�”}”(hjIch]”hŒ Description”…”�”}”(hjKch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjGcubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M­ hj>bubhî)�”}”(hŒèReap page buffers containing data after in the specified range in page. Can return -EBUSY if buffers are part of the committing transaction and the page is straddling i_size. Caller then has to wait for current commit and try again.”h]”hŒèReap page buffers containing data after in the specified range in page. Can return -EBUSY if buffers are part of the committing transaction and the page is straddling i_size. Caller then has to wait for current commit and try again.”…”�”}”(hj_ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³Œ^/var/lib/git/docbuild/linux/Documentation/filesystems/journalling:203: ./fs/jbd2/transaction.c”h´M¬ hj>bubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjEBh²hh³Nh´Nubeh}”(h]”Œtransaction-level”ah ]”h"]”Œtransaction level”ah$]”h&]”uh1hµhjéh²hh³hÊh´KÉubeh}”(h]”Œ functions”ah ]”h"]”Œ functions”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kºubh¶)�”}”(hhh]”(h»)�”}”(hŒSee also”h]”hŒSee also”…”�”}”(hjˆch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj…ch²hh³hÊh´KÎubhî)�”}”(hŒ“`Journaling the Linux ext2fs Filesystem, LinuxExpo 98, Stephen Tweedie `__”h]”hŒ reference”“”)�”}”(hj˜ch]”hŒEJournaling the Linux ext2fs Filesystem, LinuxExpo 98, Stephen Tweedie”…”�”}”(hjœch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒEJournaling the Linux ext2fs Filesystem, LinuxExpo 98, Stephen Tweedie”Œrefuri”ŒGhttp://kernel.org/pub/linux/kernel/people/sct/ext3/journal-design.ps.gz”uh1jšchj–cubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´KÐhj…ch²hubhî)�”}”(hŒ‡`Ext3 Journalling FileSystem, OLS 2000, Dr. Stephen Tweedie `__”h]”j›c)�”}”(hjµch]”hŒ:Ext3 Journalling FileSystem, OLS 2000, Dr. Stephen Tweedie”…”�”}”(hj·ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ:Ext3 Journalling FileSystem, OLS 2000, Dr. Stephen Tweedie”j«cŒFhttp://olstrans.sourceforge.net/release/OLS2000-ext3/OLS2000-ext3.html”uh1jšchj³cubah}”(h]”h ]”h"]”h$]”h&]”uh1híh³hÊh´KÓhj…ch²hubeh}”(h]”Œsee-also”ah ]”h"]”Œsee also”ah$]”h&]”uh1hµhh·h²hh³hÊh´KÎubeh}”(h]”Œthe-linux-journalling-api”ah ]”h"]”Œthe linux journalling api”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jdŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jÚcj×cjgjdjúj÷j8j5j_j\jæjãjÞjÛj‚cjcjBBj?BjzcjwcjÒcjÏcuŒ nametypes”}”(jÚc‰jg‰jú‰j8‰j_‰jæ‰jÞ‰j‚c‰jBB‰jzc‰jÒc‰uh}”(j×ch·jdhËj÷hÜj5jýj\j;jãjjjÛj‰j©j²j‹j�jGjLjj j jÇ jcjéj?Bjj%j*jŸ j¤ j"j "j&j &j¥'jª'j )j)jq*jv*j×+jÜ+jÛ.jà.jß1jä1jã4jè4j 7j7jï8jô8j;j#;j“<j˜<jù=jþ=j_?jd?jÔ@jÙ@jwcjEBjbBjgBjeDjjDjGjGjoIjtIjALjFLj¶Mj»Mj+Oj0OjsQjxQj‚Sj‡Sj¾UjÃUj÷WjüWjBZjGZj~\jƒ\j^j^j`j„`jÏcj…cuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.