Skip to content

Commit

Permalink
ceph: initialize sb->s_bdi, bdi_unregister after kill_anon_super
Browse files Browse the repository at this point in the history
Writeback doesn't work without the bdi set, and writeback on
umount doesn't work if we unregister the bdi too early.

Signed-off-by: Sage Weil <sage@newdream.net>
  • Loading branch information
Sage Weil committed Oct 14, 2009
1 parent c89136e commit f2cf418
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion fs/ceph/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ static int ceph_syncfs(struct super_block *sb, int wait)
dout("sync_fs %d\n", wait);
ceph_osdc_sync(&ceph_client(sb)->osdc);
ceph_mdsc_sync(&ceph_client(sb)->mdsc);
dout("sync_fs %d done\n", wait);
return 0;
}

Expand Down Expand Up @@ -777,6 +778,7 @@ static int ceph_init_bdi(struct super_block *sb, struct ceph_client *client)
err = bdi_init(&client->backing_dev_info);
if (err < 0)
return err;
sb->s_bdi = &client->backing_dev_info;

/* set ra_pages based on rsize mount option? */
if (client->mount_args.rsize >= PAGE_CACHE_SIZE)
Expand Down Expand Up @@ -861,8 +863,8 @@ static void ceph_kill_sb(struct super_block *s)
struct ceph_client *client = ceph_sb_to_client(s);
dout("kill_sb %p\n", s);
ceph_mdsc_pre_umount(&client->mdsc);
bdi_unregister(&client->backing_dev_info);
kill_anon_super(s); /* will call put_super after sb is r/o */
bdi_unregister(&client->backing_dev_info);
bdi_destroy(&client->backing_dev_info);
ceph_destroy_client(client);
}
Expand Down

0 comments on commit f2cf418

Please sign in to comment.