[PATCH] md: locking fix

- fix mddev_lock() usage bugs in md_attr_show() and md_attr_store().
[they did not anticipate the possibility of getting a signal]

- remove mddev_lock_uninterruptible() [unused]

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Ingo Molnar and committed by Linus Torvalds 5dc5cf7d 72b38d43

+12 -12
+12 -12
drivers/md/md.c
··· 279 279 return mutex_lock_interruptible(&mddev->reconfig_mutex); 280 280 } 281 281 282 - static inline void mddev_lock_uninterruptible(mddev_t * mddev) 283 - { 284 - mutex_lock(&mddev->reconfig_mutex); 285 - } 286 - 287 282 static inline int mddev_trylock(mddev_t * mddev) 288 283 { 289 284 return mutex_trylock(&mddev->reconfig_mutex); ··· 2453 2458 2454 2459 if (!entry->show) 2455 2460 return -EIO; 2456 - mddev_lock(mddev); 2457 - rv = entry->show(mddev, page); 2458 - mddev_unlock(mddev); 2461 + rv = mddev_lock(mddev); 2462 + if (!rv) { 2463 + rv = entry->show(mddev, page); 2464 + mddev_unlock(mddev); 2465 + } 2459 2466 return rv; 2460 2467 } 2461 2468 ··· 2471 2474 2472 2475 if (!entry->store) 2473 2476 return -EIO; 2474 - mddev_lock(mddev); 2475 - rv = entry->store(mddev, page, length); 2476 - mddev_unlock(mddev); 2477 + rv = mddev_lock(mddev); 2478 + if (!rv) { 2479 + rv = entry->store(mddev, page, length); 2480 + mddev_unlock(mddev); 2481 + } 2477 2482 return rv; 2478 2483 } 2479 2484 ··· 4340 4341 return 0; 4341 4342 } 4342 4343 4343 - if (mddev_lock(mddev)!=0) 4344 + if (mddev_lock(mddev) < 0) 4344 4345 return -EINTR; 4346 + 4345 4347 if (mddev->pers || mddev->raid_disks || !list_empty(&mddev->disks)) { 4346 4348 seq_printf(seq, "%s : %sactive", mdname(mddev), 4347 4349 mddev->pers ? "" : "in");