lfs_seglock
lfs_seglock(fs, flags | SEGM_CKP);
if (fs->lfs_seglock) {
++fs->lfs_seglock;
fs->lfs_seglock = 1;
if (fs->lfs_seglock == 1) {
--fs->lfs_seglock;
} else if (fs->lfs_seglock == 0) {
--fs->lfs_seglock;
int lfs_seglock(struct lfs *, unsigned long);
uint32_t lfs_seglock; /* segment lock counter */
int lfs_seglock(struct lfs *, unsigned long);
lfs_seglock(fs, 0);
lfs_seglock(fs, SEGM_CLEAN);
error = lfs_seglock(fs, (sync ? SEGM_SYNC : 0));
lfs_seglock(fs, SEGM_SYNC | ((error != 0) ? SEGM_RECLAIM : 0));
if (fs->lfs_seglock > 1) {
lfs_seglock(fs, flags | (do_ckp ? SEGM_CKP : 0));
if (fs->lfs_seglock) {
++fs->lfs_seglock;
fs->lfs_seglock = 1;
return lfs_prelock_held(fs) && fs->lfs_seglock != 0;
if (fs->lfs_seglock == 1) {
--fs->lfs_seglock;
--fs->lfs_seglock;
--fs->lfs_seglock;
KASSERT(fs->lfs_seglock != 0);
int n = fs->lfs_seglock;
while(fs->lfs_seglock)
lfs_seglock(fs, seg_flags);
lfs_seglock(fs, SEGM_CLEAN | SEGM_CKP | SEGM_SYNC);
fs->lfs_seglock = 0;
if (fs->lfs_seglock > 0) {
lfs_seglock(fs, SEGM_CKP);
while (slept && fs->lfs_seglock) {
} else if (fs->lfs_seglock) {
mtsleep(&fs->lfs_seglock,
lfs_seglock(fs, flags);
lfs_seglock(fs, 0);