README.Locking (c1b054d03f5b31c33eaa0b267c629b118eaf3790) README.Locking (8b0b339d46ca0105a9936e3caa3bac80b72de7a3)
1 $Id: README.Locking,v 1.12 2005/04/13 13:22:35 dwmw2 Exp $
2
3 JFFS2 LOCKING DOCUMENTATION
4 ---------------------------
5
6At least theoretically, JFFS2 does not require the Big Kernel Lock
7(BKL), which was always helpfully obtained for it by Linux 2.4 VFS
8code. It has its own locking, as described below.

--- 136 unchanged lines hidden (view full) ---

145This read/write semaphore protects against concurrent access to the
146write-behind buffer ('wbuf') used for flash chips where we must write
147in blocks. It protects both the contents of the wbuf and the metadata
148which indicates which flash region (if any) is currently covered by
149the buffer.
150
151Ordering constraints:
152 Lock wbuf_sem last, after the alloc_sem or and f->sem.
1 $Id: README.Locking,v 1.12 2005/04/13 13:22:35 dwmw2 Exp $
2
3 JFFS2 LOCKING DOCUMENTATION
4 ---------------------------
5
6At least theoretically, JFFS2 does not require the Big Kernel Lock
7(BKL), which was always helpfully obtained for it by Linux 2.4 VFS
8code. It has its own locking, as described below.

--- 136 unchanged lines hidden (view full) ---

145This read/write semaphore protects against concurrent access to the
146write-behind buffer ('wbuf') used for flash chips where we must write
147in blocks. It protects both the contents of the wbuf and the metadata
148which indicates which flash region (if any) is currently covered by
149the buffer.
150
151Ordering constraints:
152 Lock wbuf_sem last, after the alloc_sem or and f->sem.
153
154
155 c->xattr_sem
156 ------------
157
158This read/write semaphore protects against concurrent access to the
159xattr related objects which include stuff in superblock and ic->xref.
160In read-only path, write-semaphore is too much exclusion. It's enough
161by read-semaphore. But you must hold write-semaphore when updating,
162creating or deleting any xattr related object.
163
164Once xattr_sem released, there would be no assurance for the existence
165of those objects. Thus, a series of processes is often required to retry,
166when updating such a object is necessary under holding read semaphore.
167For example, do_jffs2_getxattr() holds read-semaphore to scan xref and
168xdatum at first. But it retries this process with holding write-semaphore
169after release read-semaphore, if it's necessary to load name/value pair
170from medium.
171
172Ordering constraints:
173 Lock xattr_sem last, after the alloc_sem.