Sorry.. I didn't refresh before posting.... > @@ -487,10 +496,13 @@ EXPORT_SYMBOL_GPL(cache_flush); > > void cache_purge(struct cache_detail *detail) > { > - detail->flush_time = LONG_MAX; > + time_t now = seconds_since_boot(); > + if (detail->flush_time >= now) > + now = detail->flush_time + 1; > + /* 'now' is the maximum value any 'last_refresh' can have */ > + detail->flush_time = now + 1; This should not have the '+ 1'. > detail->nextcheck = seconds_since_boot(); > cache_flush(); > - detail->flush_time = 1; > } > EXPORT_SYMBOL_GPL(cache_purge); > > @@ -1447,8 +1460,22 @@ static ssize_t write_flush(struct file *file, const char __user *buf, > return -EINVAL; > > bp = tbuf; > - cd->flush_time = get_expiry(&bp); > - cd->nextcheck = seconds_since_boot(); > + then = get_expiry(&bp); > + now = seconds_since_boot(); > + cd->nextcheck = now; > + /* Can only set flush_time to 1 second beyond "now", or > + * possibly 1 second beyond flushtime. This is because > + * flush_time never goes backwards so it mustn't get too far > + * ahead of time. > + */ > + if (then >= now) { > + /* Want to flush everything, so behave like cache_purge() */ > + if (cd->flush_time >= now) > + now = cd->flush_time + 1; > + then = now + 1; Nor should. I'll resend it people are otherwise happy. NeilBrown
Attachment:
signature.asc
Description: PGP signature