Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 346042
b: refs/heads/master
c: dc97b70
h: refs/heads/master
v: v3
  • Loading branch information
Philipp Reisner committed Nov 8, 2012
1 parent 1a0346a commit 0d99633
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 24 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: ef5e44a672e444b6957fdccda3f40a5cbe202335
refs/heads/master: dc97b70801667ea8b1432b37f5c122405c8d6f96
3 changes: 2 additions & 1 deletion trunk/drivers/block/drbd/drbd_int.h
Original file line number Diff line number Diff line change
Expand Up @@ -1409,7 +1409,8 @@ extern int drbd_khelper(struct drbd_conf *mdev, char *cmd);

/* drbd_worker.c */
extern int drbd_worker(struct drbd_thread *thi);
extern int drbd_alter_sa(struct drbd_conf *mdev, int na);
enum drbd_ret_code drbd_sync_after_valid(struct drbd_conf *mdev, int o_minor);
void drbd_sync_after_changed(struct drbd_conf *mdev);
extern void drbd_start_resync(struct drbd_conf *mdev, enum drbd_conns side);
extern void resume_next_sg(struct drbd_conf *mdev);
extern void suspend_other_sg(struct drbd_conf *mdev);
Expand Down
15 changes: 7 additions & 8 deletions trunk/drivers/block/drbd/drbd_nl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1145,13 +1145,6 @@ int drbd_adm_disk_opts(struct sk_buff *skb, struct genl_info *info)
if (!expect(new_disk_conf->al_extents <= DRBD_AL_EXTENTS_MAX))
new_disk_conf->al_extents = DRBD_AL_EXTENTS_MAX;

/* most sanity checks done, try to assign the new sync-after
* dependency. need to hold the global lock in there,
* to avoid a race in the dependency loop check. */
retcode = drbd_alter_sa(mdev, new_disk_conf->resync_after);
if (retcode != NO_ERROR)
goto fail;

fifo_size = (new_disk_conf->c_plan_ahead * 10 * SLEEP_TIME) / HZ;
if (fifo_size != mdev->rs_plan_s.size && fifo_size > 0) {
rs_plan_s = kzalloc(sizeof(int) * fifo_size, GFP_KERNEL);
Expand Down Expand Up @@ -1185,7 +1178,13 @@ int drbd_adm_disk_opts(struct sk_buff *skb, struct genl_info *info)
* To avoid someone looking at a half-updated struct, we probably
* should have a rw-semaphor on net_conf and disk_conf.
*/
mdev->ldev->dc = *new_disk_conf;
write_lock_irq(&global_state_lock);
retcode = drbd_sync_after_valid(mdev, new_disk_conf->resync_after);
if (retcode == NO_ERROR) {
mdev->ldev->dc = *new_disk_conf;
drbd_sync_after_changed(mdev);
}
write_unlock_irq(&global_state_lock);

drbd_md_sync(mdev);

Expand Down
22 changes: 8 additions & 14 deletions trunk/drivers/block/drbd/drbd_worker.c
Original file line number Diff line number Diff line change
Expand Up @@ -1401,7 +1401,8 @@ void suspend_other_sg(struct drbd_conf *mdev)
write_unlock_irq(&global_state_lock);
}

static int sync_after_error(struct drbd_conf *mdev, int o_minor)
/* caller must hold global_state_lock */
enum drbd_ret_code drbd_sync_after_valid(struct drbd_conf *mdev, int o_minor)
{
struct drbd_conf *odev;

Expand All @@ -1425,22 +1426,15 @@ static int sync_after_error(struct drbd_conf *mdev, int o_minor)
}
}

int drbd_alter_sa(struct drbd_conf *mdev, int na)
/* caller must hold global_state_lock */
void drbd_sync_after_changed(struct drbd_conf *mdev)
{
int changes;
int retcode;

write_lock_irq(&global_state_lock);
retcode = sync_after_error(mdev, na);
if (retcode == NO_ERROR) {
mdev->ldev->dc.resync_after = na;
do {
changes = _drbd_pause_after(mdev);
changes |= _drbd_resume_next(mdev);
} while (changes);
}
write_unlock_irq(&global_state_lock);
return retcode;
do {
changes = _drbd_pause_after(mdev);
changes |= _drbd_resume_next(mdev);
} while (changes);
}

void drbd_rs_controller_reset(struct drbd_conf *mdev)
Expand Down

0 comments on commit 0d99633

Please sign in to comment.