diff options
Diffstat (limited to 'fs/ocfs2/dlm/dlmast.c')
-rw-r--r-- | fs/ocfs2/dlm/dlmast.c | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/fs/ocfs2/dlm/dlmast.c b/fs/ocfs2/dlm/dlmast.c index 644bee55d8ba..d07ddbe4b283 100644 --- a/fs/ocfs2/dlm/dlmast.c +++ b/fs/ocfs2/dlm/dlmast.c | |||
@@ -275,6 +275,7 @@ int dlm_proxy_ast_handler(struct o2net_msg *msg, u32 len, void *data, | |||
275 | struct list_head *iter, *head=NULL; | 275 | struct list_head *iter, *head=NULL; |
276 | u64 cookie; | 276 | u64 cookie; |
277 | u32 flags; | 277 | u32 flags; |
278 | u8 node; | ||
278 | 279 | ||
279 | if (!dlm_grab(dlm)) { | 280 | if (!dlm_grab(dlm)) { |
280 | dlm_error(DLM_REJECTED); | 281 | dlm_error(DLM_REJECTED); |
@@ -286,18 +287,21 @@ int dlm_proxy_ast_handler(struct o2net_msg *msg, u32 len, void *data, | |||
286 | 287 | ||
287 | name = past->name; | 288 | name = past->name; |
288 | locklen = past->namelen; | 289 | locklen = past->namelen; |
289 | cookie = be64_to_cpu(past->cookie); | 290 | cookie = past->cookie; |
290 | flags = be32_to_cpu(past->flags); | 291 | flags = be32_to_cpu(past->flags); |
292 | node = past->node_idx; | ||
291 | 293 | ||
292 | if (locklen > DLM_LOCKID_NAME_MAX) { | 294 | if (locklen > DLM_LOCKID_NAME_MAX) { |
293 | ret = DLM_IVBUFLEN; | 295 | ret = DLM_IVBUFLEN; |
294 | mlog(ML_ERROR, "Invalid name length in proxy ast handler!\n"); | 296 | mlog(ML_ERROR, "Invalid name length (%d) in proxy ast " |
297 | "handler!\n", locklen); | ||
295 | goto leave; | 298 | goto leave; |
296 | } | 299 | } |
297 | 300 | ||
298 | if ((flags & (LKM_PUT_LVB|LKM_GET_LVB)) == | 301 | if ((flags & (LKM_PUT_LVB|LKM_GET_LVB)) == |
299 | (LKM_PUT_LVB|LKM_GET_LVB)) { | 302 | (LKM_PUT_LVB|LKM_GET_LVB)) { |
300 | mlog(ML_ERROR, "both PUT and GET lvb specified\n"); | 303 | mlog(ML_ERROR, "Both PUT and GET lvb specified, (0x%x)\n", |
304 | flags); | ||
301 | ret = DLM_BADARGS; | 305 | ret = DLM_BADARGS; |
302 | goto leave; | 306 | goto leave; |
303 | } | 307 | } |
@@ -310,22 +314,21 @@ int dlm_proxy_ast_handler(struct o2net_msg *msg, u32 len, void *data, | |||
310 | if (past->type != DLM_AST && | 314 | if (past->type != DLM_AST && |
311 | past->type != DLM_BAST) { | 315 | past->type != DLM_BAST) { |
312 | mlog(ML_ERROR, "Unknown ast type! %d, cookie=%u:%llu" | 316 | mlog(ML_ERROR, "Unknown ast type! %d, cookie=%u:%llu" |
313 | "name=%.*s\n", past->type, | 317 | "name=%.*s, node=%u\n", past->type, |
314 | dlm_get_lock_cookie_node(cookie), | 318 | dlm_get_lock_cookie_node(be64_to_cpu(cookie)), |
315 | dlm_get_lock_cookie_seq(cookie), | 319 | dlm_get_lock_cookie_seq(be64_to_cpu(cookie)), |
316 | locklen, name); | 320 | locklen, name, node); |
317 | ret = DLM_IVLOCKID; | 321 | ret = DLM_IVLOCKID; |
318 | goto leave; | 322 | goto leave; |
319 | } | 323 | } |
320 | 324 | ||
321 | res = dlm_lookup_lockres(dlm, name, locklen); | 325 | res = dlm_lookup_lockres(dlm, name, locklen); |
322 | if (!res) { | 326 | if (!res) { |
323 | mlog(0, "got %sast for unknown lockres! " | 327 | mlog(0, "Got %sast for unknown lockres! cookie=%u:%llu, " |
324 | "cookie=%u:%llu, name=%.*s, namelen=%u\n", | 328 | "name=%.*s, node=%u\n", (past->type == DLM_AST ? "" : "b"), |
325 | past->type == DLM_AST ? "" : "b", | 329 | dlm_get_lock_cookie_node(be64_to_cpu(cookie)), |
326 | dlm_get_lock_cookie_node(cookie), | 330 | dlm_get_lock_cookie_seq(be64_to_cpu(cookie)), |
327 | dlm_get_lock_cookie_seq(cookie), | 331 | locklen, name, node); |
328 | locklen, name, locklen); | ||
329 | ret = DLM_IVLOCKID; | 332 | ret = DLM_IVLOCKID; |
330 | goto leave; | 333 | goto leave; |
331 | } | 334 | } |
@@ -337,12 +340,12 @@ int dlm_proxy_ast_handler(struct o2net_msg *msg, u32 len, void *data, | |||
337 | 340 | ||
338 | spin_lock(&res->spinlock); | 341 | spin_lock(&res->spinlock); |
339 | if (res->state & DLM_LOCK_RES_RECOVERING) { | 342 | if (res->state & DLM_LOCK_RES_RECOVERING) { |
340 | mlog(0, "responding with DLM_RECOVERING!\n"); | 343 | mlog(0, "Responding with DLM_RECOVERING!\n"); |
341 | ret = DLM_RECOVERING; | 344 | ret = DLM_RECOVERING; |
342 | goto unlock_out; | 345 | goto unlock_out; |
343 | } | 346 | } |
344 | if (res->state & DLM_LOCK_RES_MIGRATING) { | 347 | if (res->state & DLM_LOCK_RES_MIGRATING) { |
345 | mlog(0, "responding with DLM_MIGRATING!\n"); | 348 | mlog(0, "Responding with DLM_MIGRATING!\n"); |
346 | ret = DLM_MIGRATING; | 349 | ret = DLM_MIGRATING; |
347 | goto unlock_out; | 350 | goto unlock_out; |
348 | } | 351 | } |
@@ -351,7 +354,7 @@ int dlm_proxy_ast_handler(struct o2net_msg *msg, u32 len, void *data, | |||
351 | lock = NULL; | 354 | lock = NULL; |
352 | list_for_each(iter, head) { | 355 | list_for_each(iter, head) { |
353 | lock = list_entry (iter, struct dlm_lock, list); | 356 | lock = list_entry (iter, struct dlm_lock, list); |
354 | if (be64_to_cpu(lock->ml.cookie) == cookie) | 357 | if (lock->ml.cookie == cookie) |
355 | goto do_ast; | 358 | goto do_ast; |
356 | } | 359 | } |
357 | 360 | ||
@@ -363,15 +366,15 @@ int dlm_proxy_ast_handler(struct o2net_msg *msg, u32 len, void *data, | |||
363 | 366 | ||
364 | list_for_each(iter, head) { | 367 | list_for_each(iter, head) { |
365 | lock = list_entry (iter, struct dlm_lock, list); | 368 | lock = list_entry (iter, struct dlm_lock, list); |
366 | if (be64_to_cpu(lock->ml.cookie) == cookie) | 369 | if (lock->ml.cookie == cookie) |
367 | goto do_ast; | 370 | goto do_ast; |
368 | } | 371 | } |
369 | 372 | ||
370 | mlog(0, "got %sast for unknown lock! cookie=%u:%llu, " | 373 | mlog(0, "Got %sast for unknown lock! cookie=%u:%llu, name=%.*s, " |
371 | "name=%.*s, namelen=%u\n", past->type == DLM_AST ? "" : "b", | 374 | "node=%u\n", past->type == DLM_AST ? "" : "b", |
372 | dlm_get_lock_cookie_node(cookie), | 375 | dlm_get_lock_cookie_node(be64_to_cpu(cookie)), |
373 | dlm_get_lock_cookie_seq(cookie), | 376 | dlm_get_lock_cookie_seq(be64_to_cpu(cookie)), |
374 | locklen, name, locklen); | 377 | locklen, name, node); |
375 | 378 | ||
376 | ret = DLM_NORMAL; | 379 | ret = DLM_NORMAL; |
377 | unlock_out: | 380 | unlock_out: |
@@ -383,8 +386,8 @@ do_ast: | |||
383 | if (past->type == DLM_AST) { | 386 | if (past->type == DLM_AST) { |
384 | /* do not alter lock refcount. switching lists. */ | 387 | /* do not alter lock refcount. switching lists. */ |
385 | list_move_tail(&lock->list, &res->granted); | 388 | list_move_tail(&lock->list, &res->granted); |
386 | mlog(0, "ast: adding to granted list... type=%d, " | 389 | mlog(0, "ast: Adding to granted list... type=%d, " |
387 | "convert_type=%d\n", lock->ml.type, lock->ml.convert_type); | 390 | "convert_type=%d\n", lock->ml.type, lock->ml.convert_type); |
388 | if (lock->ml.convert_type != LKM_IVMODE) { | 391 | if (lock->ml.convert_type != LKM_IVMODE) { |
389 | lock->ml.type = lock->ml.convert_type; | 392 | lock->ml.type = lock->ml.convert_type; |
390 | lock->ml.convert_type = LKM_IVMODE; | 393 | lock->ml.convert_type = LKM_IVMODE; |
@@ -408,7 +411,6 @@ do_ast: | |||
408 | dlm_do_local_bast(dlm, res, lock, past->blocked_type); | 411 | dlm_do_local_bast(dlm, res, lock, past->blocked_type); |
409 | 412 | ||
410 | leave: | 413 | leave: |
411 | |||
412 | if (res) | 414 | if (res) |
413 | dlm_lockres_put(res); | 415 | dlm_lockres_put(res); |
414 | 416 | ||