[Ocfs2-commits] mfasheh commits r1650 - branches/dlm-glue/src
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Mon Nov 15 20:21:26 CST 2004
Author: mfasheh
Date: 2004-11-15 20:21:24 -0600 (Mon, 15 Nov 2004)
New Revision: 1650
Modified:
branches/dlm-glue/src/dlmglue.c
branches/dlm-glue/src/dlmglue.h
branches/dlm-glue/src/inode.c
branches/dlm-glue/src/ocfs.h
Log:
* start cleanup up the lockres / lock structures. eventually we want
to squish them together.
Modified: branches/dlm-glue/src/dlmglue.c
===================================================================
--- branches/dlm-glue/src/dlmglue.c 2004-11-15 23:52:47 UTC (rev 1649)
+++ branches/dlm-glue/src/dlmglue.c 2004-11-16 02:21:24 UTC (rev 1650)
@@ -119,13 +119,15 @@
[OCFS_TYPE_META] ocfs2_bast_func,
[OCFS_TYPE_DATA] ocfs2_bast_func
};
-static int ocfs2_lock_create(struct inode *inode,
+static int ocfs2_lock_create(ocfs_super *osb,
+ ocfs2_lock_res *lockres,
ocfs2_lock *lock,
int level,
int flags);
static inline int ocfs2_may_continue_on_blocked_lock(ocfs2_lock *lock,
int wanted);
-static int ocfs2_cluster_lock(struct inode *inode,
+static int ocfs2_cluster_lock(ocfs_super *osb,
+ ocfs2_lock_res *lockres,
ocfs2_lock *lock,
int level);
static void ocfs2_unlock_ast_func(void *opaque, dlm_status status);
@@ -200,10 +202,9 @@
}
/* fill in new values as we add them to the lvb. */
-static inline void ocfs2_meta_lvb_get_values(struct inode *inode,
+static inline void ocfs2_meta_lvb_get_values(ocfs2_lock_res *lockres,
unsigned int *trunc_clusters)
{
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
ocfs2_lock *lock = &lockres->lr_meta;
ocfs2_meta_lvb *lvb;
@@ -261,9 +262,7 @@
memset(res, 0, sizeof(ocfs2_lock_res));
spin_lock_init(&res->lr_lock);
- init_waitqueue_head(&res->lr_busy);
- init_waitqueue_head (&res->lr_blocked);
- init_waitqueue_head(&res->lr_refreshing);
+ init_waitqueue_head(&res->l_event);
res->lr_inode = inode;
/* build the data and metadata locks. */
@@ -351,7 +350,7 @@
lock->l_blocking = LKM_NLMODE;
lock->l_flags &= ~OCFS2_LOCK_BLOCKED;
lock->l_flags &= ~OCFS2_LOCK_BUSY;
- wake_up_all(&lock->l_lockres->lr_blocked);
+ wake_up_all(&lock->l_lockres->l_event);
}
static inline void ocfs2_handle_data_convert_action(struct inode *inode,
@@ -476,7 +475,7 @@
* can catch it. */
lock->l_action = OCFS2_AST_INVALID;
spin_unlock(&lockres->lr_lock);
- wake_up_all(&lockres->lr_busy);
+ wake_up_all(&lockres->l_event);
}
static void ocfs2_bast_func(void *opaque, int level)
@@ -511,7 +510,8 @@
spin_unlock(&lockres->lr_lock);
}
-static int ocfs2_lock_create(struct inode *inode,
+static int ocfs2_lock_create(ocfs_super *osb,
+ ocfs2_lock_res *lockres,
ocfs2_lock *lock,
int level,
int flags)
@@ -519,8 +519,6 @@
int ret = 0;
enum ocfs2_lock_type type = lock->l_type;
dlm_status status;
- ocfs_super *osb = OCFS2_SB(inode->i_sb);
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
LOG_ENTRY();
@@ -569,7 +567,7 @@
ocfs2_lock *lock)
{
- wait_event_interruptible(lockres->lr_busy,
+ wait_event_interruptible(lockres->l_event,
!ocfs2_check_wait_flag(lockres,
lock,
OCFS2_LOCK_BUSY));
@@ -579,7 +577,7 @@
ocfs2_lock *lock)
{
- wait_event_interruptible(lockres->lr_blocked,
+ wait_event_interruptible(lockres->l_event,
!ocfs2_check_wait_flag(lockres,
lock,
OCFS2_LOCK_BLOCKED));
@@ -589,7 +587,7 @@
ocfs2_lock *lock)
{
- wait_event_interruptible(lockres->lr_blocked,
+ wait_event_interruptible(lockres->l_event,
!ocfs2_check_wait_flag(lockres,
lock,
OCFS2_LOCK_REFRESHING));}
@@ -605,14 +603,13 @@
return wanted <= ocfs2_highest_compat_lock_level(lock->l_blocking);
}
-static int ocfs2_cluster_lock(struct inode *inode,
+static int ocfs2_cluster_lock(ocfs_super *osb,
+ ocfs2_lock_res *lockres,
ocfs2_lock *lock,
int level)
{
int ret;
enum ocfs2_lock_type type = lock->l_type;
- ocfs_super *osb = OCFS2_SB(inode->i_sb);
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
dlm_status status;
LOG_ENTRY();
@@ -640,7 +637,7 @@
if (!(lock->l_flags & OCFS2_LOCK_ATTACHED)) {
/* lock has not been created yet. */
spin_unlock(&lockres->lr_lock);
- ret = ocfs2_lock_create(inode, lock, LKM_NLMODE, 0);
+ ret = ocfs2_lock_create(osb, lockres, lock, LKM_NLMODE, 0);
if (ret < 0) {
LOG_ERROR_STATUS(ret);
goto bail;
@@ -703,7 +700,8 @@
int ocfs2_create_new_inode_locks(struct inode *inode)
{
int status;
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+ ocfs_super *osb = OCFS2_SB(inode->i_sb);
+ ocfs2_lock_res *lockres;
ocfs2_lock *lock;
OCFS_ASSERT(inode);
@@ -719,22 +717,24 @@
* on a resource which has an invalid one -- we'll set it
* valid when we release the EX. */
+ lockres = &OCFS_I(inode)->ip_meta_lockres;
lock = &lockres->lr_meta;
OCFS_ASSERT(!(lock->l_flags & OCFS2_LOCK_ATTACHED));
lock->l_flags |= OCFS2_LOCK_LOCAL;
- status = ocfs2_lock_create(inode, lock, LKM_EXMODE, LKM_LOCAL);
+ status = ocfs2_lock_create(osb, lockres, lock, LKM_EXMODE, LKM_LOCAL);
lock->l_flags &= ~OCFS2_LOCK_LOCAL;
if (status < 0) {
LOG_ERROR_STATUS(status);
goto bail;
}
+ lockres = &OCFS_I(inode)->ip_data_lockres;
lock = &lockres->lr_data;
OCFS_ASSERT(!(lock->l_flags & OCFS2_LOCK_ATTACHED));
lock->l_flags |= OCFS2_LOCK_LOCAL;
- status = ocfs2_lock_create(inode, lock, LKM_EXMODE, LKM_LOCAL);
+ status = ocfs2_lock_create(osb, lockres, lock, LKM_EXMODE, LKM_LOCAL);
lock->l_flags &= ~OCFS2_LOCK_LOCAL;
if (status < 0) {
LOG_ERROR_STATUS(status);
@@ -751,17 +751,19 @@
int write)
{
int status, level;
+ ocfs2_lock_res *lockres;
ocfs2_lock *lock;
OCFS_ASSERT(inode);
LOG_ENTRY();
- lock = &(OCFS_I(inode)->ip_lockres.lr_data);
+ lockres = &OCFS_I(inode)->ip_data_lockres;
+ lock = &lockres->lr_data;
level = write ? LKM_EXMODE : LKM_PRMODE;
- status = ocfs2_cluster_lock(inode, lock, level);
+ status = ocfs2_cluster_lock(OCFS2_SB(inode->i_sb), lockres, lock, level);
if (status < 0 && status != -EINTR)
LOG_ERROR_STATUS(status);
@@ -800,7 +802,7 @@
int write)
{
int level;
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+ ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_data_lockres;
ocfs2_lock *lock = &lockres->lr_data;
level = write ? LKM_EXMODE : LKM_PRMODE;
@@ -829,7 +831,7 @@
static void __ocfs2_stuff_meta_lvb(struct inode *inode)
{
ocfs_inode_private *oip = OCFS_I(inode);
- ocfs2_lock_res *lockres = &oip->ip_lockres;
+ ocfs2_lock_res *lockres = &oip->ip_meta_lockres;
ocfs2_meta_lvb *lvb = (ocfs2_meta_lvb *) lockres->lr_meta.l_lksb.lvb;
lvb->lvb_iclusters = oip->ip_clusters;
@@ -846,7 +848,7 @@
static void ocfs2_refresh_inode_from_lvb(struct inode *inode)
{
ocfs_inode_private *oip = OCFS_I(inode);
- ocfs2_lock_res *lockres = &oip->ip_lockres;
+ ocfs2_lock_res *lockres = &oip->ip_meta_lockres;
ocfs2_meta_lvb *lvb = (ocfs2_meta_lvb *) lockres->lr_meta.l_lksb.lvb;
/* We're safe here without the lockres lock... */
@@ -867,7 +869,7 @@
static void ocfs2_reset_meta_lvb_values(struct inode *inode)
{
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+ ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_meta_lockres;
ocfs2_lock *lock = &lockres->lr_meta;
ocfs2_meta_lvb *lvb = (ocfs2_meta_lvb *) lock->l_lksb.lvb;
u32 i_clusters;
@@ -911,7 +913,7 @@
ocfs2_lock *lock;
ocfs2_dinode *fe;
- lockres = &OCFS_I(inode)->ip_lockres;
+ lockres = &OCFS_I(inode)->ip_meta_lockres;
lock = &lockres->lr_meta;
refresh_check:
@@ -940,7 +942,7 @@
if (!(OCFS_I(inode)->ip_flags & OCFS_INODE_BITMAP) &&
ocfs2_lvb_is_trustable(lock)) {
/* yay, fastpath! */
- ocfs2_meta_lvb_get_values(inode, &trustable_clusters);
+ ocfs2_meta_lvb_get_values(lockres, &trustable_clusters);
ocfs2_refresh_inode_from_lvb(inode);
} else {
/* Boo, we have to go to disk. */
@@ -972,7 +974,7 @@
ocfs2_extent_map_trunc(inode, trustable_clusters);
- ocfs2_set_local_seq_from_lvb(&OCFS_I(inode)->ip_lockres.lr_meta);
+ ocfs2_set_local_seq_from_lvb(&OCFS_I(inode)->ip_meta_lockres.lr_meta);
ocfs2_reset_meta_lvb_values(inode);
spin_lock(&lockres->lr_lock);
@@ -980,7 +982,7 @@
lock->l_flags &= ~OCFS2_LOCK_NEEDS_REFRESH;
spin_unlock(&lockres->lr_lock);
- wake_up_all(&lockres->lr_refreshing);
+ wake_up_all(&lockres->l_event);
bail:
return status;
}
@@ -1016,11 +1018,11 @@
goto bail;
}
- lockres = &OCFS_I(inode)->ip_lockres;
- lock = &(OCFS_I(inode)->ip_lockres.lr_meta);
+ lockres = &OCFS_I(inode)->ip_meta_lockres;
+ lock = &(OCFS_I(inode)->ip_meta_lockres.lr_meta);
level = ex ? LKM_EXMODE : LKM_PRMODE;
- status = ocfs2_cluster_lock(inode, lock, level);
+ status = ocfs2_cluster_lock(osb, lockres, lock, level);
if (status < 0) {
if (status != -EINTR)
LOG_ERROR_STATUS(status);
@@ -1069,7 +1071,7 @@
int ex)
{
int level;
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+ ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_meta_lockres;
ocfs2_lock *lock = &lockres->lr_meta;
level = ex ? LKM_EXMODE : LKM_PRMODE;
@@ -1180,7 +1182,7 @@
lock->l_flags &= ~OCFS2_LOCK_BUSY;
spin_unlock(&lockres->lr_lock);
- wake_up_all(&lockres->lr_busy);
+ wake_up_all(&lockres->l_event);
}
/* BEWARE: called with lockres lock, and always drops it. */
@@ -1236,9 +1238,10 @@
int ocfs2_drop_inode_locks(struct inode *inode)
{
int status, err;
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+ ocfs2_lock_res *lockres;
ocfs2_lock *meta_lock;
+ lockres = &OCFS_I(inode)->ip_data_lockres;
spin_lock(&lockres->lr_lock);
err = __ocfs2_drop_lock(OCFS2_SB(inode->i_sb), lockres,
&lockres->lr_data);
@@ -1249,6 +1252,7 @@
/* the metadata lock requires a bit more work as we have an
* LVB to worry about. */
+ lockres = &OCFS_I(inode)->ip_meta_lockres;
meta_lock = &lockres->lr_meta;
spin_lock(&lockres->lr_lock);
if (meta_lock->l_flags & OCFS2_LOCK_ATTACHED) {
@@ -1381,7 +1385,7 @@
{
int new_level;
int set_lvb = 0;
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+ ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_meta_lockres;
ocfs2_lock *lock = &lockres->lr_meta;
spin_lock(&lockres->lr_lock);
@@ -1430,7 +1434,7 @@
static int ocfs2_process_blocked_data(struct inode *inode,
int *requeue)
{
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+ ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_data_lockres;
ocfs2_lock *lock = &lockres->lr_meta;
int blocking;
int new_level;
Modified: branches/dlm-glue/src/dlmglue.h
===================================================================
--- branches/dlm-glue/src/dlmglue.h 2004-11-15 23:52:47 UTC (rev 1649)
+++ branches/dlm-glue/src/dlmglue.h 2004-11-16 02:21:24 UTC (rev 1650)
@@ -95,6 +95,9 @@
int ex);
void ocfs2_meta_unlock(struct inode *inode,
int ex);
+int ocfs2_super_lock(ocfs_super *osb, int ex);
+void ocfs2_super_unlock(ocfs_super *osb);
+
static inline void ocfs2_kick_vote_thread(ocfs_super *osb)
{
atomic_set(&osb->wake_vote_task, 1);
@@ -107,7 +110,7 @@
static inline void ocfs2_lvb_set_trunc_clusters(struct inode *inode,
unsigned int trunc_clusters)
{
- ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_lockres;
+ ocfs2_lock_res *lockres = &OCFS_I(inode)->ip_meta_lockres;
ocfs2_lock *lock = &lockres->lr_meta;
ocfs2_meta_lvb *lvb;
Modified: branches/dlm-glue/src/inode.c
===================================================================
--- branches/dlm-glue/src/inode.c 2004-11-15 23:52:47 UTC (rev 1649)
+++ branches/dlm-glue/src/inode.c 2004-11-16 02:21:24 UTC (rev 1650)
@@ -426,7 +426,12 @@
break;
}
- status = ocfs2_lock_res_init(inode, &OCFS_I(inode)->ip_lockres);
+ status = ocfs2_lock_res_init(inode, &OCFS_I(inode)->ip_meta_lockres);
+ if (status < 0) {
+ LOG_ERROR_STATUS(status);
+ goto bail;
+ }
+ status = ocfs2_lock_res_init(inode, &OCFS_I(inode)->ip_data_lockres);
if (status < 0)
LOG_ERROR_STATUS(status);
bail:
@@ -821,7 +826,8 @@
if (status < 0)
LOG_ERROR_STATUS(status);
- ocfs2_lock_res_free(&OCFS_I(inode)->ip_lockres);
+ ocfs2_lock_res_free(&OCFS_I(inode)->ip_meta_lockres);
+ ocfs2_lock_res_free(&OCFS_I(inode)->ip_data_lockres);
/* clean out the inode private ... why?! */
memset(inode->u.generic_ip, 0, sizeof(ocfs_inode_private));
Modified: branches/dlm-glue/src/ocfs.h
===================================================================
--- branches/dlm-glue/src/ocfs.h 2004-11-15 23:52:47 UTC (rev 1649)
+++ branches/dlm-glue/src/ocfs.h 2004-11-16 02:21:24 UTC (rev 1650)
@@ -231,10 +231,7 @@
ocfs2_lock lr_meta;
ocfs2_lock lr_data;
- /* should i just make these two a single wait queue? */
- wait_queue_head_t lr_busy;
- wait_queue_head_t lr_blocked;
- wait_queue_head_t lr_refreshing;
+ wait_queue_head_t l_event;
} ocfs2_lock_res;
/* OCFS2 Inode Private Data */
@@ -246,7 +243,8 @@
u64 ip_blkno;
- ocfs2_lock_res ip_lockres;
+ ocfs2_lock_res ip_meta_lockres;
+ ocfs2_lock_res ip_data_lockres;
struct list_head ip_blocked_list;
/* protects allocation changes on this inode. */
More information about the Ocfs2-commits
mailing list