[Ocfs2-devel] [PATCH 1/3] ocfs2:freeze-thaw: add freeze cluster lock
Wengang Wang
wen.gang.wang at oracle.com
Thu Jan 14 18:28:17 PST 2010
Hi Sunil,
On 10-01-14 17:47, Sunil Mushran wrote:
> Wengang Wang wrote:
>> add cluster lock for freeze/thaw.
>> change dlm version from 1.0 to 1.1
>>
>> Authored-by: Tiger Yang <tiger.yang at oracle.com>
>> Authored-by: Wengang Wang <wen.gang.wang at oracle.com>
>> Signed-off-by: Wengang Wang <wen.gang.wang at oracle.com>
>>
>
> Removed Authored by tags. Just note that these patches
> were originally authored by Tiger.
Ok, sure.
>
>> diff --git a/fs/ocfs2/dlm/dlmdomain.c b/fs/ocfs2/dlm/dlmdomain.c
>> index 0334000..6e8bcb6 100644
>> --- a/fs/ocfs2/dlm/dlmdomain.c
>> +++ b/fs/ocfs2/dlm/dlmdomain.c
>> @@ -128,10 +128,14 @@ static DECLARE_WAIT_QUEUE_HEAD(dlm_domain_events);
>> * will have a negotiated version with the same major number and a minor
>> * number equal or smaller. The dlm_ctxt->dlm_locking_proto field should
>> * be used to determine what a running domain is actually using.
>> + *
>> + * dlm protocal history:
>> + * 1.0: base
>> + * 1.1: freeze lock support added
>> */
>> static const struct dlm_protocol_version dlm_protocol = {
>> .pv_major = 1,
>> - .pv_minor = 0,
>> + .pv_minor = 1,
>> };
>>
>
> Sorry. I told you to change the dlm protocol. But it should
> be the fs protocol as we are adding a new lock type. We would
> change the dlm protocol if were were adding a new dlm message
> type, etc.
>
> Same change. Up the minor by one.
Ok.
>> #define DLM_DOMAIN_BACKOFF_MS 200
>> diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
>> index c5e4a49..0caa69e 100644
>> --- a/fs/ocfs2/dlmglue.c
>> +++ b/fs/ocfs2/dlmglue.c
>> @@ -2894,6 +2894,34 @@ static const struct file_operations ocfs2_dlm_debug_fops = {
>> .llseek = seq_lseek,
>> };
>> +int ocfs2_freeze_lock(struct ocfs2_super *osb, int ex)
>> +{
>> + int ret;
>> + int level = ex ? LKM_EXMODE : LKM_PRMODE;
>> + struct ocfs2_lock_res *lockres = &osb->osb_freeze_lockres;
>> +
>> + if (ocfs2_is_hard_readonly(osb))
>> + return -EROFS;
>> +
>> + if (ocfs2_mount_local(osb))
>> + return 0;
>> +
>> + ret = ocfs2_cluster_lock(osb, lockres, level, 0, 0);
>> + if (ret < 0)
>> + mlog_errno(ret);
>> +
>> + return ret;
>> +}
>> +
>> +void ocfs2_freeze_unlock(struct ocfs2_super *osb, int ex)
>> +{
>> + int level = ex ? LKM_EXMODE : LKM_PRMODE;
>> + struct ocfs2_lock_res *lockres = &osb->osb_freeze_lockres;
>> +
>> + if (!ocfs2_mount_local(osb))
>> + ocfs2_cluster_unlock(osb, lockres, level);
>> +}
>> +
>> static int ocfs2_dlm_init_debug(struct ocfs2_super *osb)
>> {
>> int ret = 0;
>> diff --git a/fs/ocfs2/dlmglue.h b/fs/ocfs2/dlmglue.h
>> index d1ce48e..8687b81 100644
>> --- a/fs/ocfs2/dlmglue.h
>> +++ b/fs/ocfs2/dlmglue.h
>> @@ -155,6 +155,8 @@ struct ocfs2_refcount_tree;
>> int ocfs2_refcount_lock(struct ocfs2_refcount_tree *ref_tree, int ex);
>> void ocfs2_refcount_unlock(struct ocfs2_refcount_tree *ref_tree, int ex);
>> +int ocfs2_freeze_lock(struct ocfs2_super *osb, int ex);
>> +void ocfs2_freeze_unlock(struct ocfs2_super *osb, int ex);
>> void ocfs2_mark_lockres_freeing(struct ocfs2_lock_res *lockres);
>> void ocfs2_simple_drop_lockres(struct ocfs2_super *osb,
>> diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h
>> index d963d86..bf66978 100644
>> --- a/fs/ocfs2/ocfs2.h
>> +++ b/fs/ocfs2/ocfs2.h
>> @@ -355,6 +355,7 @@ struct ocfs2_super
>> struct ocfs2_lock_res osb_super_lockres;
>> struct ocfs2_lock_res osb_rename_lockres;
>> struct ocfs2_lock_res osb_nfs_sync_lockres;
>> + struct ocfs2_lock_res osb_freeze_lockres;
>> struct ocfs2_dlm_debug *osb_dlm_debug;
>> struct dentry *osb_debug_root;
>> diff --git a/fs/ocfs2/ocfs2_lockid.h b/fs/ocfs2/ocfs2_lockid.h
>> index d277aab..3c29924 100644
>> --- a/fs/ocfs2/ocfs2_lockid.h
>> +++ b/fs/ocfs2/ocfs2_lockid.h
>> @@ -50,6 +50,7 @@ enum ocfs2_lock_type {
>> OCFS2_LOCK_TYPE_NFS_SYNC,
>> OCFS2_LOCK_TYPE_ORPHAN_SCAN,
>> OCFS2_LOCK_TYPE_REFCOUNT,
>> + OCFS2_LOCK_TYPE_FREEZE,
>> OCFS2_NUM_LOCK_TYPES
>> };
>>
>
> OCFS2_LOCK_TYPE_FREEZEFS sounds better.
Ok.
>> @@ -93,6 +94,9 @@ static inline char ocfs2_lock_type_char(enum ocfs2_lock_type type)
>> case OCFS2_LOCK_TYPE_REFCOUNT:
>> c = 'T';
>> break;
>> + case OCFS2_LOCK_TYPE_FREEZE:
>> + c = 'Z';
>> + break;
>> default:
>> c = '\0';
>> }
>> @@ -115,6 +119,7 @@ static char *ocfs2_lock_type_strings[] = {
>> [OCFS2_LOCK_TYPE_NFS_SYNC] = "NFSSync",
>> [OCFS2_LOCK_TYPE_ORPHAN_SCAN] = "OrphanScan",
>> [OCFS2_LOCK_TYPE_REFCOUNT] = "Refcount",
>> + [OCFS2_LOCK_TYPE_FREEZE] = "Freeze",
>> };
>> static inline const char *ocfs2_lock_type_string(enum ocfs2_lock_type
>> type)
>>
>
I will post the version 2 after all v1 patches commented.
regards,
wengang.
More information about the Ocfs2-devel
mailing list