diff options
author | Joel Becker <joel.becker@oracle.com> | 2008-02-01 17:39:35 -0500 |
---|---|---|
committer | Mark Fasheh <mfasheh@suse.com> | 2008-04-18 11:56:04 -0400 |
commit | 4670c46ded9a18268d1265417ff4ac72145a7917 (patch) | |
tree | 4f70822ddee389a9c8ed572b215a3355c20db3a1 /fs/ocfs2/super.c | |
parent | 8f2c9c1b16bf6ed0903b29c49d56fa0109a390e4 (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.c | 13 |
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); |