aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/super.c
diff options
context:
space:
mode:
authorJoel Becker <joel.becker@oracle.com>2008-02-01 17:39:35 -0500
committerMark Fasheh <mfasheh@suse.com>2008-04-18 11:56:04 -0400
commit4670c46ded9a18268d1265417ff4ac72145a7917 (patch)
tree4f70822ddee389a9c8ed572b215a3355c20db3a1 /fs/ocfs2/super.c
parent8f2c9c1b16bf6ed0903b29c49d56fa0109a390e4 (diff)
ocfs2: Introduce the new ocfs2_cluster_connect/disconnect() API.
This step introduces a cluster stack agnostic API for initializing and exiting. fs/ocfs2/dlmglue.c no longer uses o2cb/o2dlm knowledge to connect to the stack. It is all handled in stackglue.c. heartbeat.c no longer needs to know how it gets called. ocfs2_do_node_down() is now a clean recovery trigger. The big gotcha is the ordering of initializations and de-initializations done underneath ocfs2_cluster_connect(). ocfs2_dlm_init() used to do all o2dlm initialization in one block. Thus, the o2dlm functionality of ocfs2_cluster_connect() is very straightforward. ocfs2_dlm_shutdown(), however, did a few things between de-registration of the eviction callback and actually shutting down the domain. Now de-registration and shutdown of the domain are wrapped within the single ocfs2_cluster_disconnect() call. I've checked the code paths to make sure we can safely tear down things in ocfs2_dlm_shutdown() before calling ocfs2_cluster_disconnect(). The filesystem has already set itself to ignore the callback. Signed-off-by: Joel Becker <joel.becker@oracle.com> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs/ocfs2/super.c')
-rw-r--r--fs/ocfs2/super.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index c8675464e299..0ee49757467d 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -1251,9 +1251,9 @@ static void ocfs2_dismount_volume(struct super_block *sb, int mnt_err)
1251 1251
1252 ocfs2_sync_blockdev(sb); 1252 ocfs2_sync_blockdev(sb);
1253 1253
1254 /* No dlm means we've failed during mount, so skip all the 1254 /* No cluster connection means we've failed during mount, so skip
1255 * steps which depended on that to complete. */ 1255 * all the steps which depended on that to complete. */
1256 if (osb->dlm) { 1256 if (osb->cconn) {
1257 tmp = ocfs2_super_lock(osb, 1); 1257 tmp = ocfs2_super_lock(osb, 1);
1258 if (tmp < 0) { 1258 if (tmp < 0) {
1259 mlog_errno(tmp); 1259 mlog_errno(tmp);
@@ -1264,12 +1264,12 @@ static void ocfs2_dismount_volume(struct super_block *sb, int mnt_err)
1264 if (osb->slot_num != OCFS2_INVALID_SLOT) 1264 if (osb->slot_num != OCFS2_INVALID_SLOT)
1265 ocfs2_put_slot(osb); 1265 ocfs2_put_slot(osb);
1266 1266
1267 if (osb->dlm) 1267 if (osb->cconn)
1268 ocfs2_super_unlock(osb, 1); 1268 ocfs2_super_unlock(osb, 1);
1269 1269
1270 ocfs2_release_system_inodes(osb); 1270 ocfs2_release_system_inodes(osb);
1271 1271
1272 if (osb->dlm) 1272 if (osb->cconn)
1273 ocfs2_dlm_shutdown(osb); 1273 ocfs2_dlm_shutdown(osb);
1274 1274
1275 debugfs_remove(osb->osb_debug_root); 1275 debugfs_remove(osb->osb_debug_root);
@@ -1341,7 +1341,6 @@ static int ocfs2_initialize_super(struct super_block *sb,
1341 sb->s_fs_info = osb; 1341 sb->s_fs_info = osb;
1342 sb->s_op = &ocfs2_sops; 1342 sb->s_op = &ocfs2_sops;
1343 sb->s_export_op = &ocfs2_export_ops; 1343 sb->s_export_op = &ocfs2_export_ops;
1344 osb->osb_locking_proto = ocfs2_locking_protocol;
1345 sb->s_time_gran = 1; 1344 sb->s_time_gran = 1;
1346 sb->s_flags |= MS_NOATIME; 1345 sb->s_flags |= MS_NOATIME;
1347 /* this is needed to support O_LARGEFILE */ 1346 /* this is needed to support O_LARGEFILE */
@@ -1391,8 +1390,6 @@ static int ocfs2_initialize_super(struct super_block *sb,
1391 osb->local_alloc_state = OCFS2_LA_UNUSED; 1390 osb->local_alloc_state = OCFS2_LA_UNUSED;
1392 osb->local_alloc_bh = NULL; 1391 osb->local_alloc_bh = NULL;
1393 1392
1394 ocfs2_setup_hb_callbacks(osb);
1395
1396 init_waitqueue_head(&osb->osb_mount_event); 1393 init_waitqueue_head(&osb->osb_mount_event);
1397 1394
1398 osb->vol_label = kmalloc(OCFS2_MAX_VOL_LABEL_LEN, GFP_KERNEL); 1395 osb->vol_label = kmalloc(OCFS2_MAX_VOL_LABEL_LEN, GFP_KERNEL);