diff options
author | Christoph Hellwig <hch@lst.de> | 2007-05-17 10:03:13 -0400 |
---|---|---|
committer | Mark Fasheh <mark.fasheh@oracle.com> | 2007-07-10 20:19:49 -0400 |
commit | 800deef3f6f87fee3a2e89cf7237a1f20c1a78d7 (patch) | |
tree | adc036024ba3ee6e04fe8c9cdd3b9abb4a2af14d /fs/ocfs2/dlm/dlmrecovery.c | |
parent | e6df3a663a5d1ee68aeae7f007197f272700d9cc (diff) |
[PATCH] ocfs2: use list_for_each_entry where benefical
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Diffstat (limited to 'fs/ocfs2/dlm/dlmrecovery.c')
-rw-r--r-- | fs/ocfs2/dlm/dlmrecovery.c | 77 |
1 files changed, 25 insertions, 52 deletions
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c index 671c4ed58ee2..74d276ec276f 100644 --- a/fs/ocfs2/dlm/dlmrecovery.c +++ b/fs/ocfs2/dlm/dlmrecovery.c | |||
@@ -158,8 +158,7 @@ void dlm_dispatch_work(struct work_struct *work) | |||
158 | struct dlm_ctxt *dlm = | 158 | struct dlm_ctxt *dlm = |
159 | container_of(work, struct dlm_ctxt, dispatched_work); | 159 | container_of(work, struct dlm_ctxt, dispatched_work); |
160 | LIST_HEAD(tmp_list); | 160 | LIST_HEAD(tmp_list); |
161 | struct list_head *iter, *iter2; | 161 | struct dlm_work_item *item, *next; |
162 | struct dlm_work_item *item; | ||
163 | dlm_workfunc_t *workfunc; | 162 | dlm_workfunc_t *workfunc; |
164 | int tot=0; | 163 | int tot=0; |
165 | 164 | ||
@@ -167,13 +166,12 @@ void dlm_dispatch_work(struct work_struct *work) | |||
167 | list_splice_init(&dlm->work_list, &tmp_list); | 166 | list_splice_init(&dlm->work_list, &tmp_list); |
168 | spin_unlock(&dlm->work_lock); | 167 | spin_unlock(&dlm->work_lock); |
169 | 168 | ||
170 | list_for_each_safe(iter, iter2, &tmp_list) { | 169 | list_for_each_entry(item, &tmp_list, list) { |
171 | tot++; | 170 | tot++; |
172 | } | 171 | } |
173 | mlog(0, "%s: work thread has %d work items\n", dlm->name, tot); | 172 | mlog(0, "%s: work thread has %d work items\n", dlm->name, tot); |
174 | 173 | ||
175 | list_for_each_safe(iter, iter2, &tmp_list) { | 174 | list_for_each_entry_safe(item, next, &tmp_list, list) { |
176 | item = list_entry(iter, struct dlm_work_item, list); | ||
177 | workfunc = item->func; | 175 | workfunc = item->func; |
178 | list_del_init(&item->list); | 176 | list_del_init(&item->list); |
179 | 177 | ||
@@ -549,7 +547,6 @@ static int dlm_remaster_locks(struct dlm_ctxt *dlm, u8 dead_node) | |||
549 | { | 547 | { |
550 | int status = 0; | 548 | int status = 0; |
551 | struct dlm_reco_node_data *ndata; | 549 | struct dlm_reco_node_data *ndata; |
552 | struct list_head *iter; | ||
553 | int all_nodes_done; | 550 | int all_nodes_done; |
554 | int destroy = 0; | 551 | int destroy = 0; |
555 | int pass = 0; | 552 | int pass = 0; |
@@ -567,8 +564,7 @@ static int dlm_remaster_locks(struct dlm_ctxt *dlm, u8 dead_node) | |||
567 | 564 | ||
568 | /* safe to access the node data list without a lock, since this | 565 | /* safe to access the node data list without a lock, since this |
569 | * process is the only one to change the list */ | 566 | * process is the only one to change the list */ |
570 | list_for_each(iter, &dlm->reco.node_data) { | 567 | list_for_each_entry(ndata, &dlm->reco.node_data, list) { |
571 | ndata = list_entry (iter, struct dlm_reco_node_data, list); | ||
572 | BUG_ON(ndata->state != DLM_RECO_NODE_DATA_INIT); | 568 | BUG_ON(ndata->state != DLM_RECO_NODE_DATA_INIT); |
573 | ndata->state = DLM_RECO_NODE_DATA_REQUESTING; | 569 | ndata->state = DLM_RECO_NODE_DATA_REQUESTING; |
574 | 570 | ||
@@ -655,9 +651,7 @@ static int dlm_remaster_locks(struct dlm_ctxt *dlm, u8 dead_node) | |||
655 | * done, or if anyone died */ | 651 | * done, or if anyone died */ |
656 | all_nodes_done = 1; | 652 | all_nodes_done = 1; |
657 | spin_lock(&dlm_reco_state_lock); | 653 | spin_lock(&dlm_reco_state_lock); |
658 | list_for_each(iter, &dlm->reco.node_data) { | 654 | list_for_each_entry(ndata, &dlm->reco.node_data, list) { |
659 | ndata = list_entry (iter, struct dlm_reco_node_data, list); | ||
660 | |||
661 | mlog(0, "checking recovery state of node %u\n", | 655 | mlog(0, "checking recovery state of node %u\n", |
662 | ndata->node_num); | 656 | ndata->node_num); |
663 | switch (ndata->state) { | 657 | switch (ndata->state) { |
@@ -774,16 +768,14 @@ static int dlm_init_recovery_area(struct dlm_ctxt *dlm, u8 dead_node) | |||
774 | 768 | ||
775 | static void dlm_destroy_recovery_area(struct dlm_ctxt *dlm, u8 dead_node) | 769 | static void dlm_destroy_recovery_area(struct dlm_ctxt *dlm, u8 dead_node) |
776 | { | 770 | { |
777 | struct list_head *iter, *iter2; | 771 | struct dlm_reco_node_data *ndata, *next; |
778 | struct dlm_reco_node_data *ndata; | ||
779 | LIST_HEAD(tmplist); | 772 | LIST_HEAD(tmplist); |
780 | 773 | ||
781 | spin_lock(&dlm_reco_state_lock); | 774 | spin_lock(&dlm_reco_state_lock); |
782 | list_splice_init(&dlm->reco.node_data, &tmplist); | 775 | list_splice_init(&dlm->reco.node_data, &tmplist); |
783 | spin_unlock(&dlm_reco_state_lock); | 776 | spin_unlock(&dlm_reco_state_lock); |
784 | 777 | ||
785 | list_for_each_safe(iter, iter2, &tmplist) { | 778 | list_for_each_entry_safe(ndata, next, &tmplist, list) { |
786 | ndata = list_entry (iter, struct dlm_reco_node_data, list); | ||
787 | list_del_init(&ndata->list); | 779 | list_del_init(&ndata->list); |
788 | kfree(ndata); | 780 | kfree(ndata); |
789 | } | 781 | } |
@@ -876,7 +868,6 @@ static void dlm_request_all_locks_worker(struct dlm_work_item *item, void *data) | |||
876 | struct dlm_lock_resource *res; | 868 | struct dlm_lock_resource *res; |
877 | struct dlm_ctxt *dlm; | 869 | struct dlm_ctxt *dlm; |
878 | LIST_HEAD(resources); | 870 | LIST_HEAD(resources); |
879 | struct list_head *iter; | ||
880 | int ret; | 871 | int ret; |
881 | u8 dead_node, reco_master; | 872 | u8 dead_node, reco_master; |
882 | int skip_all_done = 0; | 873 | int skip_all_done = 0; |
@@ -920,8 +911,7 @@ static void dlm_request_all_locks_worker(struct dlm_work_item *item, void *data) | |||
920 | 911 | ||
921 | /* any errors returned will be due to the new_master dying, | 912 | /* any errors returned will be due to the new_master dying, |
922 | * the dlm_reco_thread should detect this */ | 913 | * the dlm_reco_thread should detect this */ |
923 | list_for_each(iter, &resources) { | 914 | list_for_each_entry(res, &resources, recovering) { |
924 | res = list_entry (iter, struct dlm_lock_resource, recovering); | ||
925 | ret = dlm_send_one_lockres(dlm, res, mres, reco_master, | 915 | ret = dlm_send_one_lockres(dlm, res, mres, reco_master, |
926 | DLM_MRES_RECOVERY); | 916 | DLM_MRES_RECOVERY); |
927 | if (ret < 0) { | 917 | if (ret < 0) { |
@@ -983,7 +973,6 @@ int dlm_reco_data_done_handler(struct o2net_msg *msg, u32 len, void *data, | |||
983 | { | 973 | { |
984 | struct dlm_ctxt *dlm = data; | 974 | struct dlm_ctxt *dlm = data; |
985 | struct dlm_reco_data_done *done = (struct dlm_reco_data_done *)msg->buf; | 975 | struct dlm_reco_data_done *done = (struct dlm_reco_data_done *)msg->buf; |
986 | struct list_head *iter; | ||
987 | struct dlm_reco_node_data *ndata = NULL; | 976 | struct dlm_reco_node_data *ndata = NULL; |
988 | int ret = -EINVAL; | 977 | int ret = -EINVAL; |
989 | 978 | ||
@@ -1000,8 +989,7 @@ int dlm_reco_data_done_handler(struct o2net_msg *msg, u32 len, void *data, | |||
1000 | dlm->reco.dead_node, done->node_idx, dlm->node_num); | 989 | dlm->reco.dead_node, done->node_idx, dlm->node_num); |
1001 | 990 | ||
1002 | spin_lock(&dlm_reco_state_lock); | 991 | spin_lock(&dlm_reco_state_lock); |
1003 | list_for_each(iter, &dlm->reco.node_data) { | 992 | list_for_each_entry(ndata, &dlm->reco.node_data, list) { |
1004 | ndata = list_entry (iter, struct dlm_reco_node_data, list); | ||
1005 | if (ndata->node_num != done->node_idx) | 993 | if (ndata->node_num != done->node_idx) |
1006 | continue; | 994 | continue; |
1007 | 995 | ||
@@ -1049,13 +1037,11 @@ static void dlm_move_reco_locks_to_list(struct dlm_ctxt *dlm, | |||
1049 | struct list_head *list, | 1037 | struct list_head *list, |
1050 | u8 dead_node) | 1038 | u8 dead_node) |
1051 | { | 1039 | { |
1052 | struct dlm_lock_resource *res; | 1040 | struct dlm_lock_resource *res, *next; |
1053 | struct list_head *iter, *iter2; | ||
1054 | struct dlm_lock *lock; | 1041 | struct dlm_lock *lock; |
1055 | 1042 | ||
1056 | spin_lock(&dlm->spinlock); | 1043 | spin_lock(&dlm->spinlock); |
1057 | list_for_each_safe(iter, iter2, &dlm->reco.resources) { | 1044 | list_for_each_entry_safe(res, next, &dlm->reco.resources, recovering) { |
1058 | res = list_entry (iter, struct dlm_lock_resource, recovering); | ||
1059 | /* always prune any $RECOVERY entries for dead nodes, | 1045 | /* always prune any $RECOVERY entries for dead nodes, |
1060 | * otherwise hangs can occur during later recovery */ | 1046 | * otherwise hangs can occur during later recovery */ |
1061 | if (dlm_is_recovery_lock(res->lockname.name, | 1047 | if (dlm_is_recovery_lock(res->lockname.name, |
@@ -1252,7 +1238,7 @@ int dlm_send_one_lockres(struct dlm_ctxt *dlm, struct dlm_lock_resource *res, | |||
1252 | struct dlm_migratable_lockres *mres, | 1238 | struct dlm_migratable_lockres *mres, |
1253 | u8 send_to, u8 flags) | 1239 | u8 send_to, u8 flags) |
1254 | { | 1240 | { |
1255 | struct list_head *queue, *iter; | 1241 | struct list_head *queue; |
1256 | int total_locks, i; | 1242 | int total_locks, i; |
1257 | u64 mig_cookie = 0; | 1243 | u64 mig_cookie = 0; |
1258 | struct dlm_lock *lock; | 1244 | struct dlm_lock *lock; |
@@ -1278,9 +1264,7 @@ int dlm_send_one_lockres(struct dlm_ctxt *dlm, struct dlm_lock_resource *res, | |||
1278 | total_locks = 0; | 1264 | total_locks = 0; |
1279 | for (i=DLM_GRANTED_LIST; i<=DLM_BLOCKED_LIST; i++) { | 1265 | for (i=DLM_GRANTED_LIST; i<=DLM_BLOCKED_LIST; i++) { |
1280 | queue = dlm_list_idx_to_ptr(res, i); | 1266 | queue = dlm_list_idx_to_ptr(res, i); |
1281 | list_for_each(iter, queue) { | 1267 | list_for_each_entry(lock, queue, list) { |
1282 | lock = list_entry (iter, struct dlm_lock, list); | ||
1283 | |||
1284 | /* add another lock. */ | 1268 | /* add another lock. */ |
1285 | total_locks++; | 1269 | total_locks++; |
1286 | if (!dlm_add_lock_to_array(lock, mres, i)) | 1270 | if (!dlm_add_lock_to_array(lock, mres, i)) |
@@ -1717,7 +1701,6 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm, | |||
1717 | struct dlm_lockstatus *lksb = NULL; | 1701 | struct dlm_lockstatus *lksb = NULL; |
1718 | int ret = 0; | 1702 | int ret = 0; |
1719 | int i, j, bad; | 1703 | int i, j, bad; |
1720 | struct list_head *iter; | ||
1721 | struct dlm_lock *lock = NULL; | 1704 | struct dlm_lock *lock = NULL; |
1722 | u8 from = O2NM_MAX_NODES; | 1705 | u8 from = O2NM_MAX_NODES; |
1723 | unsigned int added = 0; | 1706 | unsigned int added = 0; |
@@ -1755,8 +1738,7 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm, | |||
1755 | spin_lock(&res->spinlock); | 1738 | spin_lock(&res->spinlock); |
1756 | for (j = DLM_GRANTED_LIST; j <= DLM_BLOCKED_LIST; j++) { | 1739 | for (j = DLM_GRANTED_LIST; j <= DLM_BLOCKED_LIST; j++) { |
1757 | tmpq = dlm_list_idx_to_ptr(res, j); | 1740 | tmpq = dlm_list_idx_to_ptr(res, j); |
1758 | list_for_each(iter, tmpq) { | 1741 | list_for_each_entry(lock, tmpq, list) { |
1759 | lock = list_entry (iter, struct dlm_lock, list); | ||
1760 | if (lock->ml.cookie != ml->cookie) | 1742 | if (lock->ml.cookie != ml->cookie) |
1761 | lock = NULL; | 1743 | lock = NULL; |
1762 | else | 1744 | else |
@@ -1930,8 +1912,8 @@ void dlm_move_lockres_to_recovery_list(struct dlm_ctxt *dlm, | |||
1930 | struct dlm_lock_resource *res) | 1912 | struct dlm_lock_resource *res) |
1931 | { | 1913 | { |
1932 | int i; | 1914 | int i; |
1933 | struct list_head *queue, *iter, *iter2; | 1915 | struct list_head *queue; |
1934 | struct dlm_lock *lock; | 1916 | struct dlm_lock *lock, *next; |
1935 | 1917 | ||
1936 | res->state |= DLM_LOCK_RES_RECOVERING; | 1918 | res->state |= DLM_LOCK_RES_RECOVERING; |
1937 | if (!list_empty(&res->recovering)) { | 1919 | if (!list_empty(&res->recovering)) { |
@@ -1947,8 +1929,7 @@ void dlm_move_lockres_to_recovery_list(struct dlm_ctxt *dlm, | |||
1947 | /* find any pending locks and put them back on proper list */ | 1929 | /* find any pending locks and put them back on proper list */ |
1948 | for (i=DLM_BLOCKED_LIST; i>=DLM_GRANTED_LIST; i--) { | 1930 | for (i=DLM_BLOCKED_LIST; i>=DLM_GRANTED_LIST; i--) { |
1949 | queue = dlm_list_idx_to_ptr(res, i); | 1931 | queue = dlm_list_idx_to_ptr(res, i); |
1950 | list_for_each_safe(iter, iter2, queue) { | 1932 | list_for_each_entry_safe(lock, next, queue, list) { |
1951 | lock = list_entry (iter, struct dlm_lock, list); | ||
1952 | dlm_lock_get(lock); | 1933 | dlm_lock_get(lock); |
1953 | if (lock->convert_pending) { | 1934 | if (lock->convert_pending) { |
1954 | /* move converting lock back to granted */ | 1935 | /* move converting lock back to granted */ |
@@ -2013,18 +1994,15 @@ static void dlm_finish_local_lockres_recovery(struct dlm_ctxt *dlm, | |||
2013 | u8 dead_node, u8 new_master) | 1994 | u8 dead_node, u8 new_master) |
2014 | { | 1995 | { |
2015 | int i; | 1996 | int i; |
2016 | struct list_head *iter, *iter2; | ||
2017 | struct hlist_node *hash_iter; | 1997 | struct hlist_node *hash_iter; |
2018 | struct hlist_head *bucket; | 1998 | struct hlist_head *bucket; |
2019 | 1999 | struct dlm_lock_resource *res, *next; | |
2020 | struct dlm_lock_resource *res; | ||
2021 | 2000 | ||
2022 | mlog_entry_void(); | 2001 | mlog_entry_void(); |
2023 | 2002 | ||
2024 | assert_spin_locked(&dlm->spinlock); | 2003 | assert_spin_locked(&dlm->spinlock); |
2025 | 2004 | ||
2026 | list_for_each_safe(iter, iter2, &dlm->reco.resources) { | 2005 | list_for_each_entry_safe(res, next, &dlm->reco.resources, recovering) { |
2027 | res = list_entry (iter, struct dlm_lock_resource, recovering); | ||
2028 | if (res->owner == dead_node) { | 2006 | if (res->owner == dead_node) { |
2029 | list_del_init(&res->recovering); | 2007 | list_del_init(&res->recovering); |
2030 | spin_lock(&res->spinlock); | 2008 | spin_lock(&res->spinlock); |
@@ -2099,7 +2077,7 @@ static inline int dlm_lvb_needs_invalidation(struct dlm_lock *lock, int local) | |||
2099 | static void dlm_revalidate_lvb(struct dlm_ctxt *dlm, | 2077 | static void dlm_revalidate_lvb(struct dlm_ctxt *dlm, |
2100 | struct dlm_lock_resource *res, u8 dead_node) | 2078 | struct dlm_lock_resource *res, u8 dead_node) |
2101 | { | 2079 | { |
2102 | struct list_head *iter, *queue; | 2080 | struct list_head *queue; |
2103 | struct dlm_lock *lock; | 2081 | struct dlm_lock *lock; |
2104 | int blank_lvb = 0, local = 0; | 2082 | int blank_lvb = 0, local = 0; |
2105 | int i; | 2083 | int i; |
@@ -2121,8 +2099,7 @@ static void dlm_revalidate_lvb(struct dlm_ctxt *dlm, | |||
2121 | 2099 | ||
2122 | for (i=DLM_GRANTED_LIST; i<=DLM_CONVERTING_LIST; i++) { | 2100 | for (i=DLM_GRANTED_LIST; i<=DLM_CONVERTING_LIST; i++) { |
2123 | queue = dlm_list_idx_to_ptr(res, i); | 2101 | queue = dlm_list_idx_to_ptr(res, i); |
2124 | list_for_each(iter, queue) { | 2102 | list_for_each_entry(lock, queue, list) { |
2125 | lock = list_entry (iter, struct dlm_lock, list); | ||
2126 | if (lock->ml.node == search_node) { | 2103 | if (lock->ml.node == search_node) { |
2127 | if (dlm_lvb_needs_invalidation(lock, local)) { | 2104 | if (dlm_lvb_needs_invalidation(lock, local)) { |
2128 | /* zero the lksb lvb and lockres lvb */ | 2105 | /* zero the lksb lvb and lockres lvb */ |
@@ -2143,8 +2120,7 @@ static void dlm_revalidate_lvb(struct dlm_ctxt *dlm, | |||
2143 | static void dlm_free_dead_locks(struct dlm_ctxt *dlm, | 2120 | static void dlm_free_dead_locks(struct dlm_ctxt *dlm, |
2144 | struct dlm_lock_resource *res, u8 dead_node) | 2121 | struct dlm_lock_resource *res, u8 dead_node) |
2145 | { | 2122 | { |
2146 | struct list_head *iter, *tmpiter; | 2123 | struct dlm_lock *lock, *next; |
2147 | struct dlm_lock *lock; | ||
2148 | unsigned int freed = 0; | 2124 | unsigned int freed = 0; |
2149 | 2125 | ||
2150 | /* this node is the lockres master: | 2126 | /* this node is the lockres master: |
@@ -2155,24 +2131,21 @@ static void dlm_free_dead_locks(struct dlm_ctxt *dlm, | |||
2155 | assert_spin_locked(&res->spinlock); | 2131 | assert_spin_locked(&res->spinlock); |
2156 | 2132 | ||
2157 | /* TODO: check pending_asts, pending_basts here */ | 2133 | /* TODO: check pending_asts, pending_basts here */ |
2158 | list_for_each_safe(iter, tmpiter, &res->granted) { | 2134 | list_for_each_entry_safe(lock, next, &res->granted, list) { |
2159 | lock = list_entry (iter, struct dlm_lock, list); | ||
2160 | if (lock->ml.node == dead_node) { | 2135 | if (lock->ml.node == dead_node) { |
2161 | list_del_init(&lock->list); | 2136 | list_del_init(&lock->list); |
2162 | dlm_lock_put(lock); | 2137 | dlm_lock_put(lock); |
2163 | freed++; | 2138 | freed++; |
2164 | } | 2139 | } |
2165 | } | 2140 | } |
2166 | list_for_each_safe(iter, tmpiter, &res->converting) { | 2141 | list_for_each_entry_safe(lock, next, &res->converting, list) { |
2167 | lock = list_entry (iter, struct dlm_lock, list); | ||
2168 | if (lock->ml.node == dead_node) { | 2142 | if (lock->ml.node == dead_node) { |
2169 | list_del_init(&lock->list); | 2143 | list_del_init(&lock->list); |
2170 | dlm_lock_put(lock); | 2144 | dlm_lock_put(lock); |
2171 | freed++; | 2145 | freed++; |
2172 | } | 2146 | } |
2173 | } | 2147 | } |
2174 | list_for_each_safe(iter, tmpiter, &res->blocked) { | 2148 | list_for_each_entry_safe(lock, next, &res->blocked, list) { |
2175 | lock = list_entry (iter, struct dlm_lock, list); | ||
2176 | if (lock->ml.node == dead_node) { | 2149 | if (lock->ml.node == dead_node) { |
2177 | list_del_init(&lock->list); | 2150 | list_del_init(&lock->list); |
2178 | dlm_lock_put(lock); | 2151 | dlm_lock_put(lock); |