Hello Kent Overstreet,

Commit ffcbec607613 ("bcachefs: Kill opts.buckets_nouse") from Apr 6,
2024 (linux-next), leads to the following Smatch static checker
warning:

        fs/bcachefs/super.c:1202 bch2_dev_free()
        warn: 'ca->buckets_nouse' double freed

fs/bcachefs/super.c
    1185 static void bch2_dev_free(struct bch_dev *ca)
    1186 {
    1187         cancel_work_sync(&ca->io_error_work);
    1188 
    1189         if (ca->kobj.state_in_sysfs &&
    1190             ca->disk_sb.bdev)
    1191                 sysfs_remove_link(bdev_kobj(ca->disk_sb.bdev), 
"bcachefs");
    1192 
    1193         if (ca->kobj.state_in_sysfs)
    1194                 kobject_del(&ca->kobj);
    1195 
    1196         kfree(ca->buckets_nouse);
                       ^^^^^^^^^^^^^^^^^
The patch adds a free

    1197         bch2_free_super(&ca->disk_sb);
    1198         bch2_dev_allocator_background_exit(ca);
    1199         bch2_dev_journal_exit(ca);
    1200 
    1201         free_percpu(ca->io_done);
--> 1202         bch2_dev_buckets_free(ca);
                                       ^^
The existing code already freed ca->buckets_nouse.

    1203         free_page((unsigned long) ca->sb_read_scratch);
    1204 
    1205         bch2_time_stats_quantiles_exit(&ca->io_latency[WRITE]);
    1206         bch2_time_stats_quantiles_exit(&ca->io_latency[READ]);
    1207 
    1208         percpu_ref_exit(&ca->io_ref);
    1209 #ifndef CONFIG_BCACHEFS_DEBUG
    1210         percpu_ref_exit(&ca->ref);
    1211 #endif
    1212         kobject_put(&ca->kobj);

regards,
dan carpenter

Reply via email to