Lines Matching refs:le
96 struct ubi_ltree_entry *le; in ltree_lookup() local
98 le = rb_entry(p, struct ubi_ltree_entry, rb); in ltree_lookup()
100 if (vol_id < le->vol_id) in ltree_lookup()
102 else if (vol_id > le->vol_id) in ltree_lookup()
105 if (lnum < le->lnum) in ltree_lookup()
107 else if (lnum > le->lnum) in ltree_lookup()
110 return le; in ltree_lookup()
131 struct ubi_ltree_entry *le, *le1, *le_free; in ltree_add_entry() local
133 le = kmalloc(sizeof(struct ubi_ltree_entry), GFP_NOFS); in ltree_add_entry()
134 if (!le) in ltree_add_entry()
137 le->users = 0; in ltree_add_entry()
138 init_rwsem(&le->mutex); in ltree_add_entry()
139 le->vol_id = vol_id; in ltree_add_entry()
140 le->lnum = lnum; in ltree_add_entry()
150 le_free = le; in ltree_add_entry()
151 le = le1; in ltree_add_entry()
179 rb_link_node(&le->rb, parent, p); in ltree_add_entry()
180 rb_insert_color(&le->rb, &ubi->ltree); in ltree_add_entry()
182 le->users += 1; in ltree_add_entry()
186 return le; in ltree_add_entry()
200 struct ubi_ltree_entry *le; in leb_read_lock() local
202 le = ltree_add_entry(ubi, vol_id, lnum); in leb_read_lock()
203 if (IS_ERR(le)) in leb_read_lock()
204 return PTR_ERR(le); in leb_read_lock()
205 down_read(&le->mutex); in leb_read_lock()
217 struct ubi_ltree_entry *le; in leb_read_unlock() local
220 le = ltree_lookup(ubi, vol_id, lnum); in leb_read_unlock()
221 le->users -= 1; in leb_read_unlock()
222 ubi_assert(le->users >= 0); in leb_read_unlock()
223 up_read(&le->mutex); in leb_read_unlock()
224 if (le->users == 0) { in leb_read_unlock()
225 rb_erase(&le->rb, &ubi->ltree); in leb_read_unlock()
226 kfree(le); in leb_read_unlock()
242 struct ubi_ltree_entry *le; in leb_write_lock() local
244 le = ltree_add_entry(ubi, vol_id, lnum); in leb_write_lock()
245 if (IS_ERR(le)) in leb_write_lock()
246 return PTR_ERR(le); in leb_write_lock()
247 down_write(&le->mutex); in leb_write_lock()
264 struct ubi_ltree_entry *le; in leb_write_trylock() local
266 le = ltree_add_entry(ubi, vol_id, lnum); in leb_write_trylock()
267 if (IS_ERR(le)) in leb_write_trylock()
268 return PTR_ERR(le); in leb_write_trylock()
269 if (down_write_trylock(&le->mutex)) in leb_write_trylock()
274 le->users -= 1; in leb_write_trylock()
275 ubi_assert(le->users >= 0); in leb_write_trylock()
276 if (le->users == 0) { in leb_write_trylock()
277 rb_erase(&le->rb, &ubi->ltree); in leb_write_trylock()
278 kfree(le); in leb_write_trylock()
293 struct ubi_ltree_entry *le; in leb_write_unlock() local
296 le = ltree_lookup(ubi, vol_id, lnum); in leb_write_unlock()
297 le->users -= 1; in leb_write_unlock()
298 ubi_assert(le->users >= 0); in leb_write_unlock()
299 up_write(&le->mutex); in leb_write_unlock()
300 if (le->users == 0) { in leb_write_unlock()
301 rb_erase(&le->rb, &ubi->ltree); in leb_write_unlock()
302 kfree(le); in leb_write_unlock()