€•Œ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/locking”Œ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/locking”Œ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/locking”Œ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/locking”Œ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/locking”Œ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/locking”Œ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/locking”Œ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ŒLocking”h]”hŒLocking”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒA/var/lib/git/docbuild/linux/Documentation/filesystems/locking.rst”h´KubhŒ paragraph”“”)�”}”(hXÙThe text below describes the locking rules for VFS-related methods. It is (believed to be) up-to-date. *Please*, if you change anything in prototypes or locking protocols - update this file. And update the relevant instances in the tree, don't leave that to maintainers of filesystems/devices/ etc. At the very least, put the list of dubious cases in the end of this file. Don't turn it into log - maintainers of out-of-the-tree code are supposed to be able to use diff(1).”h]”(hŒgThe text below describes the locking rules for VFS-related methods. It is (believed to be) up-to-date. ”…”�”}”(hhÍh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*Please*”h]”hŒPlease”…”�”}”(hh×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhhÍubhXn, if you change anything in prototypes or locking protocols - update this file. And update the relevant instances in the tree, don’t leave that to maintainers of filesystems/devices/ etc. At the very least, put the list of dubious cases in the end of this file. Don’t turn it into log - maintainers of out-of-the-tree code are supposed to be able to use diff(1).”…”�”}”(hhÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒ8Thing currently missing here: socket operations. Alexey?”h]”hŒ8Thing currently missing here: socket operations. Alexey?”…”�”}”(hhïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒdentry_operations”h]”hŒdentry_operations”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhýh²hh³hÊh´KubhÌ)�”}”(hŒ prototypes::”h]”hŒ prototypes:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhýh²hubhŒ literal_block”“”)�”}”(hX$int (*d_revalidate)(struct inode *, const struct qstr *, struct dentry *, unsigned int); int (*d_weak_revalidate)(struct dentry *, unsigned int); int (*d_hash)(const struct dentry *, struct qstr *); int (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *); int (*d_delete)(struct dentry *); int (*d_init)(struct dentry *); void (*d_release)(struct dentry *); void (*d_iput)(struct dentry *, struct inode *); char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen); struct vfsmount *(*d_automount)(struct path *path); int (*d_manage)(const struct path *, bool); struct dentry *(*d_real)(struct dentry *, enum d_real_type type); bool (*d_unalias_trylock)(const struct dentry *); void (*d_unalias_unlock)(const struct dentry *);”h]”hX$int (*d_revalidate)(struct inode *, const struct qstr *, struct dentry *, unsigned int); int (*d_weak_revalidate)(struct dentry *, unsigned int); int (*d_hash)(const struct dentry *, struct qstr *); int (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *); int (*d_delete)(struct dentry *); int (*d_init)(struct dentry *); void (*d_release)(struct dentry *); void (*d_iput)(struct dentry *, struct inode *); char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen); struct vfsmount *(*d_automount)(struct path *path); int (*d_manage)(const struct path *, bool); struct dentry *(*d_real)(struct dentry *, enum d_real_type type); bool (*d_unalias_trylock)(const struct dentry *); void (*d_unalias_unlock)(const struct dentry *);”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jh³hÊh´Khhýh²hubhÌ)�”}”(hŒlocking rules:”h]”hŒlocking rules:”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K%hhýh²hubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhjCubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jFhjCubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhjCubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhjCubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhjCubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÌ)�”}”(hŒops”h]”hŒops”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K(hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj�ubj…)�”}”(hhh]”hÌ)�”}”(hŒ rename_lock”h]”hŒ rename_lock”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K(hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj�ubj…)�”}”(hhh]”hÌ)�”}”(hŒ->d_lock”h]”hŒ->d_lock”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K(hj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj�ubj…)�”}”(hhh]”hÌ)�”}”(hŒ may block”h]”hŒ may block”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K(hjËubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj�ubj…)�”}”(hhh]”hÌ)�”}”(hŒrcu-walk”h]”hŒrcu-walk”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K(hjâubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjCubhŒtbody”“”)�”}”(hhh]”(j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ d_revalidate:”h]”hŒ d_revalidate:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K*hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K*hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K*hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes (ref-walk)”h]”hŒyes (ref-walk)”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K*hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj ubj…)�”}”(hhh]”hÌ)�”}”(hŒmaybe”h]”hŒmaybe”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K*hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒd_weak_revalidate:”h]”hŒd_weak_revalidate:”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K+hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj†ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K+hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj†ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K+hj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj†ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K+hjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj†ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K+hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒd_hash”h]”hŒd_hash”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K,hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K,hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K,hj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K,hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubj…)�”}”(hhh]”hÌ)�”}”(hŒmaybe”h]”hŒmaybe”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K,hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ d_compare:”h]”hŒ d_compare:”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K-hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj~ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K-hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj~ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K-hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj~ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K-hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj~ubj…)�”}”(hhh]”hÌ)�”}”(hŒmaybe”h]”hŒmaybe”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K-hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ d_delete:”h]”hŒ d_delete:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjúubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjúubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjúubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjúubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjúubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒd_init:”h]”hŒd_init:”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K/hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjvubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K/hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjvubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K/hj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjvubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K/hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjvubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K/hjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ d_release:”h]”hŒ d_release:”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K0hjõubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjòubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K0hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjòubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K0hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjòubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K0hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjòubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K0hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjòubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒd_prune:”h]”hŒd_prune:”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K1hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjnubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K1hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjnubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K1hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjnubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K1hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjnubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K1hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒd_iput:”h]”hŒd_iput:”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K2hjíubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjêubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K2hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjêubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K2hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjêubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K2hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjêubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K2hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒd_dname:”h]”hŒd_dname:”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K3hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjfubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K3hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjfubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K3hj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjfubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K3hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjfubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K3hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ d_automount:”h]”hŒ d_automount:”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K4hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjâubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K4hjüubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjâubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K4hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjâubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K4hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjâubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K4hjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ d_manage:”h]”hŒ d_manage:”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K5hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj^ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K5hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj^ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K5hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj^ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes (ref-walk)”h]”hŒyes (ref-walk)”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K5hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj^ubj…)�”}”(hhh]”hÌ)�”}”(hŒmaybe”h]”hŒmaybe”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K5hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒd_real”h]”hŒd_real”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÚubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÚubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÚubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÚubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒd_unalias_trylock”h]”hŒd_unalias_trylock”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K7hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjVubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K7hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjVubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K7hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjVubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K7hjžubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjVubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K7hjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒd_unalias_unlock”h]”hŒd_unalias_unlock”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K8hjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÒubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K8hjìubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÒubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K8hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÒubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K8hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÒubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K8hj1 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjCubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jAhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hhýh²hh³hÊh´Nubeh}”(h]”Œdentry-operations”ah ]”h"]”Œdentry_operations”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒinode_operations”h]”hŒinode_operations”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhji h²hh³hÊh´Khji h²hubj)�”}”(hXÐint (*create) (struct mnt_idmap *, struct inode *,struct dentry *,umode_t); struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int); int (*link) (struct dentry *,struct inode *,struct dentry *); int (*unlink) (struct inode *,struct dentry *); int (*symlink) (struct mnt_idmap *, struct inode *,struct dentry *,const char *); struct dentry *(*mkdir) (struct mnt_idmap *, struct inode *,struct dentry *,umode_t); int (*rmdir) (struct inode *,struct dentry *); int (*mknod) (struct mnt_idmap *, struct inode *,struct dentry *,umode_t,dev_t); int (*rename) (struct mnt_idmap *, struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int); int (*readlink) (struct dentry *, char __user *,int); const char *(*get_link) (struct dentry *, struct inode *, struct delayed_call *); void (*truncate) (struct inode *); int (*permission) (struct mnt_idmap *, struct inode *, int, unsigned int); struct posix_acl * (*get_inode_acl)(struct inode *, int, bool); int (*setattr) (struct mnt_idmap *, struct dentry *, struct iattr *); int (*getattr) (struct mnt_idmap *, const struct path *, struct kstat *, u32, unsigned int); ssize_t (*listxattr) (struct dentry *, char *, size_t); int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len); void (*update_time)(struct inode *inode, enum fs_update_time type, int flags); void (*sync_lazytime)(struct inode *inode); int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned open_flag, umode_t create_mode); int (*tmpfile) (struct mnt_idmap *, struct inode *, struct file *, umode_t); int (*fileattr_set)(struct mnt_idmap *idmap, struct dentry *dentry, struct file_kattr *fa); int (*fileattr_get)(struct dentry *dentry, struct file_kattr *fa); struct posix_acl * (*get_acl)(struct mnt_idmap *, struct dentry *, int); struct offset_ctx *(*get_offset_ctx)(struct inode *inode);”h]”hXÐint (*create) (struct mnt_idmap *, struct inode *,struct dentry *,umode_t); struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int); int (*link) (struct dentry *,struct inode *,struct dentry *); int (*unlink) (struct inode *,struct dentry *); int (*symlink) (struct mnt_idmap *, struct inode *,struct dentry *,const char *); struct dentry *(*mkdir) (struct mnt_idmap *, struct inode *,struct dentry *,umode_t); int (*rmdir) (struct inode *,struct dentry *); int (*mknod) (struct mnt_idmap *, struct inode *,struct dentry *,umode_t,dev_t); int (*rename) (struct mnt_idmap *, struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int); int (*readlink) (struct dentry *, char __user *,int); const char *(*get_link) (struct dentry *, struct inode *, struct delayed_call *); void (*truncate) (struct inode *); int (*permission) (struct mnt_idmap *, struct inode *, int, unsigned int); struct posix_acl * (*get_inode_acl)(struct inode *, int, bool); int (*setattr) (struct mnt_idmap *, struct dentry *, struct iattr *); int (*getattr) (struct mnt_idmap *, const struct path *, struct kstat *, u32, unsigned int); ssize_t (*listxattr) (struct dentry *, char *, size_t); int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len); void (*update_time)(struct inode *inode, enum fs_update_time type, int flags); void (*sync_lazytime)(struct inode *inode); int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned open_flag, umode_t create_mode); int (*tmpfile) (struct mnt_idmap *, struct inode *, struct file *, umode_t); int (*fileattr_set)(struct mnt_idmap *idmap, struct dentry *dentry, struct file_kattr *fa); int (*fileattr_get)(struct dentry *dentry, struct file_kattr *fa); struct posix_acl * (*get_acl)(struct mnt_idmap *, struct dentry *, int); struct offset_ctx *(*get_offset_ctx)(struct inode *inode);”…”�”}”hjˆ sbah}”(h]”h ]”h"]”h$]”h&]”j,j-uh1jh³hÊh´K@hji h²hubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒlocking rules: all may block ”h]”(hŒterm”“”)�”}”(hŒlocking rules:”h]”hŒlocking rules:”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¡ h³hÊh´Kbhj� ubhŒ definition”“”)�”}”(hhh]”hÌ)�”}”(hŒ all may block”h]”hŒ all may block”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kbhj³ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j± hj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j› h³hÊh´Kbhj˜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j– hji h²hh³hÊh´Nubj=)�”}”(hhh]”jB)�”}”(hhh]”(jG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhjÙ ubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K3uh1jFhjÙ ubj{)�”}”(hhh]”j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒops”h]”hŒops”…”�”}”(hjù h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kehjö ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjó ubj…)�”}”(hhh]”hÌ)�”}”(hŒi_rwsem(inode)”h]”hŒi_rwsem(inode)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kehj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjó ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjð ubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjÙ ubj)�”}”(hhh]”(j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒlookup:”h]”hŒlookup:”…”�”}”(hj9 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kghj6 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj3 ubj…)�”}”(hhh]”hÌ)�”}”(hŒshared”h]”hŒshared”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KghjM ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj3 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒcreate:”h]”hŒcreate:”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhjm ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjj ubj…)�”}”(hhh]”hÌ)�”}”(hŒ exclusive”h]”hŒ exclusive”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhj„ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒlink:”h]”hŒlink:”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kihj¤ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¡ ubj…)�”}”(hhh]”hÌ)�”}”(hŒexclusive (both)”h]”hŒexclusive (both)”…”�”}”(hj¾ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kihj» ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¡ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒmknod:”h]”hŒmknod:”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KjhjÛ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjØ ubj…)�”}”(hhh]”hÌ)�”}”(hŒ exclusive”h]”hŒ exclusive”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kjhjò ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjØ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒsymlink:”h]”hŒsymlink:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kkhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj ubj…)�”}”(hhh]”hÌ)�”}”(hŒ exclusive”h]”hŒ exclusive”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kkhj) ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒmkdir:”h]”hŒmkdir:”…”�”}”(hjL h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KlhjI ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjF ubj…)�”}”(hhh]”hÌ)�”}”(hŒ exclusive”h]”hŒ exclusive”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Klhj` ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjF ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒunlink:”h]”hŒunlink:”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kmhj€ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj} ubj…)�”}”(hhh]”hÌ)�”}”(hŒexclusive (both)”h]”hŒexclusive (both)”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kmhj— ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj} ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒrmdir:”h]”hŒrmdir:”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Knhj· ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj´ ubj…)�”}”(hhh]”hÌ)�”}”(hŒexclusive (both)(see below)”h]”hŒexclusive (both)(see below)”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KnhjÎ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj´ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒrename:”h]”hŒrename:”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kohjî ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjë ubj…)�”}”(hhh]”hÌ)�”}”(hŒ3exclusive (both parents, some children) (see below)”h]”hŒ3exclusive (both parents, some children) (see below)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kohj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjë ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ readlink:”h]”hŒ readlink:”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kphj% ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj" ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kphj< ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj" ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ get_link:”h]”hŒ get_link:”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kqhj\ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjY ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kqhjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjY ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒsetattr:”h]”hŒsetattr:”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Krhj“ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj� ubj…)�”}”(hhh]”hÌ)�”}”(hŒ exclusive”h]”hŒ exclusive”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Krhjª ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ permission:”h]”hŒ permission:”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KshjÊ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÇ ubj…)�”}”(hhh]”hÌ)�”}”(hŒ-no (may not block if called in rcu-walk mode)”h]”hŒ-no (may not block if called in rcu-walk mode)”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kshjá ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÇ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒget_inode_acl:”h]”hŒget_inode_acl:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kthj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjþ ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kthj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjþ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒget_acl:”h]”hŒget_acl:”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kuhj8 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj5 ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KuhjO ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj5 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒgetattr:”h]”hŒgetattr:”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kvhjo ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjl ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kvhj† ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjl ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ listxattr:”h]”hŒ listxattr:”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kwhj¦ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj£ ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kwhj½ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj£ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒfiemap:”h]”hŒfiemap:”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KxhjÝ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÚ ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kxhjô ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÚ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ update_time:”h]”hŒ update_time:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kyhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kyhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒsync_lazytime:”h]”hŒsync_lazytime:”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KzhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjHubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kzhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ atomic_open:”h]”hŒ atomic_open:”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K{hj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubj…)�”}”(hhh]”hÌ)�”}”(hŒ2shared (exclusive if O_CREAT is set in open flags)”h]”hŒ2shared (exclusive if O_CREAT is set in open flags)”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K{hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒtmpfile:”h]”hŒtmpfile:”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K|hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¶ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K|hjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ fileattr_get:”h]”hŒ fileattr_get:”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K}hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjíubj…)�”}”(hhh]”hÌ)�”}”(hŒno or exclusive”h]”hŒno or exclusive”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K}hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ fileattr_set:”h]”hŒ fileattr_set:”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K~hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj$ubj…)�”}”(hhh]”hÌ)�”}”(hŒ exclusive”h]”hŒ exclusive”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K~hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒget_offset_ctx”h]”hŒget_offset_ctx”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj[ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjuubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jAhjÖ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hji h²hh³hÊh´NubhŒ block_quote”“”)�”}”(hX;Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_rwsem exclusive on victim. cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem. ->unlink() and ->rename() have ->i_rwsem exclusive on all non-directories involved. ->rename() has ->i_rwsem exclusive on any subdirectory that changes parent. ”h]”hÌ)�”}”(hX:Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_rwsem exclusive on victim. cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem. ->unlink() and ->rename() have ->i_rwsem exclusive on all non-directories involved. ->rename() has ->i_rwsem exclusive on any subdirectory that changes parent.”h]”hX:Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_rwsem exclusive on victim. cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem. ->unlink() and ->rename() have ->i_rwsem exclusive on all non-directories involved. ->rename() has ->i_rwsem exclusive on any subdirectory that changes parent.”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kƒhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³hÊh´Kƒhji h²hubhÌ)�”}”(hŒ€See Documentation/filesystems/directory-locking.rst for more detailed discussion of the locking scheme for directory operations.”h]”hŒ€See Documentation/filesystems/directory-locking.rst for more detailed discussion of the locking scheme for directory operations.”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KŠhji h²hubeh}”(h]”Œinode-operations”ah ]”h"]”Œinode_operations”ah$]”h&]”uh1hµhh·h²hh³hÊh´Ki_lock!!!”h]”hŒ!!!inode->i_lock!!!”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÇhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ evict_inode:”h]”hŒ evict_inode:”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÈhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj‚ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj‚ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ put_super:”h]”hŒ put_super:”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÉhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj´ubj…)�”}”(hhh]”hÌ)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÉhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj´ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒsync_fs:”h]”hŒsync_fs:”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÊhj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjôubj…)�”}”(hhh]”hÌ)�”}”(hŒread”h]”hŒread”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÊhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjôubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ freeze_fs:”h]”hŒ freeze_fs:”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KËhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj4ubj…)�”}”(hhh]”hÌ)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KËhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj4ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ unfreeze_fs:”h]”hŒ unfreeze_fs:”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÌhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjtubj…)�”}”(hhh]”hÌ)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÌhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjtubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒstatfs:”h]”hŒstatfs:”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÍhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj´ubj…)�”}”(hhh]”hÌ)�”}”(hŒ maybe(read)”h]”hŒ maybe(read)”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÍhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj´ubj…)�”}”(hhh]”hÌ)�”}”(hŒ (see below)”h]”hŒ (see below)”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÍhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ umount_begin:”h]”hŒ umount_begin:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÎhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÎhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ show_options:”h]”hŒ show_options:”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÏhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjBubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÏhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjBubj…)�”}”(hhh]”hÌ)�”}”(hŒ(namespace_sem)”h]”hŒ(namespace_sem)”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÏhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ quota_read:”h]”hŒ quota_read:”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÐhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj�ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÐhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj�ubj…)�”}”(hhh]”hÌ)�”}”(hŒ (see below)”h]”hŒ (see below)”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÐhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ quota_write:”h]”hŒ quota_write:”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÑhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÞubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÑhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÞubj…)�”}”(hhh]”hÌ)�”}”(hŒ (see below)”h]”hŒ (see below)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÑhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jAhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjWh²hh³hÊh´NubhÌ)�”}”(hX‚->statfs() has s_umount (shared) when called by ustat(2) (native or compat), but that's an accident of bad API; s_umount is used to pin the superblock down when we only have dev_t given us by userland to identify the superblock. Everything else (statfs(), fstatfs(), etc.) doesn't hold it when calling ->statfs() - superblock is pinned down by resolving the pathname passed to syscall.”h]”hX†->statfs() has s_umount (shared) when called by ustat(2) (native or compat), but that’s an accident of bad API; s_umount is used to pin the superblock down when we only have dev_t given us by userland to identify the superblock. Everything else (statfs(), fstatfs(), etc.) doesn’t hold it when calling ->statfs() - superblock is pinned down by resolving the pathname passed to syscall.”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÔhjWh²hubhÌ)�”}”(hX3->quota_read() and ->quota_write() functions are both guaranteed to be the only ones operating on the quota file by the quota code (via dqio_sem) (unless an admin really wants to screw up something and writes to quota files with quotas on). For other details about locking see also dquot_operations section.”h]”hX3->quota_read() and ->quota_write() functions are both guaranteed to be the only ones operating on the quota file by the quota code (via dqio_sem) (unless an admin really wants to screw up something and writes to quota files with quotas on). For other details about locking see also dquot_operations section.”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÛhjWh²hubeh}”(h]”Œsuper-operations”ah ]”h"]”Œsuper_operations”ah$]”h&]”uh1hµhh·h²hh³hÊh´K§ubh¶)�”}”(hhh]”(h»)�”}”(hŒfile_system_type”h]”hŒfile_system_type”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjch²hh³hÊh´KâubhÌ)�”}”(hŒ prototypes::”h]”hŒ prototypes:”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kähjch²hubj)�”}”(hŒ'void (*kill_sb) (struct super_block *);”h]”hŒ'void (*kill_sb) (struct super_block *);”…”�”}”hj‚sbah}”(h]”h ]”h"]”h$]”h&]”j,j-uh1jh³hÊh´Kæhjch²hubhÌ)�”}”(hŒlocking rules:”h]”hŒlocking rules:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kèhjch²hubj=)�”}”(hhh]”jB)�”}”(hhh]”(jG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhj¡ubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jFhj¡ubj{)�”}”(hhh]”j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒops”h]”hŒops”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Këhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj»ubj…)�”}”(hhh]”hÌ)�”}”(hŒ may block”h]”hŒ may block”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KëhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj¡ubj)�”}”(hhh]”j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒkill_sb”h]”hŒkill_sb”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kíhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjûubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kíhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jAhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjch²hh³hÊh´NubhÌ)�”}”(hŒk->kill_sb() takes a write-locked superblock, does all shutdown work on it, unlocks and drops the reference.”h]”hŒk->kill_sb() takes a write-locked superblock, does all shutdown work on it, unlocks and drops the reference.”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kðhjch²hubeh}”(h]”Œfile-system-type”ah ]”h"]”Œfile_system_type”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kâubh¶)�”}”(hhh]”(h»)�”}”(hŒaddress_space_operations”h]”hŒaddress_space_operations”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj[h²hh³hÊh´KôubhÌ)�”}”(hŒ prototypes::”h]”hŒ prototypes:”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kõhj[h²hubj)�”}”(hXint (*read_folio)(struct file *, struct folio *); int (*writepages)(struct address_space *, struct writeback_control *); bool (*dirty_folio)(struct address_space *, struct folio *folio); void (*readahead)(struct readahead_control *); int (*write_begin)(const struct kiocb *, struct address_space *mapping, loff_t pos, unsigned len, struct folio **foliop, void **fsdata); int (*write_end)(const struct kiocb *, struct address_space *mapping, loff_t pos, unsigned len, unsigned copied, struct folio *folio, void *fsdata); sector_t (*bmap)(struct address_space *, sector_t); void (*invalidate_folio) (struct folio *, size_t start, size_t len); bool (*release_folio)(struct folio *, gfp_t); void (*free_folio)(struct folio *); int (*direct_IO)(struct kiocb *, struct iov_iter *iter); int (*migrate_folio)(struct address_space *, struct folio *dst, struct folio *src, enum migrate_mode); int (*launder_folio)(struct folio *); bool (*is_partially_uptodate)(struct folio *, size_t from, size_t count); int (*error_remove_folio)(struct address_space *, struct folio *); int (*swap_activate)(struct swap_info_struct *sis, struct file *f, sector_t *span) int (*swap_deactivate)(struct file *);”h]”hXint (*read_folio)(struct file *, struct folio *); int (*writepages)(struct address_space *, struct writeback_control *); bool (*dirty_folio)(struct address_space *, struct folio *folio); void (*readahead)(struct readahead_control *); int (*write_begin)(const struct kiocb *, struct address_space *mapping, loff_t pos, unsigned len, struct folio **foliop, void **fsdata); int (*write_end)(const struct kiocb *, struct address_space *mapping, loff_t pos, unsigned len, unsigned copied, struct folio *folio, void *fsdata); sector_t (*bmap)(struct address_space *, sector_t); void (*invalidate_folio) (struct folio *, size_t start, size_t len); bool (*release_folio)(struct folio *, gfp_t); void (*free_folio)(struct folio *); int (*direct_IO)(struct kiocb *, struct iov_iter *iter); int (*migrate_folio)(struct address_space *, struct folio *dst, struct folio *src, enum migrate_mode); int (*launder_folio)(struct folio *); bool (*is_partially_uptodate)(struct folio *, size_t from, size_t count); int (*error_remove_folio)(struct address_space *, struct folio *); int (*swap_activate)(struct swap_info_struct *sis, struct file *f, sector_t *span) int (*swap_deactivate)(struct file *);”…”�”}”hjzsbah}”(h]”h ]”h"]”h$]”h&]”j,j-uh1jh³hÊh´K÷hj[h²hubj— )�”}”(hhh]”jœ )�”}”(hŒ?locking rules: All except dirty_folio and free_folio may block ”h]”(j¢ )�”}”(hŒlocking rules:”h]”hŒlocking rules:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¡ h³hÊh´Mhj‹ubj² )�”}”(hhh]”hÌ)�”}”(hŒ/All except dirty_folio and free_folio may block”h]”hŒ/All except dirty_folio and free_folio may block”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j± hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j› h³hÊh´Mhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j– hj[h²hh³hÊh´Nubj=)�”}”(hhh]”jB)�”}”(hhh]”(jG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhjÃubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhjÃubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jFhjÃubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhjÃubj{)�”}”(hhh]”j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒops”h]”hŒops”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjñubj…)�”}”(hhh]”hÌ)�”}”(hŒ folio locked”h]”hŒ folio locked”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjñubj…)�”}”(hhh]”hÌ)�”}”(hŒi_rwsem”h]”hŒi_rwsem”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjñubj…)�”}”(hhh]”hÌ)�”}”(hŒinvalidate_lock”h]”hŒinvalidate_lock”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjÃubj)�”}”(hhh]”(j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ read_folio:”h]”hŒ read_folio:”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj_ubj…)�”}”(hhh]”hÌ)�”}”(hŒ yes, unlocks”h]”hŒ yes, unlocks”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj_ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj_ubj…)�”}”(hhh]”hÌ)�”}”(hŒshared”h]”hŒshared”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ writepages:”h]”hŒ writepages:”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¶ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¶ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¶ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ dirty_folio:”h]”hŒ dirty_folio:”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjñubj…)�”}”(hhh]”hÌ)�”}”(hŒmaybe”h]”hŒmaybe”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjñubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjñubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ readahead:”h]”hŒ readahead:”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj:ubj…)�”}”(hhh]”hÌ)�”}”(hŒ yes, unlocks”h]”hŒ yes, unlocks”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj:ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj:ubj…)�”}”(hhh]”hÌ)�”}”(hŒshared”h]”hŒshared”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ write_begin:”h]”hŒ write_begin:”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj‘ubj…)�”}”(hhh]”hÌ)�”}”(hŒlocks the folio”h]”hŒlocks the folio”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj‘ubj…)�”}”(hhh]”hÌ)�”}”(hŒ exclusive”h]”hŒ exclusive”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj‘ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ write_end:”h]”hŒ write_end:”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjèubj…)�”}”(hhh]”hÌ)�”}”(hŒ yes, unlocks”h]”hŒ yes, unlocks”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjèubj…)�”}”(hhh]”hÌ)�”}”(•hŒ exclusive”h]”hŒ exclusive”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjèubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒbmap:”h]”hŒbmap:”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj?ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj?ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj?ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒinvalidate_folio:”h]”hŒinvalidate_folio:”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjzubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjzubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjzubj…)�”}”(hhh]”hÌ)�”}”(hŒ exclusive”h]”hŒ exclusive”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒrelease_folio:”h]”hŒrelease_folio:”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÑubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÑubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÑubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ free_folio:”h]”hŒ free_folio:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ direct_IO:”h]”hŒ direct_IO:”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjcubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjcubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjcubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒmigrate_folio:”h]”hŒmigrate_folio:”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjžubj…)�”}”(hhh]”hÌ)�”}”(hŒ yes (both)”h]”hŒ yes (both)”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjžubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjžubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒlaunder_folio:”h]”hŒlaunder_folio:”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjçubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjçubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjçubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒis_partially_uptodate:”h]”hŒis_partially_uptodate:”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M!hj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj0ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M!hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj0ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj0ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒerror_remove_folio:”h]”hŒerror_remove_folio:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M"hj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjyubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M"hj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjyubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjyubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒswap_activate:”h]”hŒswap_activate:”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M#hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÂubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M#hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÂubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÂubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒswap_deactivate:”h]”hŒswap_deactivate:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M$hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M$hj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jAhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj[h²hh³hÊh´NubhÌ)�”}”(hŒe->write_begin(), ->write_end() and ->read_folio() may be called from the request handler (/dev/loop).”h]”hŒe->write_begin(), ->write_end() and ->read_folio() may be called from the request handler (/dev/loop).”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M'hj[h²hubhÌ)�”}”(hŒM->read_folio() unlocks the folio, either synchronously or via I/O completion.”h]”hŒM->read_folio() unlocks the folio, either synchronously or via I/O completion.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M*hj[h²hubhÌ)�”}”(hŒN->readahead() unlocks the folios that I/O is attempted on like ->read_folio().”h]”hŒN->readahead() unlocks the folios that I/O is attempted on like ->read_folio().”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M-hj[h²hubhÌ)�”}”(hX¯->writepages() is used for periodic writeback and for syscall-initiated sync operations. The address_space should start I/O against at least ``*nr_to_write`` pages. ``*nr_to_write`` must be decremented for each page which is written. The address_space implementation may write more (or less) pages than ``*nr_to_write`` asks for, but it should try to be reasonably close. If nr_to_write is NULL, all dirty pages must be written.”h]”(hŒŽ->writepages() is used for periodic writeback and for syscall-initiated sync operations. The address_space should start I/O against at least ”…”�”}”(hj‘h²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``*nr_to_write``”h]”hŒ *nr_to_write”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hj‘ubhŒ pages. ”…”�”}”(hj‘h²hh³Nh´Nubjš)�”}”(hŒ``*nr_to_write``”h]”hŒ *nr_to_write”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hj‘ubhŒ{ must be decremented for each page which is written. The address_space implementation may write more (or less) pages than ”…”�”}”(hj‘h²hh³Nh´Nubjš)�”}”(hŒ``*nr_to_write``”h]”hŒ *nr_to_write”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hj‘ubhŒm asks for, but it should try to be reasonably close. If nr_to_write is NULL, all dirty pages must be written.”…”�”}”(hj‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M/hj[h²hubhÌ)�”}”(hŒKwritepages should _only_ write pages which are present in mapping->i_pages.”h]”hŒKwritepages should _only_ write pages which are present in mapping->i_pages.”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M6hj[h²hubhÌ)�”}”(hX!->dirty_folio() is called from various places in the kernel when the target folio is marked as needing writeback. The folio cannot be truncated because either the caller holds the folio lock, or the caller has found the folio while holding the page table lock which will block truncation.”h]”hX!->dirty_folio() is called from various places in the kernel when the target folio is marked as needing writeback. The folio cannot be truncated because either the caller holds the folio lock, or the caller has found the folio while holding the page table lock which will block truncation.”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M9hj[h²hubhÌ)�”}”(hŒÁ->bmap() is currently used by legacy ioctl() (FIBMAP) provided by some filesystems and by the swapper. The latter will eventually go away. Please, keep it that way and don't breed new callers.”h]”hŒÃ->bmap() is currently used by legacy ioctl() (FIBMAP) provided by some filesystems and by the swapper. The latter will eventually go away. Please, keep it that way and don’t breed new callers.”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M?hj[h²hubhÌ)�”}”(hX­->invalidate_folio() is called when the filesystem must attempt to drop some or all of the buffers from the page when it is being truncated. It returns zero on success. The filesystem must exclusively acquire invalidate_lock before invalidating page cache in truncate / hole punch path (and thus calling into ->invalidate_folio) to block races between page cache invalidation and page cache filling functions (fault, read, ...).”h]”hX­->invalidate_folio() is called when the filesystem must attempt to drop some or all of the buffers from the page when it is being truncated. It returns zero on success. The filesystem must exclusively acquire invalidate_lock before invalidating page cache in truncate / hole punch path (and thus calling into ->invalidate_folio) to block races between page cache invalidation and page cache filling functions (fault, read, ...).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MChj[h²hubhÌ)�”}”(hXã->release_folio() is called when the MM wants to make a change to the folio that would invalidate the filesystem's private data. For example, it may be about to be removed from the address_space or split. The folio is locked and not under writeback. It may be dirty. The gfp parameter is not usually used for allocation, but rather to indicate what the filesystem may do to attempt to free the private data. The filesystem may return false to indicate that the folio's private data cannot be freed. If it returns true, it should have already removed the private data from the folio. If a filesystem does not provide a ->release_folio method, the pagecache will assume that private data is buffer_heads and call try_to_free_buffers().”h]”hXç->release_folio() is called when the MM wants to make a change to the folio that would invalidate the filesystem’s private data. For example, it may be about to be removed from the address_space or split. The folio is locked and not under writeback. It may be dirty. The gfp parameter is not usually used for allocation, but rather to indicate what the filesystem may do to attempt to free the private data. The filesystem may return false to indicate that the folio’s private data cannot be freed. If it returns true, it should have already removed the private data from the folio. If a filesystem does not provide a ->release_folio method, the pagecache will assume that private data is buffer_heads and call try_to_free_buffers().”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MJhj[h²hubhÌ)�”}”(hŒS->free_folio() is called when the kernel has dropped the folio from the page cache.”h]”hŒS->free_folio() is called when the kernel has dropped the folio from the page cache.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MVhj[h²hubhÌ)�”}”(hX3->launder_folio() may be called prior to releasing a folio if it is still found to be dirty. It returns zero if the folio was successfully cleaned, or an error value if not. Note that in order to prevent the folio getting mapped back in and redirtied, it needs to be kept locked across the entire operation.”h]”hX3->launder_folio() may be called prior to releasing a folio if it is still found to be dirty. It returns zero if the folio was successfully cleaned, or an error value if not. Note that in order to prevent the folio getting mapped back in and redirtied, it needs to be kept locked across the entire operation.”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MYhj[h²hubhÌ)�”}”(hXÚ->swap_activate() will be called to prepare the given file for swap. It should perform any validation and preparation necessary to ensure that writes can be performed with minimal memory allocation. It should call add_swap_extent(), or the helper iomap_swapfile_activate(), and return the number of extents added. If IO should be submitted through the file system it should call swap_fs_activate, otherwise IO will be submitted directly to the block device ``sis->bdev``.”h]”(hXÌ->swap_activate() will be called to prepare the given file for swap. It should perform any validation and preparation necessary to ensure that writes can be performed with minimal memory allocation. It should call add_swap_extent(), or the helper iomap_swapfile_activate(), and return the number of extents added. If IO should be submitted through the file system it should call swap_fs_activate, otherwise IO will be submitted directly to the block device ”…”�”}”(hj9h²hh³Nh´Nubjš)�”}”(hŒ ``sis->bdev``”h]”hŒ sis->bdev”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hj9ubhŒ.”…”�”}”(hj9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M_hj[h²hubhÌ)�”}”(hŒf->swap_deactivate() will be called in the sys_swapoff() path after ->swap_activate() returned success.”h]”hŒf->swap_deactivate() will be called in the sys_swapoff() path after ->swap_activate() returned success.”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mghj[h²hubeh}”(h]”Œaddress-space-operations”ah ]”h"]”Œaddress_space_operations”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kôubh¶)�”}”(hhh]”(h»)�”}”(hŒfile_lock_operations”h]”hŒfile_lock_operations”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjoh²hh³hÊh´MkubhÌ)�”}”(hŒ prototypes::”h]”hŒ prototypes:”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mmhjoh²hubj)�”}”(hŒmvoid (*fl_copy_lock)(struct file_lock *, struct file_lock *); void (*fl_release_private)(struct file_lock *);”h]”hŒmvoid (*fl_copy_lock)(struct file_lock *, struct file_lock *); void (*fl_release_private)(struct file_lock *);”…”�”}”hjŽsbah}”(h]”h ]”h"]”h$]”h&]”j,j-uh1jh³hÊh´Mohjoh²hubhÌ)�”}”(hŒlocking rules:”h]”hŒlocking rules:”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mshjoh²hubj=)�”}”(hhh]”jB)�”}”(hhh]”(jG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhj­ubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jFhj­ubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jFhj­ubj{)�”}”(hhh]”j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒops”h]”hŒops”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MvhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÑubj…)�”}”(hhh]”hÌ)�”}”(hŒ inode->i_lock”h]”hŒ inode->i_lock”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mvhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÑubj…)�”}”(hhh]”hÌ)�”}”(hŒ may block”h]”hŒ may block”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mvhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj­ubj)�”}”(hhh]”(j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ fl_copy_lock:”h]”hŒ fl_copy_lock:”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mxhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj(ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MxhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj(ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MxhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒfl_release_private:”h]”hŒfl_release_private:”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Myhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjvubj…)�”}”(hhh]”hÌ)�”}”(hŒmaybe”h]”hŒmaybe”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Myhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjvubj…)�”}”(hhh]”hÌ)�”}”(hŒ maybe[1]_”h]”hŒ maybe[1]_”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Myhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jAhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjoh²hh³hÊh´NubhŒcomment”“”)�”}”(hŒÊ[1]: ->fl_release_private for flock or POSIX locks is currently allowed to block. Leases however can still be freed while the i_lock is held and so fl_release_private called on a lease should not block.”h]”hŒÊ[1]: ->fl_release_private for flock or POSIX locks is currently allowed to block. Leases however can still be freed while the i_lock is held and so fl_release_private called on a lease should not block.”…”�”}”hjÙsbah}”(h]”h ]”h"]”h$]”h&]”j,j-uh1j×hjoh²hh³hÊh´M€ubeh}”(h]”Œfile-lock-operations”ah ]”h"]”Œfile_lock_operations”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mkubh¶)�”}”(hhh]”(h»)�”}”(hŒlock_manager_operations”h]”hŒlock_manager_operations”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjïh²hh³hÊh´M‚ubhÌ)�”}”(hŒ prototypes::”h]”hŒ prototypes:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M„hjïh²hubj)�”}”(hX›void (*lm_notify)(struct file_lock *); /* unblock callback */ int (*lm_grant)(struct file_lock *, struct file_lock *, int); void (*lm_break)(struct file_lock *); /* break_lease callback */ int (*lm_change)(struct file_lock **, int); bool (*lm_breaker_owns_lease)(struct file_lock *); bool (*lm_lock_expirable)(struct file_lock *); void (*lm_expire_lock)(void); bool (*lm_breaker_timedout)(struct file_lease *);”h]”hX›void (*lm_notify)(struct file_lock *); /* unblock callback */ int (*lm_grant)(struct file_lock *, struct file_lock *, int); void (*lm_break)(struct file_lock *); /* break_lease callback */ int (*lm_change)(struct file_lock **, int); bool (*lm_breaker_owns_lease)(struct file_lock *); bool (*lm_lock_expirable)(struct file_lock *); void (*lm_expire_lock)(void); bool (*lm_breaker_timedout)(struct file_lease *);”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j,j-uh1jh³hÊh´M†hjïh²hubhÌ)�”}”(hŒlocking rules:”h]”hŒlocking rules:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M�hjïh²hubj=)�”}”(hhh]”jB)�”}”(hhh]”(jG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhj- ubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jFhj- ubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhj- ubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jFhj- ubj{)�”}”(hhh]”j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒops”h]”hŒops”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M’hj^ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj[ ubj…)�”}”(hhh]”hÌ)�”}”(hŒflc_lock”h]”hŒflc_lock”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M’hju ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj[ ubj…)�”}”(hhh]”hÌ)�”}”(hŒblocked_lock_lock”h]”hŒblocked_lock_lock”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M’hjŒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj[ ubj…)�”}”(hhh]”hÌ)�”}”(hŒ may block”h]”hŒ may block”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M’hj£ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj[ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjX ubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj- ubj)�”}”(hhh]”(j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ lm_notify:”h]”hŒ lm_notify:”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M”hjÌ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÉ ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M”hjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÉ ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M”hjú ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÉ ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M”hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÉ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ lm_grant:”h]”hŒ lm_grant:”…”�”}”(hj4!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M•hj1!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj.!ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjK!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M•hjH!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj.!ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjb!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M•hj_!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj.!ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjy!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M•hjv!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj.!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ lm_break:”h]”hŒ lm_break:”…”�”}”(hj™!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M–hj–!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj“!ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj°!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M–hj­!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj“!ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjÇ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M–hjÄ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj“!ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjÞ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M–hjÛ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj“!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ lm_change”h]”hŒ lm_change”…”�”}”(hjþ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M—hjû!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjø!ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M—hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjø!ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj,"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M—hj)"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjø!ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjC"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M—hj@"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjø!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒlm_breaker_owns_lease:”h]”hŒlm_breaker_owns_lease:”…”�”}”(hjc"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M˜hj`"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj]"ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjz"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M˜hjw"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj]"ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj‘"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M˜hjŽ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj]"ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj¨"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M˜hj¥"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj]"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒlm_lock_expirable”h]”hŒlm_lock_expirable”…”�”}”(hjÈ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M™hjÅ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÂ"ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjß"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M™hjÜ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÂ"ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjö"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M™hjó"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÂ"ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M™hj #ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÂ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒlm_expire_lock”h]”hŒlm_expire_lock”…”�”}”(hj-#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mšhj*#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj'#ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjD#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MšhjA#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj'#ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj[#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MšhjX#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj'#ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjr#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mšhjo#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj'#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒlm_open_conflict”h]”hŒlm_open_conflict”…”�”}”(hj’#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M›hj�#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŒ#ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj©#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M›hj¦#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŒ#ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjÀ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M›hj½#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŒ#ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj×#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M›hjÔ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŒ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒlm_breaker_timedout”h]”hŒlm_breaker_timedout”…”�”}”(hj÷#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mœhjô#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjñ#ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mœhj $ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjñ#ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj%$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mœhj"$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjñ#ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj<$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mœhj9$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjñ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj- ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jAhj* ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjïh²hh³hÊh´Nubeh}”(h]”Œlock-manager-operations”ah ]”h"]”Œlock_manager_operations”ah$]”h&]”uh1hµhh·h²hh³hÊh´M‚ubh¶)�”}”(hhh]”(h»)�”}”(hŒblock_device_operations”h]”hŒblock_device_operations”…”�”}”(hjt$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjq$h²hh³hÊh´M ubhÌ)�”}”(hŒ prototypes::”h]”hŒ prototypes:”…”�”}”(hj‚$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¡hjq$h²hubj)�”}”(hX int (*open) (struct block_device *, fmode_t); int (*release) (struct gendisk *, fmode_t); int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); int (*direct_access) (struct block_device *, sector_t, void **, unsigned long *); void (*unlock_native_capacity) (struct gendisk *); int (*getgeo)(struct gendisk *, struct hd_geometry *); void (*swap_slot_free_notify) (struct block_device *, unsigned long);”h]”hX int (*open) (struct block_device *, fmode_t); int (*release) (struct gendisk *, fmode_t); int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); int (*direct_access) (struct block_device *, sector_t, void **, unsigned long *); void (*unlock_native_capacity) (struct gendisk *); int (*getgeo)(struct gendisk *, struct hd_geometry *); void (*swap_slot_free_notify) (struct block_device *, unsigned long);”…”�”}”hj�$sbah}”(h]”h ]”h"]”h$]”h&]”j,j-uh1jh³hÊh´M£hjq$h²hubhÌ)�”}”(hŒlocking rules:”h]”hŒlocking rules:”…”�”}”(hjž$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M­hjq$h²hubj=)�”}”(hhh]”jB)�”}”(hhh]”(jG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhj¯$ubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhj¯$ubj{)�”}”(hhh]”j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒops”h]”hŒops”…”�”}”(hjÏ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M°hjÌ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÉ$ubj…)�”}”(hhh]”hÌ)�”}”(hŒ open_mutex”h]”hŒ open_mutex”…”�”}”(hjæ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M°hjã$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÉ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj¯$ubj)�”}”(hhh]”(j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒopen:”h]”hŒopen:”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M²hj %ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj %ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj&%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M²hj#%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj %ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒrelease:”h]”hŒrelease:”…”�”}”(hjF%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M³hjC%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj@%ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj]%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M³hjZ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj@%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒioctl:”h]”hŒioctl:”…”�”}”(hj}%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M´hjz%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjw%ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj”%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M´hj‘%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjw%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ compat_ioctl:”h]”hŒ compat_ioctl:”…”�”}”(hj´%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mµhj±%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj®%ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjË%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MµhjÈ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj®%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒdirect_access:”h]”hŒdirect_access:”…”�”}”(hjë%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¶hjè%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjå%ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¶hjÿ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjå%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒunlock_native_capacity:”h]”hŒunlock_native_capacity:”…”�”}”(hj"&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M·hj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj&ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj9&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M·hj6&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒgetgeo:”h]”hŒgetgeo:”…”�”}”(hjY&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¸hjV&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjS&ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hjp&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¸hjm&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjS&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒswap_slot_free_notify:”h]”hŒswap_slot_free_notify:”…”�”}”(hj�&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¹hj�&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŠ&ubj…)�”}”(hhh]”hÌ)�”}”(hŒno (see below)”h]”hŒno (see below)”…”�”}”(hj§&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¹hj¤&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŠ&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯$ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jAhj¬$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjq$h²hh³hÊh´NubhÌ)�”}”(hŒPswap_slot_free_notify is called with swap_lock and sometimes the page lock held.”h]”hŒPswap_slot_free_notify is called with swap_lock and sometimes the page lock held.”…”�”}”(hjÔ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¼hjq$h²hubeh}”(h]”Œblock-device-operations”ah ]”h"]”Œblock_device_operations”ah$]”h&]”uh1hµhh·h²hh³hÊh´M ubh¶)�”}”(hhh]”(h»)�”}”(hŒfile_operations”h]”hŒfile_operations”…”�”}”(hjí&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjê&h²hh³hÊh´MÁubhÌ)�”}”(hŒ prototypes::”h]”hŒ prototypes:”…”�”}”(hjû&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÃhjê&h²hubj)�”}”(hX�loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); int (*iopoll) (struct kiocb *kiocb, bool spin); int (*iterate_shared) (struct file *, struct dir_context *); __poll_t (*poll) (struct file *, struct poll_table_struct *); long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_ioctl) (struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *); int (*release) (struct inode *, struct file *); int (*fsync) (struct file *, loff_t start, loff_t end, int datasync); int (*fasync) (int, struct file *, int); int (*lock) (struct file *, int, struct file_lock *); unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); int (*check_flags)(int); int (*flock) (struct file *, int, struct file_lock *); ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); int (*setlease)(struct file *, long, struct file_lock **, void **); long (*fallocate)(struct file *, int, loff_t, loff_t); void (*show_fdinfo)(struct seq_file *m, struct file *f); unsigned (*mmap_capabilities)(struct file *); ssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int); loff_t (*remap_file_range)(struct file *file_in, loff_t pos_in, struct file *file_out, loff_t pos_out, loff_t len, unsigned int remap_flags); int (*fadvise)(struct file *, loff_t, loff_t, int);”h]”hX�loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); int (*iopoll) (struct kiocb *kiocb, bool spin); int (*iterate_shared) (struct file *, struct dir_context *); __poll_t (*poll) (struct file *, struct poll_table_struct *); long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_ioctl) (struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *); int (*release) (struct inode *, struct file *); int (*fsync) (struct file *, loff_t start, loff_t end, int datasync); int (*fasync) (int, struct file *, int); int (*lock) (struct file *, int, struct file_lock *); unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); int (*check_flags)(int); int (*flock) (struct file *, int, struct file_lock *); ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); int (*setlease)(struct file *, long, struct file_lock **, void **); long (*fallocate)(struct file *, int, loff_t, loff_t); void (*show_fdinfo)(struct seq_file *m, struct file *f); unsigned (*mmap_capabilities)(struct file *); ssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int); loff_t (*remap_file_range)(struct file *file_in, loff_t pos_in, struct file *file_out, loff_t pos_out, loff_t len, unsigned int remap_flags); int (*fadvise)(struct file *, loff_t, loff_t, int);”…”�”}”hj 'sbah}”(h]”h ]”h"]”h$]”h&]”j,j-uh1jh³hÊh´MÅhjê&h²hubj— )�”}”(hhh]”jœ )�”}”(hŒlocking rules: All may block. ”h]”(j¢ )�”}”(hŒlocking rules:”h]”hŒlocking rules:”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¡ h³hÊh´Mêhj'ubj² )�”}”(hhh]”hÌ)�”}”(hŒAll may block.”h]”hŒAll may block.”…”�”}”(hj/'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mêhj,'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j± hj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j› h³hÊh´Mêhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j– hjê&h²hh³hÊh´NubhÌ)�”}”(hXÀ->llseek() locking has moved from llseek to the individual llseek implementations. If your fs is not using generic_file_llseek, you need to acquire and release the appropriate locks in your ->llseek(). For many filesystems, it is probably safe to acquire the inode mutex or just to use i_size_read() instead. Note: this does not protect the file->f_pos against concurrent modifications since this is something the userspace has to take care about.”h]”hXÀ->llseek() locking has moved from llseek to the individual llseek implementations. If your fs is not using generic_file_llseek, you need to acquire and release the appropriate locks in your ->llseek(). For many filesystems, it is probably safe to acquire the inode mutex or just to use i_size_read() instead. Note: this does not protect the file->f_pos against concurrent modifications since this is something the userspace has to take care about.”…”�”}”(hjO'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mìhjê&h²hubhÌ)�”}”(hŒi->iterate_shared() is called with i_rwsem held for reading, and with the file f_pos_lock held exclusively”h]”hŒi->iterate_shared() is called with i_rwsem held for reading, and with the file f_pos_lock held exclusively”…”�”}”(hj]'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Môhjê&h²hubhÌ)�”}”(hX->fasync() is responsible for maintaining the FASYNC bit in filp->f_flags. Most instances call fasync_helper(), which does that maintenance, so it's not normally something one needs to worry about. Return values > 0 will be mapped to zero in the VFS layer.”h]”hX->fasync() is responsible for maintaining the FASYNC bit in filp->f_flags. Most instances call fasync_helper(), which does that maintenance, so it’s not normally something one needs to worry about. Return values > 0 will be mapped to zero in the VFS layer.”…”�”}”(hjk'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M÷hjê&h²hubhÌ)�”}”(hXw->readdir() and ->ioctl() on directories must be changed. Ideally we would move ->readdir() to inode_operations and use a separate method for directory ->ioctl() or kill the latter completely. One of the problems is that for anything that resembles union-mount we won't have a struct file for all components. And there are other reasons why the current interface is a mess...”h]”hXy->readdir() and ->ioctl() on directories must be changed. Ideally we would move ->readdir() to inode_operations and use a separate method for directory ->ioctl() or kill the latter completely. One of the problems is that for anything that resembles union-mount we won’t have a struct file for all components. And there are other reasons why the current interface is a mess...”…”�”}”(hjy'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mühjê&h²hubhÌ)�”}”(hŒg->read on directories probably must go away - we should just enforce -EISDIR in sys_read() and friends.”h]”hŒg->read on directories probably must go away - we should just enforce -EISDIR in sys_read() and friends.”…”�”}”(hj‡'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjê&h²hubhÌ)�”}”(hŒ�->setlease operations should call generic_setlease() before or after setting the lease within the individual filesystem to record the result of the operation”h]”hŒ�->setlease operations should call generic_setlease() before or after setting the lease within the individual filesystem to record the result of the operation”…”�”}”(hj•'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjê&h²hubhÌ)�”}”(hX->fallocate implementation must be really careful to maintain page cache consistency when punching holes or performing other operations that invalidate page cache contents. Usually the filesystem needs to call truncate_inode_pages_range() to invalidate relevant range of the page cache. However the filesystem usually also needs to update its internal (and on disk) view of file offset -> disk block mapping. Until this update is finished, the filesystem needs to block page faults and reads from reloading now-stale page cache contents from the disk. Since VFS acquires mapping->invalidate_lock in shared mode when loading pages from disk (filemap_fault(), filemap_read(), readahead paths), the fallocate implementation must take the invalidate_lock to prevent reloading.”h]”hX->fallocate implementation must be really careful to maintain page cache consistency when punching holes or performing other operations that invalidate page cache contents. Usually the filesystem needs to call truncate_inode_pages_range() to invalidate relevant range of the page cache. However the filesystem usually also needs to update its internal (and on disk) view of file offset -> disk block mapping. Until this update is finished, the filesystem needs to block page faults and reads from reloading now-stale page cache contents from the disk. Since VFS acquires mapping->invalidate_lock in shared mode when loading pages from disk (filemap_fault(), filemap_read(), readahead paths), the fallocate implementation must take the invalidate_lock to prevent reloading.”…”�”}”(hj£'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjê&h²hubhÌ)�”}”(hXˆ->copy_file_range and ->remap_file_range implementations need to serialize against modifications of file data while the operation is running. For blocking changes through write(2) and similar operations inode->i_rwsem can be used. To block changes to file contents via a memory mapping during the operation, the filesystem must take mapping->invalidate_lock to coordinate with ->page_mkwrite.”h]”hXˆ->copy_file_range and ->remap_file_range implementations need to serialize against modifications of file data while the operation is running. For blocking changes through write(2) and similar operations inode->i_rwsem can be used. To block changes to file contents via a memory mapping during the operation, the filesystem must take mapping->invalidate_lock to coordinate with ->page_mkwrite.”…”�”}”(hj±'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjê&h²hubeh}”(h]”Œfile-operations”ah ]”h"]”Œfile_operations”ah$]”h&]”uh1hµhh·h²hh³hÊh´MÁubh¶)�”}”(hhh]”(h»)�”}”(hŒdquot_operations”h]”hŒdquot_operations”…”�”}”(hjÊ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÇ'h²hh³hÊh´MubhÌ)�”}”(hŒ prototypes::”h]”hŒ prototypes:”…”�”}”(hjØ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÇ'h²hubj)�”}”(hŒÅint (*write_dquot) (struct dquot *); int (*acquire_dquot) (struct dquot *); int (*release_dquot) (struct dquot *); int (*mark_dirty) (struct dquot *); int (*write_info) (struct super_block *, int);”h]”hŒÅint (*write_dquot) (struct dquot *); int (*acquire_dquot) (struct dquot *); int (*release_dquot) (struct dquot *); int (*mark_dirty) (struct dquot *); int (*write_info) (struct super_block *, int);”…”�”}”hjæ'sbah}”(h]”h ]”h"]”h$]”h&]”j,j-uh1jh³hÊh´M!hjÇ'h²hubhÌ)�”}”(hŒšThese operations are intended to be more or less wrapping functions that ensure a proper locking wrt the filesystem and call the generic quota operations.”h]”hŒšThese operations are intended to be more or less wrapping functions that ensure a proper locking wrt the filesystem and call the generic quota operations.”…”�”}”(hjô'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M'hjÇ'h²hubhÌ)�”}”(hŒ?What filesystem should expect from the generic quota functions:”h]”hŒ?What filesystem should expect from the generic quota functions:”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M*hjÇ'h²hubj=)�”}”(hhh]”jB)�”}”(hhh]”(jG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhj(ubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jFhj(ubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhj(ubj{)�”}”(hhh]”j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒops”h]”hŒops”…”�”}”(hj=(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M-hj:(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj7(ubj…)�”}”(hhh]”hÌ)�”}”(hŒ FS recursion”h]”hŒ FS recursion”…”�”}”(hjT(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M-hjQ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj7(ubj…)�”}”(hhh]”hÌ)�”}”(hŒHeld locks when called”h]”hŒHeld locks when called”…”�”}”(hjk(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M-hjh(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj7(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj4(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj(ubj)�”}”(hhh]”(j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ write_dquot:”h]”hŒ write_dquot:”…”�”}”(hj”(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M/hj‘(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŽ(ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hj«(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M/hj¨(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŽ(ubj…)�”}”(hhh]”hÌ)�”}”(hŒdqonoff_sem or dqptr_sem”h]”hŒdqonoff_sem or dqptr_sem”…”�”}”(hjÂ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M/hj¿(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŽ(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹(ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒacquire_dquot:”h]”hŒacquire_dquot:”…”�”}”(hjâ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M0hjß(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÜ(ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjù(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M0hjö(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÜ(ubj…)�”}”(hhh]”hÌ)�”}”(hŒdqonoff_sem or dqptr_sem”h]”hŒdqonoff_sem or dqptr_sem”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M0hj )ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÜ(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹(ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒrelease_dquot:”h]”hŒrelease_dquot:”…”�”}”(hj0)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M1hj-)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj*)ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjG)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M1hjD)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj*)ubj…)�”}”(hhh]”hÌ)�”}”(hŒdqonoff_sem or dqptr_sem”h]”hŒdqonoff_sem or dqptr_sem”…”�”}”(hj^)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M1hj[)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj*)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹(ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ mark_dirty:”h]”hŒ mark_dirty:”…”�”}”(hj~)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M2hj{)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjx)ubj…)�”}”(hhh]”hÌ)�”}”(hŒno”h]”hŒno”…”�”}”(hj•)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M2hj’)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjx)ubj…)�”}”(hhh]”hŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j±)hj®)ubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j¬)h³hÊh´M2hj©)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjx)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹(ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ write_info:”h]”hŒ write_info:”…”�”}”(hjÖ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M3hjÓ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÐ)ubj…)�”}”(hhh]”hÌ)�”}”(hŒyes”h]”hŒyes”…”�”}”(hjí)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M3hjê)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÐ)ubj…)�”}”(hhh]”hÌ)�”}”(hŒ dqonoff_sem”h]”hŒ dqonoff_sem”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M3hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÐ)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj(ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jAhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjÇ'h²hh³hÊh´NubhÌ)�”}”(hŒYFS recursion means calling ->quota_read() and ->quota_write() from superblock operations.”h]”hŒYFS recursion means calling ->quota_read() and ->quota_write() from superblock operations.”…”�”}”(hj1*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M6hjÇ'h²hubhÌ)�”}”(hŒBMore details about quota locking can be found in fs/quota/dquot.c.”h]”hŒBMore details about quota locking can be found in fs/quota/dquot.c.”…”�”}”(hj?*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M9hjÇ'h²hubeh}”(h]”Œdquot-operations”ah ]”h"]”Œdquot_operations”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mubh¶)�”}”(hhh]”(h»)�”}”(hŒvm_operations_struct”h]”hŒvm_operations_struct”…”�”}”(hjX*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjU*h²hh³hÊh´M<ubhÌ)�”}”(hŒ prototypes::”h]”hŒ prototypes:”…”�”}”(hjf*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M>hjU*h²hubj)�”}”(hXÖvoid (*open)(struct vm_area_struct *); void (*close)(struct vm_area_struct *); vm_fault_t (*fault)(struct vm_fault *); vm_fault_t (*huge_fault)(struct vm_fault *, unsigned int order); vm_fault_t (*map_pages)(struct vm_fault *, pgoff_t start, pgoff_t end); vm_fault_t (*page_mkwrite)(struct vm_area_struct *, struct vm_fault *); vm_fault_t (*pfn_mkwrite)(struct vm_area_struct *, struct vm_fault *); int (*access)(struct vm_area_struct *, unsigned long, void*, int, int);”h]”hXÖvoid (*open)(struct vm_area_struct *); void (*close)(struct vm_area_struct *); vm_fault_t (*fault)(struct vm_fault *); vm_fault_t (*huge_fault)(struct vm_fault *, unsigned int order); vm_fault_t (*map_pages)(struct vm_fault *, pgoff_t start, pgoff_t end); vm_fault_t (*page_mkwrite)(struct vm_area_struct *, struct vm_fault *); vm_fault_t (*pfn_mkwrite)(struct vm_area_struct *, struct vm_fault *); int (*access)(struct vm_area_struct *, unsigned long, void*, int, int);”…”�”}”hjt*sbah}”(h]”h ]”h"]”h$]”h&]”j,j-uh1jh³hÊh´M@hjU*h²hubhÌ)�”}”(hŒlocking rules:”h]”hŒlocking rules:”…”�”}”(hj‚*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MIhjU*h²hubj=)�”}”(hhh]”jB)�”}”(hhh]”(jG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jFhj“*ubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jFhj“*ubjG)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jFhj“*ubj{)�”}”(hhh]”j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒops”h]”hŒops”…”�”}”(hj½*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MLhjº*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj·*ubj…)�”}”(hhh]”hÌ)�”}”(hŒ mmap_lock”h]”hŒ mmap_lock”…”�”}”(hjÔ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MLhjÑ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj·*ubj…)�”}”(hhh]”hÌ)�”}”(hŒPageLocked(page)”h]”hŒPageLocked(page)”…”�”}”(hjë*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MLhjè*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj·*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj´*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj“*ubj)�”}”(hhh]”(j€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒopen:”h]”hŒopen:”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MNhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj+ubj…)�”}”(hhh]”hÌ)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hj++h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MNhj(+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj+ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj +ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒclose:”h]”hŒclose:”…”�”}”(hjT+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MOhjQ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjN+ubj…)�”}”(hhh]”hÌ)�”}”(hŒ read/write”h]”hŒ read/write”…”�”}”(hjk+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MOhjh+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjN+ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjN+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj +ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒfault:”h]”hŒfault:”…”�”}”(hj”+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MPhj‘+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŽ+ubj…)�”}”(hhh]”hÌ)�”}”(hŒread”h]”hŒread”…”�”}”(hj«+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MPhj¨+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŽ+ubj…)�”}”(hhh]”hÌ)�”}”(hŒcan return with page locked”h]”hŒcan return with page locked”…”�”}”(hjÂ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MPhj¿+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjŽ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj +ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ huge_fault:”h]”hŒ huge_fault:”…”�”}”(hjâ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MQhjß+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÜ+ubj…)�”}”(hhh]”hÌ)�”}”(hŒ maybe-read”h]”hŒ maybe-read”…”�”}”(hjù+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MQhjö+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÜ+ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjÜ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj +ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ map_pages:”h]”hŒ map_pages:”…”�”}”(hj",h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MRhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj,ubj…)�”}”(hhh]”hÌ)�”}”(hŒ maybe-read”h]”hŒ maybe-read”…”�”}”(hj9,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MRhj6,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj,ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj +ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ page_mkwrite:”h]”hŒ page_mkwrite:”…”�”}”(hjb,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MShj_,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj\,ubj…)�”}”(hhh]”hÌ)�”}”(hŒread”h]”hŒread”…”�”}”(hjy,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MShjv,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj\,ubj…)�”}”(hhh]”hÌ)�”}”(hŒcan return with page locked”h]”hŒcan return with page locked”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MShj�,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hj\,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj +ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒ pfn_mkwrite:”h]”hŒ pfn_mkwrite:”…”�”}”(hj°,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MThj­,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjª,ubj…)�”}”(hhh]”hÌ)�”}”(hŒread”h]”hŒread”…”�”}”(hjÇ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MThjÄ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjª,ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjª,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj +ubj€)�”}”(hhh]”(j…)�”}”(hhh]”hÌ)�”}”(hŒaccess:”h]”hŒaccess:”…”�”}”(hjð,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MUhjí,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjê,ubj…)�”}”(hhh]”hÌ)�”}”(hŒread”h]”hŒread”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MUhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j„hjê,ubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j„hjê,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj +ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj“*ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jAhj�*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjU*h²hh³hÊh´NubhÌ)�”}”(hXê->fault() is called when a previously not present pte is about to be faulted in. The filesystem must find and return the page associated with the passed in "pgoff" in the vm_fault structure. If it is possible that the page may be truncated and/or invalidated, then the filesystem must lock invalidate_lock, then ensure the page is not already truncated (invalidate_lock will block subsequent truncate), and then return with VM_FAULT_LOCKED, and the page locked. The VM will unlock the page.”h]”hXî->fault() is called when a previously not present pte is about to be faulted in. The filesystem must find and return the page associated with the passed in “pgoffâ€� in the vm_fault structure. If it is possible that the page may be truncated and/or invalidated, then the filesystem must lock invalidate_lock, then ensure the page is not already truncated (invalidate_lock will block subsequent truncate), and then return with VM_FAULT_LOCKED, and the page locked. The VM will unlock the page.”…”�”}”(hj=-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MXhjU*h²hubhÌ)�”}”(hX™->huge_fault() is called when there is no PUD or PMD entry present. This gives the filesystem the opportunity to install a PUD or PMD sized page. Filesystems can also use the ->fault method to return a PMD sized page, so implementing this function may not be necessary. In particular, filesystems should not call filemap_fault() from ->huge_fault(). The mmap_lock may not be held when this method is called.”h]”hX™->huge_fault() is called when there is no PUD or PMD entry present. This gives the filesystem the opportunity to install a PUD or PMD sized page. Filesystems can also use the ->fault method to return a PMD sized page, so implementing this function may not be necessary. In particular, filesystems should not call filemap_fault() from ->huge_fault(). The mmap_lock may not be held when this method is called.”…”�”}”(hjK-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M`hjU*h²hubhÌ)�”}”(hX#->map_pages() is called when VM asks to map easy accessible pages. Filesystem should find and map pages associated with offsets from "start_pgoff" till "end_pgoff". ->map_pages() is called with the RCU lock held and must not block. If it's not possible to reach a page without blocking, filesystem should skip it. Filesystem should use set_pte_range() to setup page table entry. Pointer to entry associated with the page is passed in "pte" field in vm_fault structure. Pointers to entries for other offsets should be calculated relative to "pte".”h]”hX5->map_pages() is called when VM asks to map easy accessible pages. Filesystem should find and map pages associated with offsets from “start_pgoffâ€� till “end_pgoffâ€�. ->map_pages() is called with the RCU lock held and must not block. If it’s not possible to reach a page without blocking, filesystem should skip it. Filesystem should use set_pte_range() to setup page table entry. Pointer to entry associated with the page is passed in “pteâ€� field in vm_fault structure. Pointers to entries for other offsets should be calculated relative to “pteâ€�.”…”�”}”(hjY-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MghjU*h²hubhÌ)�”}”(hX->page_mkwrite() is called when a previously read-only pte is about to become writeable. The filesystem again must ensure that there are no truncate/invalidate races or races with operations such as ->remap_file_range or ->copy_file_range, and then return with the page locked. Usually mapping->invalidate_lock is suitable for proper serialization. If the page has been truncated, the filesystem should not look up a new page like the ->fault() handler, but simply return with VM_FAULT_NOPAGE, which will cause the VM to retry the fault.”h]”hX->page_mkwrite() is called when a previously read-only pte is about to become writeable. The filesystem again must ensure that there are no truncate/invalidate races or races with operations such as ->remap_file_range or ->copy_file_range, and then return with the page locked. Usually mapping->invalidate_lock is suitable for proper serialization. If the page has been truncated, the filesystem should not look up a new page like the ->fault() handler, but simply return with VM_FAULT_NOPAGE, which will cause the VM to retry the fault.”…”�”}”(hjg-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MphjU*h²hubhÌ)�”}”(hX!->pfn_mkwrite() is the same as page_mkwrite but when the pte is VM_PFNMAP or VM_MIXEDMAP with a page-less entry. Expected return is VM_FAULT_NOPAGE. Or one of the VM_FAULT_ERROR types. The default behavior after this call is to make the pte read-write, unless pfn_mkwrite returns an error.”h]”hX!->pfn_mkwrite() is the same as page_mkwrite but when the pte is VM_PFNMAP or VM_MIXEDMAP with a page-less entry. Expected return is VM_FAULT_NOPAGE. Or one of the VM_FAULT_ERROR types. The default behavior after this call is to make the pte read-write, unless pfn_mkwrite returns an error.”…”�”}”(hju-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MyhjU*h²hubhÌ)�”}”(hŒÅ->access() is called when get_user_pages() fails in access_process_vm(), typically used to debug a process through /proc/pid/mem or ptrace. This function is needed only for VM_IO | VM_PFNMAP VMAs.”h]”hŒÅ->access() is called when get_user_pages() fails in access_process_vm(), typically used to debug a process through /proc/pid/mem or ptrace. This function is needed only for VM_IO | VM_PFNMAP VMAs.”…”�”}”(hjƒ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjU*h²hubhŒ transition”“”)�”}”(hŒP--------------------------------------------------------------------------------”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1j‘-h³hÊh´M„hjU*h²hubj¦)�”}”(hŒDubious stuff ”h]”hÌ)�”}”(hŒ Dubious stuff”h]”hŒ Dubious stuff”…”�”}”(hj¡-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M†hj�-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥h³hÊh´M†hjU*h²hubhÌ)�”}”(hŒf(if you break something or notice that it is broken and do not fix it yourself - at least put it here)”h]”hŒf(if you break something or notice that it is broken and do not fix it yourself - at least put it here)”…”�”}”(hjµ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MˆhjU*h²hubeh}”(h]”Œvm-operations-struct”ah ]”h"]”Œvm_operations_struct”ah$]”h&]”uh1hµhh·h²hh³hÊh´M<ubeh}”(h]”Œlocking”ah ]”h"]”Œlocking”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”j„Œ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”jõ-Œ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/”•VŒ 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Ð-jÍ-jf jc jÒjÏjTjQj`j]jXjUjljijìjéjn$jk$jç&jä&jÄ'jÁ'jR*jO*jÈ-jÅ-uŒ nametypes”}”(jÐ-‰jf ‰jÒ‰jT‰j`‰jX‰jl‰jì‰jn$‰jç&‰jÄ'‰jR*‰jÈ-‰uh}”(jÍ-h·jc hýjÏji jQjÕj]jWjUjcjij[jéjojk$jïjä&jq$jÁ'jê&jO*jÇ'jÅ-jU*uŒ 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.