check_inode_nlinks(c, &lostfound_inode);
 }
 
-int bch2_fsck_inode_nlink(struct bch_fs *c)
-{
-       struct bch_inode_unpacked root_inode, lostfound_inode;
-
-       return  check_root(c, &root_inode) ?:
-               check_lostfound(c, &root_inode, &lostfound_inode) ?:
-               check_inode_nlinks(c, &lostfound_inode);
-}
-
 int bch2_fsck_walk_inodes_only(struct bch_fs *c)
 {
        struct btree_trans trans;
 
 
        }
 
+       if (!c->sb.clean &&
+           !(c->sb.features & (1 << BCH_FEATURE_atomic_nlink))) {
+               bch_info(c, "BCH_FEATURE_atomic_nlink not set and filesystem dirty, fsck required");
+               c->opts.fsck = true;
+               c->opts.fix_errors = FSCK_OPT_YES;
+       }
+
        if (!(c->sb.features & (1ULL << BCH_FEATURE_alloc_v2))) {
                bch_info(c, "alloc_v2 feature bit not set, fsck required");
                c->opts.fsck = true;
                bch_verbose(c, "alloc write done");
        }
 
-       if (!c->sb.clean) {
-               if (!(c->sb.features & (1 << BCH_FEATURE_atomic_nlink))) {
-                       bch_info(c, "checking inode link counts");
-                       err = "error in recovery";
-                       ret = bch2_fsck_inode_nlink(c);
-                       if (ret)
-                               goto err;
-                       bch_verbose(c, "check inodes done");
-
-               } else {
-                       bch_verbose(c, "checking for deleted inodes");
-                       err = "error in recovery";
-                       ret = bch2_fsck_walk_inodes_only(c);
-                       if (ret)
-                               goto err;
-                       bch_verbose(c, "check inodes done");
-               }
-       }
-
        if (c->opts.fsck) {
                bch_info(c, "starting fsck");
                err = "error in fsck";
                if (ret)
                        goto err;
                bch_verbose(c, "fsck done");
+       } else if (!c->sb.clean) {
+               bch_verbose(c, "checking for deleted inodes");
+               err = "error in recovery";
+               ret = bch2_fsck_walk_inodes_only(c);
+               if (ret)
+                       goto err;
+               bch_verbose(c, "check inodes done");
        }
 
        if (enabled_qtypes(c)) {