Lines Matching refs:c
115 static int reserve_space(struct ubifs_info *c, int jhead, int len) in reserve_space() argument
118 struct ubifs_wbuf *wbuf = &c->jheads[jhead].wbuf; in reserve_space()
125 ubifs_assert(!c->ro_media && !c->ro_mount); in reserve_space()
130 if (c->ro_error) { in reserve_space()
135 avail = c->leb_size - wbuf->offs - wbuf->used; in reserve_space()
143 lnum = ubifs_find_free_space(c, len, &offs, squeeze); in reserve_space()
159 lnum = ubifs_garbage_collect(c, 0); in reserve_space()
184 avail = c->leb_size - wbuf->offs - wbuf->used; in reserve_space()
194 err = ubifs_return_leb(c, lnum); in reserve_space()
214 err = ubifs_add_bud_to_log(c, jhead, lnum, offs); in reserve_space()
230 err1 = ubifs_return_leb(c, lnum); in reserve_space()
255 static int write_node(struct ubifs_info *c, int jhead, void *node, int len, in write_node() argument
258 struct ubifs_wbuf *wbuf = &c->jheads[jhead].wbuf; in write_node()
262 *lnum = c->jheads[jhead].wbuf.lnum; in write_node()
263 *offs = c->jheads[jhead].wbuf.offs + c->jheads[jhead].wbuf.used; in write_node()
267 ubifs_prepare_node(c, node, len, 0); in write_node()
286 static int write_head(struct ubifs_info *c, int jhead, void *buf, int len, in write_head() argument
290 struct ubifs_wbuf *wbuf = &c->jheads[jhead].wbuf; in write_head()
294 *lnum = c->jheads[jhead].wbuf.lnum; in write_head()
295 *offs = c->jheads[jhead].wbuf.offs + c->jheads[jhead].wbuf.used; in write_head()
323 static int make_reservation(struct ubifs_info *c, int jhead, int len) in make_reservation() argument
328 down_read(&c->commit_sem); in make_reservation()
329 err = reserve_space(c, jhead, len); in make_reservation()
332 up_read(&c->commit_sem); in make_reservation()
366 ubifs_err(c, "stuck in space allocation"); in make_reservation()
370 ubifs_warn(c, "too many space allocation re-tries (%d)", in make_reservation()
377 err = ubifs_run_commit(c); in make_reservation()
383 ubifs_err(c, "cannot reserve %d bytes in jhead %d, error %d", in make_reservation()
387 down_write(&c->commit_sem); in make_reservation()
389 ubifs_dump_budg(c, &c->bi); in make_reservation()
390 ubifs_dump_lprops(c); in make_reservation()
391 cmt_retries = dbg_check_lprops(c); in make_reservation()
392 up_write(&c->commit_sem); in make_reservation()
406 static inline void release_head(struct ubifs_info *c, int jhead) in release_head() argument
408 mutex_unlock(&c->jheads[jhead].wbuf.io_mutex); in release_head()
418 static void finish_reservation(struct ubifs_info *c) in finish_reservation() argument
420 up_read(&c->commit_sem); in finish_reservation()
457 static void pack_inode(struct ubifs_info *c, struct ubifs_ino_node *ino, in pack_inode() argument
464 ino_key_init_flash(c, &ino->key, inode->i_ino); in pack_inode()
494 ubifs_prep_grp_node(c, ino, UBIFS_INO_NODE_SZ + data_len, last); in pack_inode()
507 static void mark_inode_clean(struct ubifs_info *c, struct ubifs_inode *ui) in mark_inode_clean() argument
510 ubifs_release_dirty_inode_budget(c, ui); in mark_inode_clean()
541 int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir, in ubifs_jnl_update() argument
584 err = make_reservation(c, BASEHD, len); in ubifs_jnl_update()
590 dent_key_init(c, &dent_key, dir->i_ino, nm); in ubifs_jnl_update()
593 xent_key_init(c, &dent_key, dir->i_ino, nm); in ubifs_jnl_update()
596 key_write(c, &dent_key, dent->key); in ubifs_jnl_update()
603 ubifs_prep_grp_node(c, dent, dlen, 0); in ubifs_jnl_update()
606 pack_inode(c, ino, inode, 0); in ubifs_jnl_update()
608 pack_inode(c, ino, dir, 1); in ubifs_jnl_update()
611 err = ubifs_add_orphan(c, inode->i_ino); in ubifs_jnl_update()
613 release_head(c, BASEHD); in ubifs_jnl_update()
616 ui->del_cmtno = c->cmt_no; in ubifs_jnl_update()
619 err = write_head(c, BASEHD, dent, len, &lnum, &dent_offs, sync); in ubifs_jnl_update()
623 struct ubifs_wbuf *wbuf = &c->jheads[BASEHD].wbuf; in ubifs_jnl_update()
628 release_head(c, BASEHD); in ubifs_jnl_update()
632 err = ubifs_tnc_remove_nm(c, &dent_key, nm); in ubifs_jnl_update()
635 err = ubifs_add_dirt(c, lnum, dlen); in ubifs_jnl_update()
637 err = ubifs_tnc_add_nm(c, &dent_key, lnum, dent_offs, dlen, nm); in ubifs_jnl_update()
647 ino_key_init(c, &ino_key, inode->i_ino); in ubifs_jnl_update()
649 err = ubifs_tnc_add(c, &ino_key, lnum, ino_offs, ilen); in ubifs_jnl_update()
653 ino_key_init(c, &ino_key, dir->i_ino); in ubifs_jnl_update()
655 err = ubifs_tnc_add(c, &ino_key, lnum, ino_offs, in ubifs_jnl_update()
660 finish_reservation(c); in ubifs_jnl_update()
664 mark_inode_clean(c, ui); in ubifs_jnl_update()
665 mark_inode_clean(c, host_ui); in ubifs_jnl_update()
669 finish_reservation(c); in ubifs_jnl_update()
675 release_head(c, BASEHD); in ubifs_jnl_update()
678 ubifs_ro_mode(c, err); in ubifs_jnl_update()
680 ubifs_delete_orphan(c, inode->i_ino); in ubifs_jnl_update()
681 finish_reservation(c); in ubifs_jnl_update()
696 int ubifs_jnl_write_data(struct ubifs_info *c, const struct inode *inode, in ubifs_jnl_write_data() argument
705 (unsigned long)key_inum(c, key), key_block(c, key), len); in ubifs_jnl_write_data()
718 mutex_lock(&c->write_reserve_mutex); in ubifs_jnl_write_data()
719 data = c->write_reserve_buf; in ubifs_jnl_write_data()
723 key_write(c, key, &data->key); in ubifs_jnl_write_data()
734 ubifs_compress(c, buf, len, &data->data, &out_len, &compr_type); in ubifs_jnl_write_data()
741 err = make_reservation(c, DATAHD, dlen); in ubifs_jnl_write_data()
745 err = write_node(c, DATAHD, data, dlen, &lnum, &offs); in ubifs_jnl_write_data()
748 ubifs_wbuf_add_ino_nolock(&c->jheads[DATAHD].wbuf, key_inum(c, key)); in ubifs_jnl_write_data()
749 release_head(c, DATAHD); in ubifs_jnl_write_data()
751 err = ubifs_tnc_add(c, key, lnum, offs, dlen); in ubifs_jnl_write_data()
755 finish_reservation(c); in ubifs_jnl_write_data()
757 mutex_unlock(&c->write_reserve_mutex); in ubifs_jnl_write_data()
763 release_head(c, DATAHD); in ubifs_jnl_write_data()
765 ubifs_ro_mode(c, err); in ubifs_jnl_write_data()
766 finish_reservation(c); in ubifs_jnl_write_data()
769 mutex_unlock(&c->write_reserve_mutex); in ubifs_jnl_write_data()
784 int ubifs_jnl_write_inode(struct ubifs_info *c, const struct inode *inode) in ubifs_jnl_write_inode() argument
806 err = make_reservation(c, BASEHD, len); in ubifs_jnl_write_inode()
810 pack_inode(c, ino, inode, 1); in ubifs_jnl_write_inode()
811 err = write_head(c, BASEHD, ino, len, &lnum, &offs, sync); in ubifs_jnl_write_inode()
815 ubifs_wbuf_add_ino_nolock(&c->jheads[BASEHD].wbuf, in ubifs_jnl_write_inode()
817 release_head(c, BASEHD); in ubifs_jnl_write_inode()
820 err = ubifs_tnc_remove_ino(c, inode->i_ino); in ubifs_jnl_write_inode()
823 ubifs_delete_orphan(c, inode->i_ino); in ubifs_jnl_write_inode()
824 err = ubifs_add_dirt(c, lnum, len); in ubifs_jnl_write_inode()
828 ino_key_init(c, &key, inode->i_ino); in ubifs_jnl_write_inode()
829 err = ubifs_tnc_add(c, &key, lnum, offs, len); in ubifs_jnl_write_inode()
834 finish_reservation(c); in ubifs_jnl_write_inode()
842 release_head(c, BASEHD); in ubifs_jnl_write_inode()
844 ubifs_ro_mode(c, err); in ubifs_jnl_write_inode()
845 finish_reservation(c); in ubifs_jnl_write_inode()
880 int ubifs_jnl_delete_inode(struct ubifs_info *c, const struct inode *inode) in ubifs_jnl_delete_inode() argument
887 if (ui->del_cmtno != c->cmt_no) in ubifs_jnl_delete_inode()
889 return ubifs_jnl_write_inode(c, inode); in ubifs_jnl_delete_inode()
891 down_read(&c->commit_sem); in ubifs_jnl_delete_inode()
896 if (ui->del_cmtno != c->cmt_no) { in ubifs_jnl_delete_inode()
897 up_read(&c->commit_sem); in ubifs_jnl_delete_inode()
898 return ubifs_jnl_write_inode(c, inode); in ubifs_jnl_delete_inode()
901 err = ubifs_tnc_remove_ino(c, inode->i_ino); in ubifs_jnl_delete_inode()
903 ubifs_ro_mode(c, err); in ubifs_jnl_delete_inode()
905 ubifs_delete_orphan(c, inode->i_ino); in ubifs_jnl_delete_inode()
906 up_read(&c->commit_sem); in ubifs_jnl_delete_inode()
924 int ubifs_jnl_rename(struct ubifs_info *c, const struct inode *old_dir, in ubifs_jnl_rename() argument
968 err = make_reservation(c, BASEHD, len); in ubifs_jnl_rename()
974 dent_key_init_flash(c, &dent->key, new_dir->i_ino, &new_dentry->d_name); in ubifs_jnl_rename()
981 ubifs_prep_grp_node(c, dent, dlen1, 0); in ubifs_jnl_rename()
986 dent_key_init_flash(c, &dent2->key, old_dir->i_ino, in ubifs_jnl_rename()
994 ubifs_prep_grp_node(c, dent2, dlen2, 0); in ubifs_jnl_rename()
998 pack_inode(c, p, new_inode, 0); in ubifs_jnl_rename()
1003 pack_inode(c, p, old_dir, 1); in ubifs_jnl_rename()
1005 pack_inode(c, p, old_dir, 0); in ubifs_jnl_rename()
1007 pack_inode(c, p, new_dir, 1); in ubifs_jnl_rename()
1011 err = ubifs_add_orphan(c, new_inode->i_ino); in ubifs_jnl_rename()
1013 release_head(c, BASEHD); in ubifs_jnl_rename()
1016 new_ui->del_cmtno = c->cmt_no; in ubifs_jnl_rename()
1019 err = write_head(c, BASEHD, dent, len, &lnum, &offs, sync); in ubifs_jnl_rename()
1023 struct ubifs_wbuf *wbuf = &c->jheads[BASEHD].wbuf; in ubifs_jnl_rename()
1028 ubifs_wbuf_add_ino_nolock(&c->jheads[BASEHD].wbuf, in ubifs_jnl_rename()
1031 release_head(c, BASEHD); in ubifs_jnl_rename()
1033 dent_key_init(c, &key, new_dir->i_ino, &new_dentry->d_name); in ubifs_jnl_rename()
1034 err = ubifs_tnc_add_nm(c, &key, lnum, offs, dlen1, &new_dentry->d_name); in ubifs_jnl_rename()
1038 err = ubifs_add_dirt(c, lnum, dlen2); in ubifs_jnl_rename()
1042 dent_key_init(c, &key, old_dir->i_ino, &old_dentry->d_name); in ubifs_jnl_rename()
1043 err = ubifs_tnc_remove_nm(c, &key, &old_dentry->d_name); in ubifs_jnl_rename()
1049 ino_key_init(c, &key, new_inode->i_ino); in ubifs_jnl_rename()
1050 err = ubifs_tnc_add(c, &key, lnum, offs, ilen); in ubifs_jnl_rename()
1056 ino_key_init(c, &key, old_dir->i_ino); in ubifs_jnl_rename()
1057 err = ubifs_tnc_add(c, &key, lnum, offs, plen); in ubifs_jnl_rename()
1063 ino_key_init(c, &key, new_dir->i_ino); in ubifs_jnl_rename()
1064 err = ubifs_tnc_add(c, &key, lnum, offs, plen); in ubifs_jnl_rename()
1069 finish_reservation(c); in ubifs_jnl_rename()
1071 mark_inode_clean(c, new_ui); in ubifs_jnl_rename()
1076 mark_inode_clean(c, ubifs_inode(old_dir)); in ubifs_jnl_rename()
1078 mark_inode_clean(c, ubifs_inode(new_dir)); in ubifs_jnl_rename()
1083 release_head(c, BASEHD); in ubifs_jnl_rename()
1085 ubifs_ro_mode(c, err); in ubifs_jnl_rename()
1087 ubifs_delete_orphan(c, new_inode->i_ino); in ubifs_jnl_rename()
1089 finish_reservation(c); in ubifs_jnl_rename()
1103 static int recomp_data_node(const struct ubifs_info *c, in recomp_data_node() argument
1116 err = ubifs_decompress(c, &dn->data, len, buf, &out_len, compr_type); in recomp_data_node()
1120 ubifs_compress(c, buf, *new_len, &dn->data, &out_len, &compr_type); in recomp_data_node()
1145 int ubifs_jnl_truncate(struct ubifs_info *c, const struct inode *inode, in ubifs_jnl_truncate() argument
1181 data_key_init(c, &key, inum, blk); in ubifs_jnl_truncate()
1183 err = ubifs_tnc_lookup(c, &key, dn); in ubifs_jnl_truncate()
1195 err = recomp_data_node(c, dn, &dlen); in ubifs_jnl_truncate()
1211 err = make_reservation(c, BASEHD, len); in ubifs_jnl_truncate()
1215 pack_inode(c, ino, inode, 0); in ubifs_jnl_truncate()
1216 ubifs_prep_grp_node(c, trun, UBIFS_TRUN_NODE_SZ, dlen ? 0 : 1); in ubifs_jnl_truncate()
1218 ubifs_prep_grp_node(c, dn, dlen, 1); in ubifs_jnl_truncate()
1220 err = write_head(c, BASEHD, ino, len, &lnum, &offs, sync); in ubifs_jnl_truncate()
1224 ubifs_wbuf_add_ino_nolock(&c->jheads[BASEHD].wbuf, inum); in ubifs_jnl_truncate()
1225 release_head(c, BASEHD); in ubifs_jnl_truncate()
1229 err = ubifs_tnc_add(c, &key, lnum, sz, dlen); in ubifs_jnl_truncate()
1234 ino_key_init(c, &key, inum); in ubifs_jnl_truncate()
1235 err = ubifs_tnc_add(c, &key, lnum, offs, UBIFS_INO_NODE_SZ); in ubifs_jnl_truncate()
1239 err = ubifs_add_dirt(c, lnum, UBIFS_TRUN_NODE_SZ); in ubifs_jnl_truncate()
1245 data_key_init(c, &key, inum, blk); in ubifs_jnl_truncate()
1249 data_key_init(c, &to_key, inum, blk); in ubifs_jnl_truncate()
1251 err = ubifs_tnc_remove_range(c, &key, &to_key); in ubifs_jnl_truncate()
1255 finish_reservation(c); in ubifs_jnl_truncate()
1259 mark_inode_clean(c, ui); in ubifs_jnl_truncate()
1264 release_head(c, BASEHD); in ubifs_jnl_truncate()
1266 ubifs_ro_mode(c, err); in ubifs_jnl_truncate()
1267 finish_reservation(c); in ubifs_jnl_truncate()
1286 int ubifs_jnl_delete_xattr(struct ubifs_info *c, const struct inode *host, in ubifs_jnl_delete_xattr() argument
1316 err = make_reservation(c, BASEHD, len); in ubifs_jnl_delete_xattr()
1323 xent_key_init(c, &xent_key, host->i_ino, nm); in ubifs_jnl_delete_xattr()
1324 key_write(c, &xent_key, xent->key); in ubifs_jnl_delete_xattr()
1331 ubifs_prep_grp_node(c, xent, xlen, 0); in ubifs_jnl_delete_xattr()
1334 pack_inode(c, ino, inode, 0); in ubifs_jnl_delete_xattr()
1336 pack_inode(c, ino, host, 1); in ubifs_jnl_delete_xattr()
1338 err = write_head(c, BASEHD, xent, len, &lnum, &xent_offs, sync); in ubifs_jnl_delete_xattr()
1340 ubifs_wbuf_add_ino_nolock(&c->jheads[BASEHD].wbuf, host->i_ino); in ubifs_jnl_delete_xattr()
1341 release_head(c, BASEHD); in ubifs_jnl_delete_xattr()
1347 err = ubifs_tnc_remove_nm(c, &xent_key, nm); in ubifs_jnl_delete_xattr()
1350 err = ubifs_add_dirt(c, lnum, xlen); in ubifs_jnl_delete_xattr()
1358 lowest_ino_key(c, &key1, inode->i_ino); in ubifs_jnl_delete_xattr()
1359 highest_ino_key(c, &key2, inode->i_ino); in ubifs_jnl_delete_xattr()
1360 err = ubifs_tnc_remove_range(c, &key1, &key2); in ubifs_jnl_delete_xattr()
1363 err = ubifs_add_dirt(c, lnum, UBIFS_INO_NODE_SZ); in ubifs_jnl_delete_xattr()
1368 ino_key_init(c, &key1, host->i_ino); in ubifs_jnl_delete_xattr()
1369 err = ubifs_tnc_add(c, &key1, lnum, xent_offs + len - hlen, hlen); in ubifs_jnl_delete_xattr()
1373 finish_reservation(c); in ubifs_jnl_delete_xattr()
1377 mark_inode_clean(c, host_ui); in ubifs_jnl_delete_xattr()
1381 ubifs_ro_mode(c, err); in ubifs_jnl_delete_xattr()
1382 finish_reservation(c); in ubifs_jnl_delete_xattr()
1399 int ubifs_jnl_change_xattr(struct ubifs_info *c, const struct inode *inode, in ubifs_jnl_change_xattr() argument
1423 err = make_reservation(c, BASEHD, aligned_len); in ubifs_jnl_change_xattr()
1427 pack_inode(c, ino, host, 0); in ubifs_jnl_change_xattr()
1428 pack_inode(c, (void *)ino + aligned_len1, inode, 1); in ubifs_jnl_change_xattr()
1430 err = write_head(c, BASEHD, ino, aligned_len, &lnum, &offs, 0); in ubifs_jnl_change_xattr()
1432 struct ubifs_wbuf *wbuf = &c->jheads[BASEHD].wbuf; in ubifs_jnl_change_xattr()
1437 release_head(c, BASEHD); in ubifs_jnl_change_xattr()
1441 ino_key_init(c, &key, host->i_ino); in ubifs_jnl_change_xattr()
1442 err = ubifs_tnc_add(c, &key, lnum, offs, len1); in ubifs_jnl_change_xattr()
1446 ino_key_init(c, &key, inode->i_ino); in ubifs_jnl_change_xattr()
1447 err = ubifs_tnc_add(c, &key, lnum, offs + aligned_len1, len2); in ubifs_jnl_change_xattr()
1451 finish_reservation(c); in ubifs_jnl_change_xattr()
1455 mark_inode_clean(c, host_ui); in ubifs_jnl_change_xattr()
1460 ubifs_ro_mode(c, err); in ubifs_jnl_change_xattr()
1461 finish_reservation(c); in ubifs_jnl_change_xattr()