* [Ocfs2-devel] [PATCH 2/3] ocfs2:freeze-thaw: initialization and cleanup
@ 2010-01-09 18:00 Wengang Wang
2010-01-15 1:53 ` Sunil Mushran
0 siblings, 1 reply; 7+ messages in thread
From: Wengang Wang @ 2010-01-09 18:00 UTC (permalink / raw)
To: ocfs2-devel
this patch does some initialization and cleanup for freeze/thaw.
Authored-by: Tiger Yang <tiger.yang@oracle.com>
Authored-by: Wengang Wang <wen.gang.wang@oracle.com>
Signed-off-by: Wengang Wang <wen.gang.wang@oracle.com>
---
fs/ocfs2/dlm/dlmapi.h | 1 +
fs/ocfs2/dlm/dlmlock.c | 12 ++++++++++++
fs/ocfs2/dlmglue.c | 24 ++++++++++++++++++++++++
fs/ocfs2/super.c | 21 +++++++++++++++++++++
4 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/fs/ocfs2/dlm/dlmapi.h b/fs/ocfs2/dlm/dlmapi.h
index b5786a7..489c599 100644
--- a/fs/ocfs2/dlm/dlmapi.h
+++ b/fs/ocfs2/dlm/dlmapi.h
@@ -217,4 +217,5 @@ void dlm_register_eviction_cb(struct dlm_ctxt *dlm,
struct dlm_eviction_cb *cb);
void dlm_unregister_eviction_cb(struct dlm_eviction_cb *cb);
+int dlm_freeze_lock_supported(struct dlm_ctxt *dlm);
#endif /* DLMAPI_H */
diff --git a/fs/ocfs2/dlm/dlmlock.c b/fs/ocfs2/dlm/dlmlock.c
index 437698e..ad15a66 100644
--- a/fs/ocfs2/dlm/dlmlock.c
+++ b/fs/ocfs2/dlm/dlmlock.c
@@ -764,3 +764,15 @@ error:
return status;
}
EXPORT_SYMBOL_GPL(dlmlock);
+
+int dlm_freeze_lock_supported(struct dlm_ctxt *dlm)
+{
+ if (dlm->dlm_locking_proto.pv_major == 1)
+ return (dlm->dlm_locking_proto.pv_minor >= 1);
+
+ if (dlm->dlm_locking_proto.pv_major > 1)
+ return 1;
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(dlm_freeze_lock_supported);
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
index 0caa69e..cf88af2 100644
--- a/fs/ocfs2/dlmglue.c
+++ b/fs/ocfs2/dlmglue.c
@@ -115,6 +115,8 @@ static int ocfs2_check_refcount_downconvert(struct ocfs2_lock_res *lockres,
int new_level);
static int ocfs2_refcount_convert_worker(struct ocfs2_lock_res *lockres,
int blocking);
+static int ocfs2_check_freeze_downconvert(struct ocfs2_lock_res *lockres,
+ int new_level);
#define mlog_meta_lvb(__level, __lockres) ocfs2_dump_meta_lvb_info(__level, __PRETTY_FUNCTION__, __LINE__, __lockres)
@@ -290,6 +292,11 @@ static struct ocfs2_lock_res_ops ocfs2_refcount_block_lops = {
.flags = 0,
};
+static struct ocfs2_lock_res_ops ocfs2_freeze_lops = {
+ .check_downconvert = ocfs2_check_freeze_downconvert,
+ .flags = 0,
+};
+
static inline int ocfs2_is_inode_lock(struct ocfs2_lock_res *lockres)
{
return lockres->l_type == OCFS2_LOCK_TYPE_META ||
@@ -722,6 +729,15 @@ void ocfs2_refcount_lock_res_init(struct ocfs2_lock_res *lockres,
&ocfs2_refcount_block_lops, osb);
}
+static void ocfs2_freeze_lock_res_init(struct ocfs2_lock_res *res,
+ struct ocfs2_super *osb)
+{
+ ocfs2_lock_res_init_once(res);
+ ocfs2_build_lock_name(OCFS2_LOCK_TYPE_FREEZE, 0, 0, res->l_name);
+ ocfs2_lock_res_init_common(osb, res, OCFS2_LOCK_TYPE_FREEZE,
+ &ocfs2_freeze_lops, osb);
+}
+
void ocfs2_lock_res_free(struct ocfs2_lock_res *res)
{
mlog_entry_void();
@@ -3006,6 +3022,7 @@ local:
ocfs2_rename_lock_res_init(&osb->osb_rename_lockres, osb);
ocfs2_nfs_sync_lock_res_init(&osb->osb_nfs_sync_lockres, osb);
ocfs2_orphan_scan_lock_res_init(&osb->osb_orphan_scan.os_lockres, osb);
+ ocfs2_freeze_lock_res_init(&osb->osb_freeze_lockres, osb);
osb->cconn = conn;
@@ -3043,6 +3060,7 @@ void ocfs2_dlm_shutdown(struct ocfs2_super *osb,
ocfs2_lock_res_free(&osb->osb_rename_lockres);
ocfs2_lock_res_free(&osb->osb_nfs_sync_lockres);
ocfs2_lock_res_free(&osb->osb_orphan_scan.os_lockres);
+ ocfs2_lock_res_free(&osb->osb_freeze_lockres);
ocfs2_cluster_disconnect(osb->cconn, hangup_pending);
osb->cconn = NULL;
@@ -3228,6 +3246,7 @@ static void ocfs2_drop_osb_locks(struct ocfs2_super *osb)
ocfs2_simple_drop_lockres(osb, &osb->osb_rename_lockres);
ocfs2_simple_drop_lockres(osb, &osb->osb_nfs_sync_lockres);
ocfs2_simple_drop_lockres(osb, &osb->osb_orphan_scan.os_lockres);
+ ocfs2_simple_drop_lockres(osb, &osb->osb_freeze_lockres);
}
int ocfs2_drop_inode_locks(struct inode *inode)
@@ -3909,6 +3928,11 @@ void ocfs2_set_locking_protocol(void)
ocfs2_stack_glue_set_locking_protocol(&lproto);
}
+static int ocfs2_check_freeze_downconvert(struct ocfs2_lock_res *lockres,
+ int new_level)
+{
+ return 1; //change me
+}
static void ocfs2_process_blocked_lock(struct ocfs2_super *osb,
struct ocfs2_lock_res *lockres)
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index 14f47d2..9127760 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -134,6 +134,7 @@ static void ocfs2_destroy_inode(struct inode *inode);
static int ocfs2_susp_quotas(struct ocfs2_super *osb, int unsuspend);
static int ocfs2_enable_quotas(struct ocfs2_super *osb);
static void ocfs2_disable_quotas(struct ocfs2_super *osb);
+static int ocfs2_freeze_lock_supported(struct ocfs2_super *osb);
static const struct super_operations ocfs2_sops = {
.statfs = ocfs2_statfs,
@@ -1772,10 +1773,18 @@ static int ocfs2_get_sector(struct super_block *sb,
return 0;
}
+static int ocfs2_freeze_lock_supported(struct ocfs2_super *osb)
+{
+ if (!osb->cconn || !osb->cconn->cc_lockspace)
+ return 0;
+ return dlm_freeze_lock_supported(osb->cconn->cc_lockspace);
+}
+
static int ocfs2_mount_volume(struct super_block *sb)
{
int status = 0;
int unlock_super = 0;
+ int unlock_freeze = 0;
struct ocfs2_super *osb = OCFS2_SB(sb);
mlog_entry_void();
@@ -1796,6 +1805,15 @@ static int ocfs2_mount_volume(struct super_block *sb)
}
unlock_super = 1;
+ if (ocfs2_freeze_lock_supported(osb)) {
+ status = ocfs2_freeze_lock(osb, 0);
+ if (status < 0) {
+ mlog_errno(status);
+ goto leave;
+ }
+ unlock_freeze = 1;
+ }
+
/* This will load up the node map and add ourselves to it. */
status = ocfs2_find_slot(osb);
if (status < 0) {
@@ -1821,6 +1839,9 @@ static int ocfs2_mount_volume(struct super_block *sb)
mlog_errno(status);
leave:
+ if (ocfs2_freeze_lock_supported(osb) && unlock_freeze)
+ ocfs2_freeze_unlock(osb, 0);
+
if (unlock_super)
ocfs2_super_unlock(osb, 1);
--
1.6.5.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Ocfs2-devel] [PATCH 2/3] ocfs2:freeze-thaw: initialization and cleanup
2010-01-09 18:00 [Ocfs2-devel] [PATCH 2/3] ocfs2:freeze-thaw: initialization and cleanup Wengang Wang
@ 2010-01-15 1:53 ` Sunil Mushran
2010-01-15 2:26 ` Wengang Wang
0 siblings, 1 reply; 7+ messages in thread
From: Sunil Mushran @ 2010-01-15 1:53 UTC (permalink / raw)
To: ocfs2-devel
Wengang Wang wrote:
> this patch does some initialization and cleanup for freeze/thaw.
>
>
Please capitalize the first letter of a sentence. ;)
> Authored-by: Tiger Yang <tiger.yang@oracle.com>
> Authored-by: Wengang Wang <wen.gang.wang@oracle.com>
> Signed-off-by: Wengang Wang <wen.gang.wang@oracle.com>
> ---
> fs/ocfs2/dlm/dlmapi.h | 1 +
> fs/ocfs2/dlm/dlmlock.c | 12 ++++++++++++
> fs/ocfs2/dlmglue.c | 24 ++++++++++++++++++++++++
> fs/ocfs2/super.c | 21 +++++++++++++++++++++
> 4 files changed, 58 insertions(+), 0 deletions(-)
>
> diff --git a/fs/ocfs2/dlm/dlmapi.h b/fs/ocfs2/dlm/dlmapi.h
> index b5786a7..489c599 100644
> --- a/fs/ocfs2/dlm/dlmapi.h
> +++ b/fs/ocfs2/dlm/dlmapi.h
> @@ -217,4 +217,5 @@ void dlm_register_eviction_cb(struct dlm_ctxt *dlm,
> struct dlm_eviction_cb *cb);
> void dlm_unregister_eviction_cb(struct dlm_eviction_cb *cb);
>
> +int dlm_freeze_lock_supported(struct dlm_ctxt *dlm);
> #endif /* DLMAPI_H */
> diff --git a/fs/ocfs2/dlm/dlmlock.c b/fs/ocfs2/dlm/dlmlock.c
> index 437698e..ad15a66 100644
> --- a/fs/ocfs2/dlm/dlmlock.c
> +++ b/fs/ocfs2/dlm/dlmlock.c
> @@ -764,3 +764,15 @@ error:
> return status;
> }
> EXPORT_SYMBOL_GPL(dlmlock);
> +
> +int dlm_freeze_lock_supported(struct dlm_ctxt *dlm)
> +{
> + if (dlm->dlm_locking_proto.pv_major == 1)
> + return (dlm->dlm_locking_proto.pv_minor >= 1);
> +
> + if (dlm->dlm_locking_proto.pv_major > 1)
> + return 1;
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(dlm_freeze_lock_supported);
>
Change the fs protocol. We shouldn't need to export any symbols.
> diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
> index 0caa69e..cf88af2 100644
> --- a/fs/ocfs2/dlmglue.c
> +++ b/fs/ocfs2/dlmglue.c
> @@ -115,6 +115,8 @@ static int ocfs2_check_refcount_downconvert(struct ocfs2_lock_res *lockres,
> int new_level);
> static int ocfs2_refcount_convert_worker(struct ocfs2_lock_res *lockres,
> int blocking);
> +static int ocfs2_check_freeze_downconvert(struct ocfs2_lock_res *lockres,
> + int new_level);
>
> #define mlog_meta_lvb(__level, __lockres) ocfs2_dump_meta_lvb_info(__level, __PRETTY_FUNCTION__, __LINE__, __lockres)
>
> @@ -290,6 +292,11 @@ static struct ocfs2_lock_res_ops ocfs2_refcount_block_lops = {
> .flags = 0,
> };
>
> +static struct ocfs2_lock_res_ops ocfs2_freeze_lops = {
> + .check_downconvert = ocfs2_check_freeze_downconvert,
> + .flags = 0,
> +};
> +
> static inline int ocfs2_is_inode_lock(struct ocfs2_lock_res *lockres)
> {
> return lockres->l_type == OCFS2_LOCK_TYPE_META ||
> @@ -722,6 +729,15 @@ void ocfs2_refcount_lock_res_init(struct ocfs2_lock_res *lockres,
> &ocfs2_refcount_block_lops, osb);
> }
>
> +static void ocfs2_freeze_lock_res_init(struct ocfs2_lock_res *res,
> + struct ocfs2_super *osb)
> +{
> + ocfs2_lock_res_init_once(res);
> + ocfs2_build_lock_name(OCFS2_LOCK_TYPE_FREEZE, 0, 0, res->l_name);
> + ocfs2_lock_res_init_common(osb, res, OCFS2_LOCK_TYPE_FREEZE,
> + &ocfs2_freeze_lops, osb);
> +}
> +
> void ocfs2_lock_res_free(struct ocfs2_lock_res *res)
> {
> mlog_entry_void();
> @@ -3006,6 +3022,7 @@ local:
> ocfs2_rename_lock_res_init(&osb->osb_rename_lockres, osb);
> ocfs2_nfs_sync_lock_res_init(&osb->osb_nfs_sync_lockres, osb);
> ocfs2_orphan_scan_lock_res_init(&osb->osb_orphan_scan.os_lockres, osb);
> + ocfs2_freeze_lock_res_init(&osb->osb_freeze_lockres, osb);
>
> osb->cconn = conn;
>
> @@ -3043,6 +3060,7 @@ void ocfs2_dlm_shutdown(struct ocfs2_super *osb,
> ocfs2_lock_res_free(&osb->osb_rename_lockres);
> ocfs2_lock_res_free(&osb->osb_nfs_sync_lockres);
> ocfs2_lock_res_free(&osb->osb_orphan_scan.os_lockres);
> + ocfs2_lock_res_free(&osb->osb_freeze_lockres);
>
> ocfs2_cluster_disconnect(osb->cconn, hangup_pending);
> osb->cconn = NULL;
> @@ -3228,6 +3246,7 @@ static void ocfs2_drop_osb_locks(struct ocfs2_super *osb)
> ocfs2_simple_drop_lockres(osb, &osb->osb_rename_lockres);
> ocfs2_simple_drop_lockres(osb, &osb->osb_nfs_sync_lockres);
> ocfs2_simple_drop_lockres(osb, &osb->osb_orphan_scan.os_lockres);
> + ocfs2_simple_drop_lockres(osb, &osb->osb_freeze_lockres);
> }
>
> int ocfs2_drop_inode_locks(struct inode *inode)
> @@ -3909,6 +3928,11 @@ void ocfs2_set_locking_protocol(void)
> ocfs2_stack_glue_set_locking_protocol(&lproto);
> }
>
> +static int ocfs2_check_freeze_downconvert(struct ocfs2_lock_res *lockres,
> + int new_level)
> +{
> + return 1; //change me
> +}
>
If it's going to return 1 always, then we don't need it.
>
> static void ocfs2_process_blocked_lock(struct ocfs2_super *osb,
> struct ocfs2_lock_res *lockres)
> diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
> index 14f47d2..9127760 100644
> --- a/fs/ocfs2/super.c
> +++ b/fs/ocfs2/super.c
> @@ -134,6 +134,7 @@ static void ocfs2_destroy_inode(struct inode *inode);
> static int ocfs2_susp_quotas(struct ocfs2_super *osb, int unsuspend);
> static int ocfs2_enable_quotas(struct ocfs2_super *osb);
> static void ocfs2_disable_quotas(struct ocfs2_super *osb);
> +static int ocfs2_freeze_lock_supported(struct ocfs2_super *osb);
>
> static const struct super_operations ocfs2_sops = {
> .statfs = ocfs2_statfs,
> @@ -1772,10 +1773,18 @@ static int ocfs2_get_sector(struct super_block *sb,
> return 0;
> }
>
> +static int ocfs2_freeze_lock_supported(struct ocfs2_super *osb)
> +{
> + if (!osb->cconn || !osb->cconn->cc_lockspace)
> + return 0;
> + return dlm_freeze_lock_supported(osb->cconn->cc_lockspace);
> +}
> +
> static int ocfs2_mount_volume(struct super_block *sb)
> {
> int status = 0;
> int unlock_super = 0;
> + int unlock_freeze = 0;
> struct ocfs2_super *osb = OCFS2_SB(sb);
>
> mlog_entry_void();
> @@ -1796,6 +1805,15 @@ static int ocfs2_mount_volume(struct super_block *sb)
> }
> unlock_super = 1;
>
> + if (ocfs2_freeze_lock_supported(osb)) {
> + status = ocfs2_freeze_lock(osb, 0);
> + if (status < 0) {
> + mlog_errno(status);
> + goto leave;
> + }
> + unlock_freeze = 1;
> + }
> +
> /* This will load up the node map and add ourselves to it. */
> status = ocfs2_find_slot(osb);
> if (status < 0) {
> @@ -1821,6 +1839,9 @@ static int ocfs2_mount_volume(struct super_block *sb)
> mlog_errno(status);
>
> leave:
> + if (ocfs2_freeze_lock_supported(osb) && unlock_freeze)
> + ocfs2_freeze_unlock(osb, 0);
> +
> if (unlock_super)
> ocfs2_super_unlock(osb, 1);
>
What about cleanup in umount?
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Ocfs2-devel] [PATCH 2/3] ocfs2:freeze-thaw: initialization and cleanup
2010-01-15 1:53 ` Sunil Mushran
@ 2010-01-15 2:26 ` Wengang Wang
2010-01-15 2:36 ` Sunil Mushran
0 siblings, 1 reply; 7+ messages in thread
From: Wengang Wang @ 2010-01-15 2:26 UTC (permalink / raw)
To: ocfs2-devel
Hi Sunil,
On 10-01-14 17:53, Sunil Mushran wrote:
> Wengang Wang wrote:
>> this patch does some initialization and cleanup for freeze/thaw.
>
> Please capitalize the first letter of a sentence. ;)
Ok. :)
>
>> Authored-by: Tiger Yang <tiger.yang@oracle.com>
>> Authored-by: Wengang Wang <wen.gang.wang@oracle.com>
>> Signed-off-by: Wengang Wang <wen.gang.wang@oracle.com>
>> ---
>> fs/ocfs2/dlm/dlmapi.h | 1 +
>> fs/ocfs2/dlm/dlmlock.c | 12 ++++++++++++
>> fs/ocfs2/dlmglue.c | 24 ++++++++++++++++++++++++
>> fs/ocfs2/super.c | 21 +++++++++++++++++++++
>> 4 files changed, 58 insertions(+), 0 deletions(-)
>>
>> diff --git a/fs/ocfs2/dlm/dlmapi.h b/fs/ocfs2/dlm/dlmapi.h
>> index b5786a7..489c599 100644
>> --- a/fs/ocfs2/dlm/dlmapi.h
>> +++ b/fs/ocfs2/dlm/dlmapi.h
>> @@ -217,4 +217,5 @@ void dlm_register_eviction_cb(struct dlm_ctxt *dlm,
>> struct dlm_eviction_cb *cb);
>> void dlm_unregister_eviction_cb(struct dlm_eviction_cb *cb);
>> +int dlm_freeze_lock_supported(struct dlm_ctxt *dlm);
>> #endif /* DLMAPI_H */
>> diff --git a/fs/ocfs2/dlm/dlmlock.c b/fs/ocfs2/dlm/dlmlock.c
>> index 437698e..ad15a66 100644
>> --- a/fs/ocfs2/dlm/dlmlock.c
>> +++ b/fs/ocfs2/dlm/dlmlock.c
>> @@ -764,3 +764,15 @@ error:
>> return status;
>> }
>> EXPORT_SYMBOL_GPL(dlmlock);
>> +
>> +int dlm_freeze_lock_supported(struct dlm_ctxt *dlm)
>> +{
>> + if (dlm->dlm_locking_proto.pv_major == 1)
>> + return (dlm->dlm_locking_proto.pv_minor >= 1);
>> +
>> + if (dlm->dlm_locking_proto.pv_major > 1)
>> + return 1;
>> +
>> + return 0;
>> +}
>> +EXPORT_SYMBOL_GPL(dlm_freeze_lock_supported);
>>
>
> Change the fs protocol. We shouldn't need to export any symbols.
yes, as you said.
>> diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
>> index 0caa69e..cf88af2 100644
>> --- a/fs/ocfs2/dlmglue.c
>> +++ b/fs/ocfs2/dlmglue.c
>> @@ -115,6 +115,8 @@ static int ocfs2_check_refcount_downconvert(struct ocfs2_lock_res *lockres,
>> int new_level);
>> static int ocfs2_refcount_convert_worker(struct ocfs2_lock_res *lockres,
>> int blocking);
>> +static int ocfs2_check_freeze_downconvert(struct ocfs2_lock_res *lockres,
>> + int new_level);
>> #define mlog_meta_lvb(__level, __lockres)
>> ocfs2_dump_meta_lvb_info(__level, __PRETTY_FUNCTION__, __LINE__,
>> __lockres)
>> @@ -290,6 +292,11 @@ static struct ocfs2_lock_res_ops
>> ocfs2_refcount_block_lops = {
>> .flags = 0,
>> };
>> +static struct ocfs2_lock_res_ops ocfs2_freeze_lops = {
>> + .check_downconvert = ocfs2_check_freeze_downconvert,
>> + .flags = 0,
>> +};
>> +
>> static inline int ocfs2_is_inode_lock(struct ocfs2_lock_res *lockres)
>> {
>> return lockres->l_type == OCFS2_LOCK_TYPE_META ||
>> @@ -722,6 +729,15 @@ void ocfs2_refcount_lock_res_init(struct ocfs2_lock_res *lockres,
>> &ocfs2_refcount_block_lops, osb);
>> }
>> +static void ocfs2_freeze_lock_res_init(struct ocfs2_lock_res *res,
>> + struct ocfs2_super *osb)
>> +{
>> + ocfs2_lock_res_init_once(res);
>> + ocfs2_build_lock_name(OCFS2_LOCK_TYPE_FREEZE, 0, 0, res->l_name);
>> + ocfs2_lock_res_init_common(osb, res, OCFS2_LOCK_TYPE_FREEZE,
>> + &ocfs2_freeze_lops, osb);
>> +}
>> +
>> void ocfs2_lock_res_free(struct ocfs2_lock_res *res)
>> {
>> mlog_entry_void();
>> @@ -3006,6 +3022,7 @@ local:
>> ocfs2_rename_lock_res_init(&osb->osb_rename_lockres, osb);
>> ocfs2_nfs_sync_lock_res_init(&osb->osb_nfs_sync_lockres, osb);
>> ocfs2_orphan_scan_lock_res_init(&osb->osb_orphan_scan.os_lockres, osb);
>> + ocfs2_freeze_lock_res_init(&osb->osb_freeze_lockres, osb);
>> osb->cconn = conn;
>> @@ -3043,6 +3060,7 @@ void ocfs2_dlm_shutdown(struct ocfs2_super *osb,
>> ocfs2_lock_res_free(&osb->osb_rename_lockres);
>> ocfs2_lock_res_free(&osb->osb_nfs_sync_lockres);
>> ocfs2_lock_res_free(&osb->osb_orphan_scan.os_lockres);
>> + ocfs2_lock_res_free(&osb->osb_freeze_lockres);
>> ocfs2_cluster_disconnect(osb->cconn, hangup_pending);
>> osb->cconn = NULL;
>> @@ -3228,6 +3246,7 @@ static void ocfs2_drop_osb_locks(struct ocfs2_super *osb)
>> ocfs2_simple_drop_lockres(osb, &osb->osb_rename_lockres);
>> ocfs2_simple_drop_lockres(osb, &osb->osb_nfs_sync_lockres);
>> ocfs2_simple_drop_lockres(osb, &osb->osb_orphan_scan.os_lockres);
>> + ocfs2_simple_drop_lockres(osb, &osb->osb_freeze_lockres);
>> }
>> int ocfs2_drop_inode_locks(struct inode *inode)
>> @@ -3909,6 +3928,11 @@ void ocfs2_set_locking_protocol(void)
>> ocfs2_stack_glue_set_locking_protocol(&lproto);
>> }
>> +static int ocfs2_check_freeze_downconvert(struct ocfs2_lock_res
>> *lockres,
>> + int new_level)
>> +{
>> + return 1; //change me
>> +}
>>
>
> If it's going to return 1 always, then we don't need it.
yes. it's changed in patch 3.
to separate big patch into sub ones, it's so written.
and until here, ocfs2_check_freeze_downconvert() shouldn't effect
anything since we don't support freeze/thaw so far to the patch.
>
>> static void ocfs2_process_blocked_lock(struct ocfs2_super *osb,
>> struct ocfs2_lock_res *lockres)
>> diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
>> index 14f47d2..9127760 100644
>> --- a/fs/ocfs2/super.c
>> +++ b/fs/ocfs2/super.c
>> @@ -134,6 +134,7 @@ static void ocfs2_destroy_inode(struct inode *inode);
>> static int ocfs2_susp_quotas(struct ocfs2_super *osb, int unsuspend);
>> static int ocfs2_enable_quotas(struct ocfs2_super *osb);
>> static void ocfs2_disable_quotas(struct ocfs2_super *osb);
>> +static int ocfs2_freeze_lock_supported(struct ocfs2_super *osb);
>> static const struct super_operations ocfs2_sops = {
>> .statfs = ocfs2_statfs,
>> @@ -1772,10 +1773,18 @@ static int ocfs2_get_sector(struct super_block *sb,
>> return 0;
>> }
>> +static int ocfs2_freeze_lock_supported(struct ocfs2_super *osb)
>> +{
>> + if (!osb->cconn || !osb->cconn->cc_lockspace)
>> + return 0;
>> + return dlm_freeze_lock_supported(osb->cconn->cc_lockspace);
>> +}
>> +
>> static int ocfs2_mount_volume(struct super_block *sb)
>> {
>> int status = 0;
>> int unlock_super = 0;
>> + int unlock_freeze = 0;
>> struct ocfs2_super *osb = OCFS2_SB(sb);
>> mlog_entry_void();
>> @@ -1796,6 +1805,15 @@ static int ocfs2_mount_volume(struct super_block *sb)
>> }
>> unlock_super = 1;
>> + if (ocfs2_freeze_lock_supported(osb)) {
>> + status = ocfs2_freeze_lock(osb, 0);
>> + if (status < 0) {
>> + mlog_errno(status);
>> + goto leave;
>> + }
>> + unlock_freeze = 1;
>> + }
>> +
>> /* This will load up the node map and add ourselves to it. */
>> status = ocfs2_find_slot(osb);
>> if (status < 0) {
>> @@ -1821,6 +1839,9 @@ static int ocfs2_mount_volume(struct super_block *sb)
>> mlog_errno(status);
>> leave:
>> + if (ocfs2_freeze_lock_supported(osb) && unlock_freeze)
>> + ocfs2_freeze_unlock(osb, 0);
>> +
>> if (unlock_super)
>> ocfs2_super_unlock(osb, 1);
>>
>
> What about cleanup in umount?
if you meant ocfs2_freeze_unlock() in ocfs2_umount_volume() instead of
at the end of ocfs2_mount_volume(), it's NG.
if cleanup when umount, then we always have a ro_holder, freeze/thaw
doesn't work.
and we dont need to clean it up in umount if we already cleanup it in
mount_volume. this is because the lock/unlock is used in pairs.
regards,
wengang.
>
>>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Ocfs2-devel] [PATCH 2/3] ocfs2:freeze-thaw: initialization and cleanup
2010-01-15 2:26 ` Wengang Wang
@ 2010-01-15 2:36 ` Sunil Mushran
2010-01-15 2:41 ` Wengang Wang
0 siblings, 1 reply; 7+ messages in thread
From: Sunil Mushran @ 2010-01-15 2:36 UTC (permalink / raw)
To: ocfs2-devel
Wengang Wang wrote:
> if you meant ocfs2_freeze_unlock() in ocfs2_umount_volume() instead of
> at the end of ocfs2_mount_volume(), it's NG.
> if cleanup when umount, then we always have a ro_holder, freeze/thaw
> doesn't work.
>
> and we dont need to clean it up in umount if we already cleanup it in
> mount_volume. this is because the lock/unlock is used in pairs.
>
What's NG?
And I am not following you. Don't we have to free all locks during
umount?
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Ocfs2-devel] [PATCH 2/3] ocfs2:freeze-thaw: initialization and cleanup
2010-01-15 2:36 ` Sunil Mushran
@ 2010-01-15 2:41 ` Wengang Wang
2010-01-15 21:36 ` Sunil Mushran
0 siblings, 1 reply; 7+ messages in thread
From: Wengang Wang @ 2010-01-15 2:41 UTC (permalink / raw)
To: ocfs2-devel
Hi Sunil,
On 10-01-14 18:36, Sunil Mushran wrote:
> Wengang Wang wrote:
>> if you meant ocfs2_freeze_unlock() in ocfs2_umount_volume() instead of
>> at the end of ocfs2_mount_volume(), it's NG.
>> if cleanup when umount, then we always have a ro_holder, freeze/thaw
>> doesn't work.
>>
>> and we dont need to clean it up in umount if we already cleanup it in
>> mount_volume. this is because the lock/unlock is used in pairs.
>>
>
> What's NG?
>
NG is not good.
> And I am not following you. Don't we have to free all locks during
> umount?
we don't need to free it when we umount since we don't have that lock taken.
we lock/unlock it in mount, and in the downconvert action.
regards,
wengang.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Ocfs2-devel] [PATCH 2/3] ocfs2:freeze-thaw: initialization and cleanup
2010-01-15 2:41 ` Wengang Wang
@ 2010-01-15 21:36 ` Sunil Mushran
2010-01-17 8:52 ` Wengang Wang
0 siblings, 1 reply; 7+ messages in thread
From: Sunil Mushran @ 2010-01-15 21:36 UTC (permalink / raw)
To: ocfs2-devel
Wengang Wang wrote:
> we don't need to free it when we umount since we don't have that lock taken.
> we lock/unlock it in mount, and in the downconvert action.
We do have to free the lock. And you are doing it in
ocfs2_dlm_shutdown(). ;)
I was looking at the wrong place. Sorry for the confusion.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Ocfs2-devel] [PATCH 2/3] ocfs2:freeze-thaw: initialization and cleanup
2010-01-15 21:36 ` Sunil Mushran
@ 2010-01-17 8:52 ` Wengang Wang
0 siblings, 0 replies; 7+ messages in thread
From: Wengang Wang @ 2010-01-17 8:52 UTC (permalink / raw)
To: ocfs2-devel
Hi Sunil,
On 10-01-15 13:36, Sunil Mushran wrote:
> Wengang Wang wrote:
>> we don't need to free it when we umount since we don't have that lock taken.
>> we lock/unlock it in mount, and in the downconvert action.
>
> We do have to free the lock. And you are doing it in
> ocfs2_dlm_shutdown(). ;)
> I was looking at the wrong place. Sorry for the confusion.
Oh, no.
I am sorry too for I had a bad understand.
by "free", you meant real "free", not unlock. and I thought you meant
unlock.
regards,
wengang.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-01-17 8:52 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-09 18:00 [Ocfs2-devel] [PATCH 2/3] ocfs2:freeze-thaw: initialization and cleanup Wengang Wang
2010-01-15 1:53 ` Sunil Mushran
2010-01-15 2:26 ` Wengang Wang
2010-01-15 2:36 ` Sunil Mushran
2010-01-15 2:41 ` Wengang Wang
2010-01-15 21:36 ` Sunil Mushran
2010-01-17 8:52 ` Wengang Wang
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.