aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph/super.c
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2010-02-17 13:02:43 -0500
committerSage Weil <sage@newdream.net>2010-02-17 13:02:43 -0500
commit85ccce43a3fc15a40ded6ae1603e3f68a17f4d24 (patch)
tree1e15fb7dc7df43da4a3feacff671c8169e96291d /fs/ceph/super.c
parent5ce6e9dbe6805ab8ee67e21936d17f431adc63c6 (diff)
ceph: clean up readdir caps reservation
Use a global counter for the minimum number of allocated caps instead of hard coding a check against readdir_max. This takes into account multiple client instances, and avoids examining the superblock mount options when a cap is dropped. Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/super.c')
-rw-r--r--fs/ceph/super.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/ceph/super.c b/fs/ceph/super.c
index 39aaf29a04a0..74953be75f8f 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
@@ -578,6 +578,9 @@ static struct ceph_client *ceph_create_client(struct ceph_mount_args *args)
578 if (!client->wb_pagevec_pool) 578 if (!client->wb_pagevec_pool)
579 goto fail_trunc_wq; 579 goto fail_trunc_wq;
580 580
581 /* caps */
582 client->min_caps = args->max_readdir;
583 ceph_adjust_min_caps(client->min_caps);
581 584
582 /* subsystems */ 585 /* subsystems */
583 err = ceph_monc_init(&client->monc, client); 586 err = ceph_monc_init(&client->monc, client);
@@ -619,6 +622,8 @@ static void ceph_destroy_client(struct ceph_client *client)
619 ceph_monc_stop(&client->monc); 622 ceph_monc_stop(&client->monc);
620 ceph_osdc_stop(&client->osdc); 623 ceph_osdc_stop(&client->osdc);
621 624
625 ceph_adjust_min_caps(-client->min_caps);
626
622 ceph_debugfs_client_cleanup(client); 627 ceph_debugfs_client_cleanup(client);
623 destroy_workqueue(client->wb_wq); 628 destroy_workqueue(client->wb_wq);
624 destroy_workqueue(client->pg_inv_wq); 629 destroy_workqueue(client->pg_inv_wq);