@@ -542,12 +542,12 @@ int bch2_inode_create(struct btree_trans *trans,
542542int bch2_inode_rm (struct bch_fs * c , u64 inode_nr , bool cached )
543543{
544544 struct btree_trans trans ;
545- struct btree_iter * iter ;
545+ struct btree_iter * iter = NULL ;
546546 struct bkey_i_inode_generation delete ;
547547 struct bpos start = POS (inode_nr , 0 );
548548 struct bpos end = POS (inode_nr + 1 , 0 );
549+ struct bch_inode_unpacked inode_u ;
549550 struct bkey_s_c k ;
550- u64 bi_generation ;
551551 int ret ;
552552
553553 bch2_trans_init (& trans , c , 0 , 0 );
@@ -571,8 +571,6 @@ int bch2_inode_rm(struct bch_fs *c, u64 inode_nr, bool cached)
571571retry :
572572 bch2_trans_begin (& trans );
573573
574- bi_generation = 0 ;
575-
576574 if (cached ) {
577575 iter = bch2_trans_get_iter (& trans , BTREE_ID_inodes , POS (0 , inode_nr ),
578576 BTREE_ITER_CACHED |BTREE_ITER_INTENT );
@@ -587,41 +585,26 @@ int bch2_inode_rm(struct bch_fs *c, u64 inode_nr, bool cached)
587585 if (ret )
588586 goto err ;
589587
590- bch2_fs_inconsistent_on (k .k -> type != KEY_TYPE_inode , trans .c ,
591- "inode %llu not found when deleting" ,
592- inode_nr );
593-
594- switch (k .k -> type ) {
595- case KEY_TYPE_inode : {
596- struct bch_inode_unpacked inode_u ;
597-
598- if (!bch2_inode_unpack (bkey_s_c_to_inode (k ), & inode_u ))
599- bi_generation = inode_u .bi_generation + 1 ;
600- break ;
601- }
602- case KEY_TYPE_inode_generation : {
603- struct bkey_s_c_inode_generation g =
604- bkey_s_c_to_inode_generation (k );
605- bi_generation = le32_to_cpu (g .v -> bi_generation );
606- break ;
607- }
588+ if (k .k -> type != KEY_TYPE_inode ) {
589+ bch2_fs_inconsistent (trans .c ,
590+ "inode %llu not found when deleting" ,
591+ inode_nr );
592+ ret = - EIO ;
593+ goto err ;
608594 }
609595
610- if (!bi_generation ) {
611- bkey_init (& delete .k );
612- delete .k .p .offset = inode_nr ;
613- } else {
614- bkey_inode_generation_init (& delete .k_i );
615- delete .k .p .offset = inode_nr ;
616- delete .v .bi_generation = cpu_to_le32 (bi_generation );
617- }
596+ bch2_inode_unpack (bkey_s_c_to_inode (k ), & inode_u );
597+
598+ bkey_inode_generation_init (& delete .k_i );
599+ delete .k .p = iter -> pos ;
600+ delete .v .bi_generation = cpu_to_le32 (inode_u .bi_generation + 1 );
618601
619602 bch2_trans_update (& trans , iter , & delete .k_i , 0 );
620603
621604 ret = bch2_trans_commit (& trans , NULL , NULL ,
622605 BTREE_INSERT_NOFAIL );
623- bch2_trans_iter_put (& trans , iter );
624606err :
607+ bch2_trans_iter_put (& trans , iter );
625608 if (ret == - EINTR )
626609 goto retry ;
627610
0 commit comments