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