소스 검색

ceph: move mempool creation to ceph_create_client

Signed-off-by: Sage Weil <sage@newdream.net>
Sage Weil 15 년 전
부모
커밋
b9bfb93ce2
1개의 변경된 파일12개의 추가작업 그리고 11개의 파일을 삭제
  1. 12 11
      fs/ceph/super.c

+ 12 - 11
fs/ceph/super.c

@@ -534,10 +534,18 @@ static struct ceph_client *ceph_create_client(struct ceph_mount_args *args)
 	if (client->trunc_wq == NULL)
 		goto fail_pg_inv_wq;
 
+	/* set up mempools */
+	err = -ENOMEM;
+	client->wb_pagevec_pool = mempool_create_kmalloc_pool(10,
+			      client->mount_args->wsize >> PAGE_CACHE_SHIFT);
+	if (!client->wb_pagevec_pool)
+		goto fail_trunc_wq;
+
+
 	/* subsystems */
 	err = ceph_monc_init(&client->monc, client);
 	if (err < 0)
-		goto fail_trunc_wq;
+		goto fail_mempool;
 	err = ceph_osdc_init(&client->osdc, client);
 	if (err < 0)
 		goto fail_monc;
@@ -550,6 +558,8 @@ fail_osdc:
 	ceph_osdc_stop(&client->osdc);
 fail_monc:
 	ceph_monc_stop(&client->monc);
+fail_mempool:
+	mempool_destroy(client->wb_pagevec_pool);
 fail_trunc_wq:
 	destroy_workqueue(client->trunc_wq);
 fail_pg_inv_wq:
@@ -581,8 +591,7 @@ static void ceph_destroy_client(struct ceph_client *client)
 
 	if (client->msgr)
 		ceph_messenger_destroy(client->msgr);
-	if (client->wb_pagevec_pool)
-		mempool_destroy(client->wb_pagevec_pool);
+	mempool_destroy(client->wb_pagevec_pool);
 
 	destroy_mount_args(client->mount_args);
 
@@ -845,14 +854,6 @@ static int ceph_get_sb(struct file_system_type *fs_type,
 		dout("get_sb got existing client %p\n", client);
 	} else {
 		dout("get_sb using new client %p\n", client);
-
-		/* set up mempools */
-		err = -ENOMEM;
-		client->wb_pagevec_pool = mempool_create_kmalloc_pool(10,
-			      client->mount_args->wsize >> PAGE_CACHE_SHIFT);
-		if (!client->wb_pagevec_pool)
-			goto out_splat;
-
 		err = ceph_register_bdi(sb, client);
 		if (err < 0)
 			goto out_splat;