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>
Šī revīzija ir iekļauta:

revīziju iesūtīja
Mark Fasheh

vecāks
8f2c9c1b16
revīzija
4670c46ded
@@ -1251,9 +1251,9 @@ static void ocfs2_dismount_volume(struct super_block *sb, int mnt_err)
|
||||
|
||||
ocfs2_sync_blockdev(sb);
|
||||
|
||||
/* No dlm means we've failed during mount, so skip all the
|
||||
* steps which depended on that to complete. */
|
||||
if (osb->dlm) {
|
||||
/* No cluster connection means we've failed during mount, so skip
|
||||
* all the steps which depended on that to complete. */
|
||||
if (osb->cconn) {
|
||||
tmp = ocfs2_super_lock(osb, 1);
|
||||
if (tmp < 0) {
|
||||
mlog_errno(tmp);
|
||||
@@ -1264,12 +1264,12 @@ static void ocfs2_dismount_volume(struct super_block *sb, int mnt_err)
|
||||
if (osb->slot_num != OCFS2_INVALID_SLOT)
|
||||
ocfs2_put_slot(osb);
|
||||
|
||||
if (osb->dlm)
|
||||
if (osb->cconn)
|
||||
ocfs2_super_unlock(osb, 1);
|
||||
|
||||
ocfs2_release_system_inodes(osb);
|
||||
|
||||
if (osb->dlm)
|
||||
if (osb->cconn)
|
||||
ocfs2_dlm_shutdown(osb);
|
||||
|
||||
debugfs_remove(osb->osb_debug_root);
|
||||
@@ -1341,7 +1341,6 @@ static int ocfs2_initialize_super(struct super_block *sb,
|
||||
sb->s_fs_info = osb;
|
||||
sb->s_op = &ocfs2_sops;
|
||||
sb->s_export_op = &ocfs2_export_ops;
|
||||
osb->osb_locking_proto = ocfs2_locking_protocol;
|
||||
sb->s_time_gran = 1;
|
||||
sb->s_flags |= MS_NOATIME;
|
||||
/* this is needed to support O_LARGEFILE */
|
||||
@@ -1391,8 +1390,6 @@ static int ocfs2_initialize_super(struct super_block *sb,
|
||||
osb->local_alloc_state = OCFS2_LA_UNUSED;
|
||||
osb->local_alloc_bh = NULL;
|
||||
|
||||
ocfs2_setup_hb_callbacks(osb);
|
||||
|
||||
init_waitqueue_head(&osb->osb_mount_event);
|
||||
|
||||
osb->vol_label = kmalloc(OCFS2_MAX_VOL_LABEL_LEN, GFP_KERNEL);
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user