ocfs2 fixes
PATCH 1/1 ocfs2 fixes
Hi Linus,
Here's a set of Ocfs2 fixes for post-rc5.
--Mark
Please pull from 'upstream-linus' branch ofgit://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git upstream-linus
to receive the following updates:
fs/ocfs2/cluster/tcp.c | 9 ++-- fs/ocfs2/dlm/dlmcommon.h | 21 +++++---- fs/ocfs2/dlm/dlmconvert.c | 2 +- fs/ocfs2/dlm/dlmdomain.c | 103 ++++++++++++++++++++++++++++---------------- fs/ocfs2/dlm/dlmmaster.c | 18 ++++++- fs/ocfs2/dlm/dlmrecovery.c | 57 ++++++++++++++++++++---- fs/ocfs2/dlm/dlmthread.c | 6 ++- fs/ocfs2/dlmglue.c | 2 +- fs/ocfs2/resize.c | 2 +- 9 files changed, 151 insertions(+), 69 deletions(-)
Andrew Morton (1):
fs/ocfs2/dlm/dlmdomain.c: fix printk warning
Jan Engelhardt (1):
[OCFS2]: constify function pointer tables
Joel Becker (1):
ocfs2: Fix endian bug in o2dlm protocol negotiation.
Sunil Mushran (5):
ocfs2/dlm: Add missing dlm_lock_put()s
ocfs2/dlm: Add missing dlm_lockres_put()s in migration path ocfs2/dlm: Add missing dlm_lockres_put()s
ocfs2/dlm: Print message showing the recovery master ocfs2/dlm: dlm_thread should not sleep while holding the dlm_spinlock
Tao Ma (3):
ocfs2: Use dlm_print_one_lock_resource for lock resource print
ocfs2: Fix an endian bug in online resize.
ocfs2: Fix NULL pointer dereferences in o2net
fs/ocfs2/cluster/tcp.c +4 -5
@@ -451,9 +451,9 @@ static void o2net_set_nn_state(struct o2net_node *nn,/* delay if we're withing a RECONNECT_DELAY of the * last attempt */ delay = (nn->nn_last_connect_attempt + -msecs_to_jiffies (o2net_reconnect_delay (sc->sc_node))) +msecs_to_jiffies (o2net_reconnect_delay (NULL ))) - jiffies; -if (delay >msecs_to_jiffies (o2net_reconnect_delay (sc->sc_node))) +if (delay >msecs_to_jiffies (o2net_reconnect_delay (NULL ))) delay =0 ;mlog (ML_CONN ,"queueing conn attempt in %lu jiffies\n" , delay);queue_delayed_work (o2net_wq, &nn->nn_connect_work, delay);
@@ -1552,12 +1552,11 @@ static void o2net_connect_expired(struct work_struct *work)spin_lock (&nn->nn_lock);if (!nn->nn_sc_valid) { -struct o2nm_node *node = nn->nn_sc->sc_node;mlog (ML_ERROR ,"no connection established with node %u after " "%u.%u seconds, giving up and returning errors.\n" ,o2net_num_from_nn (nn), -o2net_idle_timeout (node) /1000 , -o2net_idle_timeout (node) %1000 ); +o2net_idle_timeout (NULL ) /1000 , +o2net_idle_timeout (NULL ) %1000 );o2net_set_nn_state (nn,NULL ,0 , -ENOTCONN ); }
fs/ocfs2/dlm/dlmcommon.h +12 -9
@@ -176,6 +176,7 @@ struct dlm_mig_lockres_priv {struct dlm_lock_resource *lockres;u8 real_master; +u8 extra_ref; };struct dlm_assert_master_priv
@@ -602,17 +603,19 @@ enum dlm_query_join_response_code { JOIN_PROTOCOL_MISMATCH, }; +struct dlm_query_join_packet { +u8 code;/* Response code. dlm_minor and fs_minor +are only valid if this is JOIN_OK */ +u8 dlm_minor;/* The minor version of the protocol the +dlm is speaking. */ +u8 fs_minor;/* The minor version of the protocol the +filesystem is speaking. */ +u8 reserved; +}; +union dlm_query_join_response {u32 intval; -struct { -u8 code;/* Response code. dlm_minor and fs_minor -are only valid if this is JOIN_OK */ -u8 dlm_minor;/* The minor version of the protocol the -dlm is speaking. */ -u8 fs_minor;/* The minor version of the protocol the -filesystem is speaking. */ -u8 reserved; - } packet; +struct dlm_query_join_packet packet; };struct dlm_lock_request
fs/ocfs2/dlm/dlmconvert.c +1 -1
@@ -487,7 +487,7 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data,"cookie=%u:%llu\n" ,dlm_get_lock_cookie_node (be64_to_cpu (cnv->cookie)), dlm_get_lock_cookie_seq(be64_to_cpu(cnv->cookie))); -__dlm_print_one_lock_resource (res); +dlm_print_one_lock_resource (res); goto leave; }
fs/ocfs2/dlm/dlmdomain.c +66 -37
209 lines not on this page · raw message
fs/ocfs2/dlm/dlmmaster.c +15 -3
@@ -1663,7 +1663,12 @@ way_up_top:dlm_put_mle (tmpmle); } send_response: - +/* +* __dlm_lookup_lockres() grabbed a reference to this lockres. +* The reference is released by dlm_assert_master_worker() under +* the call to dlm_dispatch_assert_master(). If +* dlm_assert_master_worker() isn't called, we drop it here. +*/ if (dispatch_assert) {if (response !=DLM_MASTER_RESP_YES )mlog (ML_ERROR ,"invalid response %d\n" , response);
@@ -1678,7 +1683,11 @@ send_response:if (ret <0 ) {mlog (ML_ERROR ,"failed to dispatch assert master work\n" ); response =DLM_MASTER_RESP_ERROR ; +dlm_lockres_put (res); } + }else { +if (res) +dlm_lockres_put (res); }dlm_put (dlm);
@@ -2348,7 +2357,7 @@ int dlm_deref_lockres_handler(struct o2net_msg *msg, u32 len, void *data,mlog (ML_ERROR ,"%s:%.*s: node %u trying to drop ref " "but it is already dropped!\n" , dlm->name, res->lockname.len, res->lockname.name, node); -__dlm_print_one_lock_resource (res); +dlm_print_one_lock_resource (res); } ret =0 ; goto done;
@@ -2408,7 +2417,7 @@ static void dlm_deref_lockres_worker(struct dlm_work_item *item, void *data)mlog (ML_ERROR ,"%s:%.*s: node %u trying to drop ref " "but it is already dropped!\n" , dlm->name, res->lockname.len, res->lockname.name, node); -__dlm_print_one_lock_resource (res); +dlm_print_one_lock_resource (res); }dlm_lockres_put (res);
@@ -2933,6 +2942,9 @@ static void dlm_remove_nonlocal_locks(struct dlm_ctxt *dlm,dlm_lockres_clear_refmap_bit (lock->ml.node, res);list_del_init (&lock->list);dlm_lock_put (lock); +/* In a normal unlock, we would have added a +* DLM_UNLOCK_FREE_LOCK action. Force it. */ +dlm_lock_put (lock); } } queue++;
fs/ocfs2/dlm/dlmrecovery.c +47 -10
156 lines not on this page · raw message
fs/ocfs2/dlm/dlmthread.c +4 -2
@@ -176,12 +176,14 @@ static int dlm_purge_lockres(struct dlm_ctxt *dlm, res->lockname.name, master);if (!master) { +/* drop spinlock... retake below */ +spin_unlock (&dlm->spinlock); +spin_lock (&res->spinlock);/* This ensures that clear refmap is sent after the set */ __dlm_wait_on_lockres_flags (res,DLM_LOCK_RES_SETREF_INPROG );spin_unlock (&res->spinlock); -/* drop spinlock to do messaging, retake below */ -spin_unlock (&dlm->spinlock); +/* clear our bit from the master's refmap, ignore errors */ ret =dlm_drop_lockres_ref (dlm, res);if (ret <0 ) {
fs/ocfs2/dlmglue.c +1 -1
@@ -2409,7 +2409,7 @@ static int ocfs2_dlm_seq_show(struct seq_file *m, void *v)return 0 ; } -static struct seq_operations ocfs2_dlm_seq_ops = { +static const struct seq_operations ocfs2_dlm_seq_ops = { .start = ocfs2_dlm_seq_start, .stop = ocfs2_dlm_seq_stop, .next = ocfs2_dlm_seq_next,
fs/ocfs2/resize.c +1 -1
@@ -597,7 +597,7 @@ int ocfs2_group_add(struct inode *inode, struct ocfs2_new_group_input *input)memset (cr,0 ,sizeof (struct ocfs2_chain_rec )); } - cr->c_blkno =le64_to_cpu (input->group); + cr->c_blkno =cpu_to_le64 (input->group);le32_add_cpu (&cr->c_total, input->clusters * cl_bpc);le32_add_cpu (&cr->c_free, input->frees * cl_bpc);