| To: | Brian Foster <bfoster@xxxxxxxxxx> |
|---|---|
| Subject: | Re: [PATCH v3] xfs: re-enable xfsaild idle mode and fix associated races |
| From: | Christoph Hellwig <hch@xxxxxxxxxxxxx> |
| Date: | Mon, 2 Jul 2012 03:05:02 -0400 |
| Cc: | xfs@xxxxxxxxxxx |
| In-reply-to: | <1340880776-45730-1-git-send-email-bfoster@xxxxxxxxxx> |
| References: | <1340880776-45730-1-git-send-email-bfoster@xxxxxxxxxx> |
| User-agent: | Mutt/1.5.21 (2010-09-15) |
> __set_current_state(TASK_KILLABLE);
> else
> __set_current_state(TASK_INTERRUPTIBLE);
> - schedule_timeout(tout ?
> - msecs_to_jiffies(tout) : MAX_SCHEDULE_TIMEOUT);
> +
> + spin_lock(&ailp->xa_lock);
> +
> + /*
> + * Idle if the AIL is empty and we are not racing with a target
> + * update. We check the AIL after we set the task to a sleep
> + * state to guarantee that we either catch an xa_target update
> + * or that a wake_up resets the state to TASK_RUNNING.
> + * Otherwise, we run the risk of sleeping indefinitely.
> + *
> + * The barrier matches the xa_target update in xfs_ail_push().
> + */
> + smp_rmb();
> + if (!xfs_ail_min(ailp) &&
> + ailp->xa_target == ailp->xa_target_prev) {
> + spin_unlock(&ailp->xa_lock);
> + schedule();
> + tout = 0;
> + continue;
> + }
I still don't like this at all all - we have one place to do all the
timeout decisions, and that is and then end of xfsaild_push. Splitting
this decision over two functions makes the code a lot harder to
understand and maintain over the long run.
That doesn't mean I don't like the algorithm behind this patch, it just
needs to move into the right place.
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | Re: mkfs.xfs states log stripe unit is too large, NeilBrown |
|---|---|
| Next by Date: | [PATCH V3] xfs: cleanup the mount options, Wanlong Gao |
| Previous by Thread: | Re: [PATCH v3] xfs: re-enable xfsaild idle mode and fix associated races, Christoph Hellwig |
| Next by Thread: | Re: [PATCH v3] xfs: re-enable xfsaild idle mode and fix associated races, Dave Chinner |
| Indexes: | [Date] [Thread] [Top] [All Lists] |