Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 2576
b: refs/heads/master
c: fca4d84
h: refs/heads/master
v: v3
  • Loading branch information
NeilBrown authored and Linus Torvalds committed Jun 22, 2005
1 parent 3db3459 commit a7e70e1
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 39 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: c361777fb9347a4d16b82272f7d3b234e94bef2d
refs/heads/master: fca4d848f0e6fafdc2b25f8a0cf1e76935f13ac2
58 changes: 24 additions & 34 deletions trunk/drivers/md/md.c
Original file line number Diff line number Diff line change
Expand Up @@ -3203,37 +3203,6 @@ void md_write_end(mddev_t *mddev)
}
}

static inline void md_enter_safemode(mddev_t *mddev)
{
if (!mddev->safemode) return;
if (mddev->safemode == 2 &&
(atomic_read(&mddev->writes_pending) || mddev->in_sync ||
mddev->recovery_cp != MaxSector))
return; /* avoid the lock */
mddev_lock_uninterruptible(mddev);
if (mddev->safemode && !atomic_read(&mddev->writes_pending) &&
!mddev->in_sync && mddev->recovery_cp == MaxSector) {
mddev->in_sync = 1;
md_update_sb(mddev);
}
mddev_unlock(mddev);

if (mddev->safemode == 1)
mddev->safemode = 0;
}

void md_handle_safemode(mddev_t *mddev)
{
if (signal_pending(current)) {
printk(KERN_INFO "md: %s in immediate safe mode\n",
mdname(mddev));
mddev->safemode = 2;
flush_signals(current);
}
md_enter_safemode(mddev);
}


static DECLARE_WAIT_QUEUE_HEAD(resync_wait);

#define SYNC_MARKS 10
Expand Down Expand Up @@ -3449,7 +3418,6 @@ static void md_do_sync(mddev_t *mddev)
mddev->recovery_cp = MaxSector;
}

md_enter_safemode(mddev);
skip:
mddev->curr_resync = 0;
wake_up(&resync_wait);
Expand Down Expand Up @@ -3490,14 +3458,37 @@ void md_check_recovery(mddev_t *mddev)

if (mddev->ro)
return;

if (signal_pending(current)) {
if (mddev->pers->sync_request) {
printk(KERN_INFO "md: %s in immediate safe mode\n",
mdname(mddev));
mddev->safemode = 2;
}
flush_signals(current);
}

if ( ! (
mddev->sb_dirty ||
test_bit(MD_RECOVERY_NEEDED, &mddev->recovery) ||
test_bit(MD_RECOVERY_DONE, &mddev->recovery)
test_bit(MD_RECOVERY_DONE, &mddev->recovery) ||
(mddev->safemode == 1) ||
(mddev->safemode == 2 && ! atomic_read(&mddev->writes_pending)
&& !mddev->in_sync && mddev->recovery_cp == MaxSector)
))
return;

if (mddev_trylock(mddev)==0) {
int spares =0;

if (mddev->safemode && !atomic_read(&mddev->writes_pending) &&
!mddev->in_sync && mddev->recovery_cp == MaxSector) {
mddev->in_sync = 1;
mddev->sb_dirty = 1;
}
if (mddev->safemode == 1)
mddev->safemode = 0;

if (mddev->sb_dirty)
md_update_sb(mddev);
if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) &&
Expand Down Expand Up @@ -3741,7 +3732,6 @@ EXPORT_SYMBOL(md_error);
EXPORT_SYMBOL(md_done_sync);
EXPORT_SYMBOL(md_write_start);
EXPORT_SYMBOL(md_write_end);
EXPORT_SYMBOL(md_handle_safemode);
EXPORT_SYMBOL(md_register_thread);
EXPORT_SYMBOL(md_unregister_thread);
EXPORT_SYMBOL(md_wakeup_thread);
Expand Down
1 change: 0 additions & 1 deletion trunk/drivers/md/raid1.c
Original file line number Diff line number Diff line change
Expand Up @@ -931,7 +931,6 @@ static void raid1d(mddev_t *mddev)
mdk_rdev_t *rdev;

md_check_recovery(mddev);
md_handle_safemode(mddev);

for (;;) {
char b[BDEVNAME_SIZE];
Expand Down
1 change: 0 additions & 1 deletion trunk/drivers/md/raid10.c
Original file line number Diff line number Diff line change
Expand Up @@ -1216,7 +1216,6 @@ static void raid10d(mddev_t *mddev)
mdk_rdev_t *rdev;

md_check_recovery(mddev);
md_handle_safemode(mddev);

for (;;) {
char b[BDEVNAME_SIZE];
Expand Down
1 change: 0 additions & 1 deletion trunk/drivers/md/raid5.c
Original file line number Diff line number Diff line change
Expand Up @@ -1546,7 +1546,6 @@ static void raid5d (mddev_t *mddev)
PRINTK("+++ raid5d active\n");

md_check_recovery(mddev);
md_handle_safemode(mddev);

handled = 0;
spin_lock_irq(&conf->device_lock);
Expand Down
1 change: 0 additions & 1 deletion trunk/drivers/md/raid6main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1705,7 +1705,6 @@ static void raid6d (mddev_t *mddev)
PRINTK("+++ raid6d active\n");

md_check_recovery(mddev);
md_handle_safemode(mddev);

handled = 0;
spin_lock_irq(&conf->device_lock);
Expand Down

0 comments on commit a7e70e1

Please sign in to comment.