• Home
  • Raw
  • Download

Lines Matching refs:c

81 static void ubifs_add_auth_dirt(struct ubifs_info *c, int lnum)  in ubifs_add_auth_dirt()  argument
83 if (ubifs_authenticated(c)) in ubifs_add_auth_dirt()
84 ubifs_add_dirt(c, lnum, ubifs_auth_node_sz(c)); in ubifs_add_auth_dirt()
98 static int reserve_space(struct ubifs_info *c, int jhead, int len) in reserve_space() argument
101 struct ubifs_wbuf *wbuf = &c->jheads[jhead].wbuf; in reserve_space()
108 ubifs_assert(c, !c->ro_media && !c->ro_mount); in reserve_space()
113 if (c->ro_error) { in reserve_space()
118 avail = c->leb_size - wbuf->offs - wbuf->used; in reserve_space()
126 lnum = ubifs_find_free_space(c, len, &offs, squeeze); in reserve_space()
142 lnum = ubifs_garbage_collect(c, 0); in reserve_space()
167 avail = c->leb_size - wbuf->offs - wbuf->used; in reserve_space()
177 err = ubifs_return_leb(c, lnum); in reserve_space()
197 err = ubifs_add_bud_to_log(c, jhead, lnum, offs); in reserve_space()
212 ubifs_assert(c, err < 0); in reserve_space()
213 err1 = ubifs_return_leb(c, lnum); in reserve_space()
225 static int ubifs_hash_nodes(struct ubifs_info *c, void *node, in ubifs_hash_nodes() argument
228 int auth_node_size = ubifs_auth_node_sz(c); in ubifs_hash_nodes()
235 ubifs_assert(c, len >= auth_node_size); in ubifs_hash_nodes()
240 ubifs_assert(c, len > nodelen); in ubifs_hash_nodes()
241 ubifs_assert(c, ch->magic == cpu_to_le32(UBIFS_NODE_MAGIC)); in ubifs_hash_nodes()
243 err = ubifs_shash_update(c, hash, (void *)node, nodelen); in ubifs_hash_nodes()
251 return ubifs_prepare_auth_node(c, node, hash); in ubifs_hash_nodes()
268 static int write_head(struct ubifs_info *c, int jhead, void *buf, int len, in write_head() argument
272 struct ubifs_wbuf *wbuf = &c->jheads[jhead].wbuf; in write_head()
274 ubifs_assert(c, jhead != GCHD); in write_head()
276 *lnum = c->jheads[jhead].wbuf.lnum; in write_head()
277 *offs = c->jheads[jhead].wbuf.offs + c->jheads[jhead].wbuf.used; in write_head()
281 if (ubifs_authenticated(c)) { in write_head()
282 err = ubifs_hash_nodes(c, buf, len, c->jheads[jhead].log_hash); in write_head()
311 static int make_reservation(struct ubifs_info *c, int jhead, int len) in make_reservation() argument
316 down_read(&c->commit_sem); in make_reservation()
317 err = reserve_space(c, jhead, len); in make_reservation()
321 up_read(&c->commit_sem); in make_reservation()
355 ubifs_err(c, "stuck in space allocation"); in make_reservation()
359 ubifs_warn(c, "too many space allocation re-tries (%d)", in make_reservation()
366 err = ubifs_run_commit(c); in make_reservation()
372 ubifs_err(c, "cannot reserve %d bytes in jhead %d, error %d", in make_reservation()
376 down_write(&c->commit_sem); in make_reservation()
378 ubifs_dump_budg(c, &c->bi); in make_reservation()
379 ubifs_dump_lprops(c); in make_reservation()
380 cmt_retries = dbg_check_lprops(c); in make_reservation()
381 up_write(&c->commit_sem); in make_reservation()
395 static inline void release_head(struct ubifs_info *c, int jhead) in release_head() argument
397 mutex_unlock(&c->jheads[jhead].wbuf.io_mutex); in release_head()
407 static void finish_reservation(struct ubifs_info *c) in finish_reservation() argument
409 up_read(&c->commit_sem); in finish_reservation()
446 static void pack_inode(struct ubifs_info *c, struct ubifs_ino_node *ino, in pack_inode() argument
453 ino_key_init_flash(c, &ino->key, inode->i_ino); in pack_inode()
483 ubifs_prep_grp_node(c, ino, UBIFS_INO_NODE_SZ + data_len, last); in pack_inode()
496 static void mark_inode_clean(struct ubifs_info *c, struct ubifs_inode *ui) in mark_inode_clean() argument
499 ubifs_release_dirty_inode_budget(c, ui); in mark_inode_clean()
503 static void set_dent_cookie(struct ubifs_info *c, struct ubifs_dent_node *dent) in set_dent_cookie() argument
505 if (c->double_hash) in set_dent_cookie()
538 int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir, in ubifs_jnl_update() argument
554 ubifs_assert(c, mutex_is_locked(&host_ui->ui_mutex)); in ubifs_jnl_update()
575 if (ubifs_authenticated(c)) in ubifs_jnl_update()
576 len += ALIGN(host_ui->data_len, 8) + ubifs_auth_node_sz(c); in ubifs_jnl_update()
585 err = make_reservation(c, BASEHD, len); in ubifs_jnl_update()
592 dent_key_init_hash(c, &dent_key, dir->i_ino, nm->hash); in ubifs_jnl_update()
594 dent_key_init(c, &dent_key, dir->i_ino, nm); in ubifs_jnl_update()
597 xent_key_init(c, &dent_key, dir->i_ino, nm); in ubifs_jnl_update()
600 key_write(c, &dent_key, dent->key); in ubifs_jnl_update()
606 set_dent_cookie(c, dent); in ubifs_jnl_update()
609 ubifs_prep_grp_node(c, dent, dlen, 0); in ubifs_jnl_update()
610 err = ubifs_node_calc_hash(c, dent, hash_dent); in ubifs_jnl_update()
615 pack_inode(c, ino, inode, 0); in ubifs_jnl_update()
616 err = ubifs_node_calc_hash(c, ino, hash_ino); in ubifs_jnl_update()
621 pack_inode(c, ino, dir, 1); in ubifs_jnl_update()
622 err = ubifs_node_calc_hash(c, ino, hash_ino_host); in ubifs_jnl_update()
627 err = ubifs_add_orphan(c, inode->i_ino); in ubifs_jnl_update()
629 release_head(c, BASEHD); in ubifs_jnl_update()
632 ui->del_cmtno = c->cmt_no; in ubifs_jnl_update()
635 err = write_head(c, BASEHD, dent, len, &lnum, &dent_offs, sync); in ubifs_jnl_update()
639 struct ubifs_wbuf *wbuf = &c->jheads[BASEHD].wbuf; in ubifs_jnl_update()
644 release_head(c, BASEHD); in ubifs_jnl_update()
646 ubifs_add_auth_dirt(c, lnum); in ubifs_jnl_update()
650 err = ubifs_tnc_remove_dh(c, &dent_key, nm->minor_hash); in ubifs_jnl_update()
652 err = ubifs_tnc_remove_nm(c, &dent_key, nm); in ubifs_jnl_update()
655 err = ubifs_add_dirt(c, lnum, dlen); in ubifs_jnl_update()
657 err = ubifs_tnc_add_nm(c, &dent_key, lnum, dent_offs, dlen, in ubifs_jnl_update()
668 ino_key_init(c, &ino_key, inode->i_ino); in ubifs_jnl_update()
670 err = ubifs_tnc_add(c, &ino_key, lnum, ino_offs, ilen, hash_ino); in ubifs_jnl_update()
674 ino_key_init(c, &ino_key, dir->i_ino); in ubifs_jnl_update()
676 err = ubifs_tnc_add(c, &ino_key, lnum, ino_offs, in ubifs_jnl_update()
681 finish_reservation(c); in ubifs_jnl_update()
690 mark_inode_clean(c, ui); in ubifs_jnl_update()
691 mark_inode_clean(c, host_ui); in ubifs_jnl_update()
695 finish_reservation(c); in ubifs_jnl_update()
701 release_head(c, BASEHD); in ubifs_jnl_update()
704 ubifs_ro_mode(c, err); in ubifs_jnl_update()
706 ubifs_delete_orphan(c, inode->i_ino); in ubifs_jnl_update()
707 finish_reservation(c); in ubifs_jnl_update()
722 int ubifs_jnl_write_data(struct ubifs_info *c, const struct inode *inode, in ubifs_jnl_write_data() argument
734 (unsigned long)key_inum(c, key), key_block(c, key), len); in ubifs_jnl_write_data()
735 ubifs_assert(c, len <= UBIFS_BLOCK_SIZE); in ubifs_jnl_write_data()
740 auth_len = ubifs_auth_node_sz(c); in ubifs_jnl_write_data()
752 mutex_lock(&c->write_reserve_mutex); in ubifs_jnl_write_data()
753 data = c->write_reserve_buf; in ubifs_jnl_write_data()
757 key_write(c, key, &data->key); in ubifs_jnl_write_data()
767 ubifs_compress(c, buf, len, &data->data, &compr_len, &compr_type); in ubifs_jnl_write_data()
768 ubifs_assert(c, compr_len <= UBIFS_BLOCK_SIZE); in ubifs_jnl_write_data()
771 err = ubifs_encrypt(inode, data, compr_len, &out_len, key_block(c, key)); in ubifs_jnl_write_data()
781 if (ubifs_authenticated(c)) in ubifs_jnl_write_data()
789 err = make_reservation(c, DATAHD, write_len); in ubifs_jnl_write_data()
793 ubifs_prepare_node(c, data, dlen, 0); in ubifs_jnl_write_data()
794 err = write_head(c, DATAHD, data, write_len, &lnum, &offs, 0); in ubifs_jnl_write_data()
798 err = ubifs_node_calc_hash(c, data, hash); in ubifs_jnl_write_data()
802 ubifs_wbuf_add_ino_nolock(&c->jheads[DATAHD].wbuf, key_inum(c, key)); in ubifs_jnl_write_data()
803 release_head(c, DATAHD); in ubifs_jnl_write_data()
805 ubifs_add_auth_dirt(c, lnum); in ubifs_jnl_write_data()
807 err = ubifs_tnc_add(c, key, lnum, offs, dlen, hash); in ubifs_jnl_write_data()
811 finish_reservation(c); in ubifs_jnl_write_data()
813 mutex_unlock(&c->write_reserve_mutex); in ubifs_jnl_write_data()
819 release_head(c, DATAHD); in ubifs_jnl_write_data()
821 ubifs_ro_mode(c, err); in ubifs_jnl_write_data()
822 finish_reservation(c); in ubifs_jnl_write_data()
825 mutex_unlock(&c->write_reserve_mutex); in ubifs_jnl_write_data()
840 int ubifs_jnl_write_inode(struct ubifs_info *c, const struct inode *inode) in ubifs_jnl_write_inode() argument
863 if (ubifs_authenticated(c)) in ubifs_jnl_write_inode()
864 write_len += ALIGN(ilen, 8) + ubifs_auth_node_sz(c); in ubifs_jnl_write_inode()
873 err = make_reservation(c, BASEHD, write_len); in ubifs_jnl_write_inode()
883 if (ui->xattr_cnt >= ubifs_xattr_max_cnt(c)) { in ubifs_jnl_write_inode()
884 ubifs_err(c, "Cannot delete inode, it has too much xattrs!"); in ubifs_jnl_write_inode()
888 lowest_xent_key(c, &key, inode->i_ino); in ubifs_jnl_write_inode()
890 xent = ubifs_tnc_next_ent(c, &key, &nm); in ubifs_jnl_write_inode()
902 xino = ubifs_iget(c->vfs_sb, le64_to_cpu(xent->inum)); in ubifs_jnl_write_inode()
905 ubifs_err(c, "dead directory entry '%s', error %d", in ubifs_jnl_write_inode()
907 ubifs_ro_mode(c, err); in ubifs_jnl_write_inode()
910 ubifs_assert(c, ubifs_inode(xino)->xattr); in ubifs_jnl_write_inode()
913 pack_inode(c, ino, xino, 0); in ubifs_jnl_write_inode()
919 key_read(c, &xent->key, &key); in ubifs_jnl_write_inode()
924 pack_inode(c, ino, inode, 1); in ubifs_jnl_write_inode()
925 err = ubifs_node_calc_hash(c, ino, hash); in ubifs_jnl_write_inode()
929 err = write_head(c, BASEHD, ino_start, write_len, &lnum, &offs, sync); in ubifs_jnl_write_inode()
933 ubifs_wbuf_add_ino_nolock(&c->jheads[BASEHD].wbuf, in ubifs_jnl_write_inode()
935 release_head(c, BASEHD); in ubifs_jnl_write_inode()
937 ubifs_add_auth_dirt(c, lnum); in ubifs_jnl_write_inode()
940 err = ubifs_tnc_remove_ino(c, inode->i_ino); in ubifs_jnl_write_inode()
943 ubifs_delete_orphan(c, inode->i_ino); in ubifs_jnl_write_inode()
944 err = ubifs_add_dirt(c, lnum, write_len); in ubifs_jnl_write_inode()
948 ino_key_init(c, &key, inode->i_ino); in ubifs_jnl_write_inode()
949 err = ubifs_tnc_add(c, &key, lnum, offs, ilen, hash); in ubifs_jnl_write_inode()
954 finish_reservation(c); in ubifs_jnl_write_inode()
962 release_head(c, BASEHD); in ubifs_jnl_write_inode()
964 ubifs_ro_mode(c, err); in ubifs_jnl_write_inode()
965 finish_reservation(c); in ubifs_jnl_write_inode()
1000 int ubifs_jnl_delete_inode(struct ubifs_info *c, const struct inode *inode) in ubifs_jnl_delete_inode() argument
1005 ubifs_assert(c, inode->i_nlink == 0); in ubifs_jnl_delete_inode()
1007 if (ui->xattr_cnt || ui->del_cmtno != c->cmt_no) in ubifs_jnl_delete_inode()
1009 return ubifs_jnl_write_inode(c, inode); in ubifs_jnl_delete_inode()
1011 down_read(&c->commit_sem); in ubifs_jnl_delete_inode()
1016 if (ui->del_cmtno != c->cmt_no) { in ubifs_jnl_delete_inode()
1017 up_read(&c->commit_sem); in ubifs_jnl_delete_inode()
1018 return ubifs_jnl_write_inode(c, inode); in ubifs_jnl_delete_inode()
1021 err = ubifs_tnc_remove_ino(c, inode->i_ino); in ubifs_jnl_delete_inode()
1023 ubifs_ro_mode(c, err); in ubifs_jnl_delete_inode()
1025 ubifs_delete_orphan(c, inode->i_ino); in ubifs_jnl_delete_inode()
1026 up_read(&c->commit_sem); in ubifs_jnl_delete_inode()
1046 int ubifs_jnl_xrename(struct ubifs_info *c, const struct inode *fst_dir, in ubifs_jnl_xrename() argument
1064 ubifs_assert(c, ubifs_inode(fst_dir)->data_len == 0); in ubifs_jnl_xrename()
1065 ubifs_assert(c, ubifs_inode(snd_dir)->data_len == 0); in ubifs_jnl_xrename()
1066 ubifs_assert(c, mutex_is_locked(&ubifs_inode(fst_dir)->ui_mutex)); in ubifs_jnl_xrename()
1067 ubifs_assert(c, mutex_is_locked(&ubifs_inode(snd_dir)->ui_mutex)); in ubifs_jnl_xrename()
1078 len += ubifs_auth_node_sz(c); in ubifs_jnl_xrename()
1085 err = make_reservation(c, BASEHD, len); in ubifs_jnl_xrename()
1091 dent_key_init_flash(c, &dent1->key, snd_dir->i_ino, snd_nm); in ubifs_jnl_xrename()
1097 set_dent_cookie(c, dent1); in ubifs_jnl_xrename()
1099 ubifs_prep_grp_node(c, dent1, dlen1, 0); in ubifs_jnl_xrename()
1100 err = ubifs_node_calc_hash(c, dent1, hash_dent1); in ubifs_jnl_xrename()
1107 dent_key_init_flash(c, &dent2->key, fst_dir->i_ino, fst_nm); in ubifs_jnl_xrename()
1113 set_dent_cookie(c, dent2); in ubifs_jnl_xrename()
1115 ubifs_prep_grp_node(c, dent2, dlen2, 0); in ubifs_jnl_xrename()
1116 err = ubifs_node_calc_hash(c, dent2, hash_dent2); in ubifs_jnl_xrename()
1122 pack_inode(c, p, fst_dir, 1); in ubifs_jnl_xrename()
1123 err = ubifs_node_calc_hash(c, p, hash_p1); in ubifs_jnl_xrename()
1127 pack_inode(c, p, fst_dir, 0); in ubifs_jnl_xrename()
1128 err = ubifs_node_calc_hash(c, p, hash_p1); in ubifs_jnl_xrename()
1132 pack_inode(c, p, snd_dir, 1); in ubifs_jnl_xrename()
1133 err = ubifs_node_calc_hash(c, p, hash_p2); in ubifs_jnl_xrename()
1138 err = write_head(c, BASEHD, dent1, len, &lnum, &offs, sync); in ubifs_jnl_xrename()
1142 struct ubifs_wbuf *wbuf = &c->jheads[BASEHD].wbuf; in ubifs_jnl_xrename()
1147 release_head(c, BASEHD); in ubifs_jnl_xrename()
1149 ubifs_add_auth_dirt(c, lnum); in ubifs_jnl_xrename()
1151 dent_key_init(c, &key, snd_dir->i_ino, snd_nm); in ubifs_jnl_xrename()
1152 err = ubifs_tnc_add_nm(c, &key, lnum, offs, dlen1, hash_dent1, snd_nm); in ubifs_jnl_xrename()
1157 dent_key_init(c, &key, fst_dir->i_ino, fst_nm); in ubifs_jnl_xrename()
1158 err = ubifs_tnc_add_nm(c, &key, lnum, offs, dlen2, hash_dent2, fst_nm); in ubifs_jnl_xrename()
1164 ino_key_init(c, &key, fst_dir->i_ino); in ubifs_jnl_xrename()
1165 err = ubifs_tnc_add(c, &key, lnum, offs, plen, hash_p1); in ubifs_jnl_xrename()
1171 ino_key_init(c, &key, snd_dir->i_ino); in ubifs_jnl_xrename()
1172 err = ubifs_tnc_add(c, &key, lnum, offs, plen, hash_p2); in ubifs_jnl_xrename()
1177 finish_reservation(c); in ubifs_jnl_xrename()
1179 mark_inode_clean(c, ubifs_inode(fst_dir)); in ubifs_jnl_xrename()
1181 mark_inode_clean(c, ubifs_inode(snd_dir)); in ubifs_jnl_xrename()
1186 release_head(c, BASEHD); in ubifs_jnl_xrename()
1188 ubifs_ro_mode(c, err); in ubifs_jnl_xrename()
1189 finish_reservation(c); in ubifs_jnl_xrename()
1209 int ubifs_jnl_rename(struct ubifs_info *c, const struct inode *old_dir, in ubifs_jnl_rename() argument
1231 ubifs_assert(c, ubifs_inode(old_dir)->data_len == 0); in ubifs_jnl_rename()
1232 ubifs_assert(c, ubifs_inode(new_dir)->data_len == 0); in ubifs_jnl_rename()
1233 ubifs_assert(c, mutex_is_locked(&ubifs_inode(old_dir)->ui_mutex)); in ubifs_jnl_rename()
1234 ubifs_assert(c, mutex_is_locked(&ubifs_inode(new_dir)->ui_mutex)); in ubifs_jnl_rename()
1240 ubifs_assert(c, mutex_is_locked(&new_ui->ui_mutex)); in ubifs_jnl_rename()
1253 len += ubifs_auth_node_sz(c); in ubifs_jnl_rename()
1260 err = make_reservation(c, BASEHD, len); in ubifs_jnl_rename()
1266 dent_key_init_flash(c, &dent->key, new_dir->i_ino, new_nm); in ubifs_jnl_rename()
1272 set_dent_cookie(c, dent); in ubifs_jnl_rename()
1274 ubifs_prep_grp_node(c, dent, dlen1, 0); in ubifs_jnl_rename()
1275 err = ubifs_node_calc_hash(c, dent, hash_dent1); in ubifs_jnl_rename()
1281 dent_key_init_flash(c, &dent2->key, old_dir->i_ino, old_nm); in ubifs_jnl_rename()
1294 set_dent_cookie(c, dent2); in ubifs_jnl_rename()
1296 ubifs_prep_grp_node(c, dent2, dlen2, 0); in ubifs_jnl_rename()
1297 err = ubifs_node_calc_hash(c, dent2, hash_dent2); in ubifs_jnl_rename()
1303 pack_inode(c, p, new_inode, 0); in ubifs_jnl_rename()
1304 err = ubifs_node_calc_hash(c, p, hash_new_inode); in ubifs_jnl_rename()
1312 pack_inode(c, p, old_dir, 1); in ubifs_jnl_rename()
1313 err = ubifs_node_calc_hash(c, p, hash_old_dir); in ubifs_jnl_rename()
1317 pack_inode(c, p, old_dir, 0); in ubifs_jnl_rename()
1318 err = ubifs_node_calc_hash(c, p, hash_old_dir); in ubifs_jnl_rename()
1323 pack_inode(c, p, new_dir, 1); in ubifs_jnl_rename()
1324 err = ubifs_node_calc_hash(c, p, hash_new_dir); in ubifs_jnl_rename()
1330 err = ubifs_add_orphan(c, new_inode->i_ino); in ubifs_jnl_rename()
1332 release_head(c, BASEHD); in ubifs_jnl_rename()
1335 new_ui->del_cmtno = c->cmt_no; in ubifs_jnl_rename()
1338 err = write_head(c, BASEHD, dent, len, &lnum, &offs, sync); in ubifs_jnl_rename()
1342 struct ubifs_wbuf *wbuf = &c->jheads[BASEHD].wbuf; in ubifs_jnl_rename()
1347 ubifs_wbuf_add_ino_nolock(&c->jheads[BASEHD].wbuf, in ubifs_jnl_rename()
1350 release_head(c, BASEHD); in ubifs_jnl_rename()
1352 ubifs_add_auth_dirt(c, lnum); in ubifs_jnl_rename()
1354 dent_key_init(c, &key, new_dir->i_ino, new_nm); in ubifs_jnl_rename()
1355 err = ubifs_tnc_add_nm(c, &key, lnum, offs, dlen1, hash_dent1, new_nm); in ubifs_jnl_rename()
1361 dent_key_init(c, &key, old_dir->i_ino, old_nm); in ubifs_jnl_rename()
1362 err = ubifs_tnc_add_nm(c, &key, lnum, offs, dlen2, hash_dent2, old_nm); in ubifs_jnl_rename()
1366 ubifs_delete_orphan(c, whiteout->i_ino); in ubifs_jnl_rename()
1368 err = ubifs_add_dirt(c, lnum, dlen2); in ubifs_jnl_rename()
1372 dent_key_init(c, &key, old_dir->i_ino, old_nm); in ubifs_jnl_rename()
1373 err = ubifs_tnc_remove_nm(c, &key, old_nm); in ubifs_jnl_rename()
1380 ino_key_init(c, &key, new_inode->i_ino); in ubifs_jnl_rename()
1381 err = ubifs_tnc_add(c, &key, lnum, offs, ilen, hash_new_inode); in ubifs_jnl_rename()
1387 ino_key_init(c, &key, old_dir->i_ino); in ubifs_jnl_rename()
1388 err = ubifs_tnc_add(c, &key, lnum, offs, plen, hash_old_dir); in ubifs_jnl_rename()
1394 ino_key_init(c, &key, new_dir->i_ino); in ubifs_jnl_rename()
1395 err = ubifs_tnc_add(c, &key, lnum, offs, plen, hash_new_dir); in ubifs_jnl_rename()
1400 finish_reservation(c); in ubifs_jnl_rename()
1402 mark_inode_clean(c, new_ui); in ubifs_jnl_rename()
1407 mark_inode_clean(c, ubifs_inode(old_dir)); in ubifs_jnl_rename()
1409 mark_inode_clean(c, ubifs_inode(new_dir)); in ubifs_jnl_rename()
1414 release_head(c, BASEHD); in ubifs_jnl_rename()
1416 ubifs_ro_mode(c, err); in ubifs_jnl_rename()
1418 ubifs_delete_orphan(c, new_inode->i_ino); in ubifs_jnl_rename()
1420 finish_reservation(c); in ubifs_jnl_rename()
1437 static int truncate_data_node(const struct ubifs_info *c, const struct inode *inode, in truncate_data_node() argument
1461 err = ubifs_decompress(c, &dn->data, dlen, buf, &out_len, compr_type); in truncate_data_node()
1465 ubifs_compress(c, buf, *new_len, &dn->data, &out_len, &compr_type); in truncate_data_node()
1478 ubifs_assert(c, out_len <= UBIFS_BLOCK_SIZE); in truncate_data_node()
1503 int ubifs_jnl_truncate(struct ubifs_info *c, const struct inode *inode, in ubifs_jnl_truncate() argument
1519 ubifs_assert(c, !ui->data_len); in ubifs_jnl_truncate()
1520 ubifs_assert(c, S_ISREG(inode->i_mode)); in ubifs_jnl_truncate()
1521 ubifs_assert(c, mutex_is_locked(&ui->ui_mutex)); in ubifs_jnl_truncate()
1526 sz += ubifs_auth_node_sz(c); in ubifs_jnl_truncate()
1544 data_key_init(c, &key, inum, blk); in ubifs_jnl_truncate()
1546 err = ubifs_tnc_lookup(c, &key, dn); in ubifs_jnl_truncate()
1555 ubifs_err(c, "bad data node (block %u, inode %lu)", in ubifs_jnl_truncate()
1557 ubifs_dump_node(c, dn); in ubifs_jnl_truncate()
1564 err = truncate_data_node(c, inode, blk, dn, &dlen); in ubifs_jnl_truncate()
1574 if (ubifs_authenticated(c)) in ubifs_jnl_truncate()
1575 len += ALIGN(dlen, 8) + ubifs_auth_node_sz(c); in ubifs_jnl_truncate()
1579 err = make_reservation(c, BASEHD, len); in ubifs_jnl_truncate()
1583 pack_inode(c, ino, inode, 0); in ubifs_jnl_truncate()
1584 err = ubifs_node_calc_hash(c, ino, hash_ino); in ubifs_jnl_truncate()
1588 ubifs_prep_grp_node(c, trun, UBIFS_TRUN_NODE_SZ, dlen ? 0 : 1); in ubifs_jnl_truncate()
1590 ubifs_prep_grp_node(c, dn, dlen, 1); in ubifs_jnl_truncate()
1591 err = ubifs_node_calc_hash(c, dn, hash_dn); in ubifs_jnl_truncate()
1596 err = write_head(c, BASEHD, ino, len, &lnum, &offs, sync); in ubifs_jnl_truncate()
1600 ubifs_wbuf_add_ino_nolock(&c->jheads[BASEHD].wbuf, inum); in ubifs_jnl_truncate()
1601 release_head(c, BASEHD); in ubifs_jnl_truncate()
1603 ubifs_add_auth_dirt(c, lnum); in ubifs_jnl_truncate()
1607 err = ubifs_tnc_add(c, &key, lnum, sz, dlen, hash_dn); in ubifs_jnl_truncate()
1612 ino_key_init(c, &key, inum); in ubifs_jnl_truncate()
1613 err = ubifs_tnc_add(c, &key, lnum, offs, UBIFS_INO_NODE_SZ, hash_ino); in ubifs_jnl_truncate()
1617 err = ubifs_add_dirt(c, lnum, UBIFS_TRUN_NODE_SZ); in ubifs_jnl_truncate()
1623 data_key_init(c, &key, inum, blk); in ubifs_jnl_truncate()
1627 data_key_init(c, &to_key, inum, blk); in ubifs_jnl_truncate()
1629 err = ubifs_tnc_remove_range(c, &key, &to_key); in ubifs_jnl_truncate()
1633 finish_reservation(c); in ubifs_jnl_truncate()
1637 mark_inode_clean(c, ui); in ubifs_jnl_truncate()
1642 release_head(c, BASEHD); in ubifs_jnl_truncate()
1644 ubifs_ro_mode(c, err); in ubifs_jnl_truncate()
1645 finish_reservation(c); in ubifs_jnl_truncate()
1664 int ubifs_jnl_delete_xattr(struct ubifs_info *c, const struct inode *host, in ubifs_jnl_delete_xattr() argument
1676 ubifs_assert(c, inode->i_nlink == 0); in ubifs_jnl_delete_xattr()
1677 ubifs_assert(c, mutex_is_locked(&host_ui->ui_mutex)); in ubifs_jnl_delete_xattr()
1688 write_len = len + ubifs_auth_node_sz(c); in ubifs_jnl_delete_xattr()
1695 err = make_reservation(c, BASEHD, write_len); in ubifs_jnl_delete_xattr()
1702 xent_key_init(c, &xent_key, host->i_ino, nm); in ubifs_jnl_delete_xattr()
1703 key_write(c, &xent_key, xent->key); in ubifs_jnl_delete_xattr()
1710 ubifs_prep_grp_node(c, xent, xlen, 0); in ubifs_jnl_delete_xattr()
1713 pack_inode(c, ino, inode, 0); in ubifs_jnl_delete_xattr()
1715 pack_inode(c, ino, host, 1); in ubifs_jnl_delete_xattr()
1716 err = ubifs_node_calc_hash(c, ino, hash); in ubifs_jnl_delete_xattr()
1720 err = write_head(c, BASEHD, xent, write_len, &lnum, &xent_offs, sync); in ubifs_jnl_delete_xattr()
1722 ubifs_wbuf_add_ino_nolock(&c->jheads[BASEHD].wbuf, host->i_ino); in ubifs_jnl_delete_xattr()
1723 release_head(c, BASEHD); in ubifs_jnl_delete_xattr()
1725 ubifs_add_auth_dirt(c, lnum); in ubifs_jnl_delete_xattr()
1731 err = ubifs_tnc_remove_nm(c, &xent_key, nm); in ubifs_jnl_delete_xattr()
1734 err = ubifs_add_dirt(c, lnum, xlen); in ubifs_jnl_delete_xattr()
1742 lowest_ino_key(c, &key1, inode->i_ino); in ubifs_jnl_delete_xattr()
1743 highest_ino_key(c, &key2, inode->i_ino); in ubifs_jnl_delete_xattr()
1744 err = ubifs_tnc_remove_range(c, &key1, &key2); in ubifs_jnl_delete_xattr()
1747 err = ubifs_add_dirt(c, lnum, UBIFS_INO_NODE_SZ); in ubifs_jnl_delete_xattr()
1752 ino_key_init(c, &key1, host->i_ino); in ubifs_jnl_delete_xattr()
1753 err = ubifs_tnc_add(c, &key1, lnum, xent_offs + len - hlen, hlen, hash); in ubifs_jnl_delete_xattr()
1757 finish_reservation(c); in ubifs_jnl_delete_xattr()
1761 mark_inode_clean(c, host_ui); in ubifs_jnl_delete_xattr()
1766 release_head(c, BASEHD); in ubifs_jnl_delete_xattr()
1768 ubifs_ro_mode(c, err); in ubifs_jnl_delete_xattr()
1769 finish_reservation(c); in ubifs_jnl_delete_xattr()
1786 int ubifs_jnl_change_xattr(struct ubifs_info *c, const struct inode *inode, in ubifs_jnl_change_xattr() argument
1798 ubifs_assert(c, host->i_nlink > 0); in ubifs_jnl_change_xattr()
1799 ubifs_assert(c, inode->i_nlink > 0); in ubifs_jnl_change_xattr()
1800 ubifs_assert(c, mutex_is_locked(&host_ui->ui_mutex)); in ubifs_jnl_change_xattr()
1807 aligned_len += ubifs_auth_node_sz(c); in ubifs_jnl_change_xattr()
1814 err = make_reservation(c, BASEHD, aligned_len); in ubifs_jnl_change_xattr()
1818 pack_inode(c, ino, host, 0); in ubifs_jnl_change_xattr()
1819 err = ubifs_node_calc_hash(c, ino, hash_host); in ubifs_jnl_change_xattr()
1822 pack_inode(c, (void *)ino + aligned_len1, inode, 1); in ubifs_jnl_change_xattr()
1823 err = ubifs_node_calc_hash(c, (void *)ino + aligned_len1, hash); in ubifs_jnl_change_xattr()
1827 err = write_head(c, BASEHD, ino, aligned_len, &lnum, &offs, 0); in ubifs_jnl_change_xattr()
1829 struct ubifs_wbuf *wbuf = &c->jheads[BASEHD].wbuf; in ubifs_jnl_change_xattr()
1834 release_head(c, BASEHD); in ubifs_jnl_change_xattr()
1838 ubifs_add_auth_dirt(c, lnum); in ubifs_jnl_change_xattr()
1840 ino_key_init(c, &key, host->i_ino); in ubifs_jnl_change_xattr()
1841 err = ubifs_tnc_add(c, &key, lnum, offs, len1, hash_host); in ubifs_jnl_change_xattr()
1845 ino_key_init(c, &key, inode->i_ino); in ubifs_jnl_change_xattr()
1846 err = ubifs_tnc_add(c, &key, lnum, offs + aligned_len1, len2, hash); in ubifs_jnl_change_xattr()
1850 finish_reservation(c); in ubifs_jnl_change_xattr()
1854 mark_inode_clean(c, host_ui); in ubifs_jnl_change_xattr()
1859 release_head(c, BASEHD); in ubifs_jnl_change_xattr()
1861 ubifs_ro_mode(c, err); in ubifs_jnl_change_xattr()
1862 finish_reservation(c); in ubifs_jnl_change_xattr()