Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 104285
b: refs/heads/master
c: f2ea68c
h: refs/heads/master
i:
  104283: 2b819cd
v: v3
  • Loading branch information
NeilBrown committed Jul 21, 2008
1 parent c4c9997 commit 0a4d7cb
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d6e2215052810678bc9782fd980b52706fc71f50
refs/heads/master: f2ea68cf42aafdd93393b6b8b20fc3c2b5f4390c
9 changes: 6 additions & 3 deletions trunk/drivers/md/md.c
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,7 @@ static mddev_t * mddev_find(dev_t unit)
INIT_LIST_HEAD(&new->all_mddevs);
init_timer(&new->safemode_timer);
atomic_set(&new->active, 1);
atomic_set(&new->openers, 0);
spin_lock_init(&new->write_lock);
init_waitqueue_head(&new->sb_wait);
init_waitqueue_head(&new->recovery_wait);
Expand Down Expand Up @@ -2695,14 +2696,14 @@ array_state_store(mddev_t *mddev, const char *buf, size_t len)
break;
case clear:
/* stopping an active array */
if (atomic_read(&mddev->active) > 1)
if (atomic_read(&mddev->openers) > 0)
return -EBUSY;
err = do_md_stop(mddev, 0, 0);
break;
case inactive:
/* stopping an active array */
if (mddev->pers) {
if (atomic_read(&mddev->active) > 1)
if (atomic_read(&mddev->openers) > 0)
return -EBUSY;
err = do_md_stop(mddev, 2, 0);
} else
Expand Down Expand Up @@ -3816,7 +3817,7 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
int err = 0;
struct gendisk *disk = mddev->gendisk;

if (atomic_read(&mddev->active) > 1 + is_open) {
if (atomic_read(&mddev->openers) > is_open) {
printk("md: %s still in use.\n",mdname(mddev));
return -EBUSY;
}
Expand Down Expand Up @@ -5014,6 +5015,7 @@ static int md_open(struct inode *inode, struct file *file)

err = 0;
mddev_get(mddev);
atomic_inc(&mddev->openers);
mddev_unlock(mddev);

check_disk_change(inode->i_bdev);
Expand All @@ -5026,6 +5028,7 @@ static int md_release(struct inode *inode, struct file * file)
mddev_t *mddev = inode->i_bdev->bd_disk->private_data;

BUG_ON(!mddev);
atomic_dec(&mddev->openers);
mddev_put(mddev);

return 0;
Expand Down
3 changes: 2 additions & 1 deletion trunk/include/linux/raid/md_k.h
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,8 @@ struct mddev_s

int in_sync; /* know to not need resync */
struct mutex reconfig_mutex;
atomic_t active;
atomic_t active; /* general refcount */
atomic_t openers; /* number of active opens */

int changed; /* true if we might need to reread partition info */
int degraded; /* whether md should consider
Expand Down

0 comments on commit 0a4d7cb

Please sign in to comment.