static void release_bdi(struct kref *ref) { struct backing_dev_info *bdi = container_of(ref, struct backing_dev_info, refcnt); if (test_bit(WB_registered, &bdi->wb.state)) bdi_unregister(bdi); WARN_ON_ONCE(bdi->dev); wb_exit(&bdi->wb); cgwb_bdi_exit(bdi); kfree(bdi); }
/* * super ops */ static void ceph_put_super(struct super_block *s) { struct ceph_fs_client *fsc = ceph_sb_to_client(s); dout("put_super\n"); ceph_mdsc_close_sessions(fsc->mdsc); /* * ensure we release the bdi before put_anon_super releases * the device name. */ if (s->s_bdi == &fsc->backing_dev_info) { bdi_unregister(&fsc->backing_dev_info); s->s_bdi = NULL; } return; }
void bdi_destroy(struct backing_dev_info *bdi) { bdi_unregister(bdi); bdi_exit(bdi); }