On Wed, Jun 21, 2017 at 11:05 AM, Amir Goldstein <amir73il@xxxxxxxxx> wrote: > On Wed, Jun 21, 2017 at 11:53 AM, Miklos Szeredi <miklos@xxxxxxxxxx> wrote: >> On Wed, Jun 21, 2017 at 10:49 AM, Amir Goldstein <amir73il@xxxxxxxxx> wrote: >>> On Wed, Jun 21, 2017 at 11:45 AM, Miklos Szeredi <miklos@xxxxxxxxxx> wrote: >>>> On Wed, Jun 21, 2017 at 10:38 AM, Miklos Szeredi <miklos@xxxxxxxxxx> wrote: >>>>> On Wed, Jun 21, 2017 at 10:20 AM, Miklos Szeredi <miklos@xxxxxxxxxx> wrote: >>>>> >>>>>> Right. The problem is when dir becomes impure due to rename between >>>>>> two getdents(2) calls. We can't call ovl_dir_reset() because the >>>>>> offset is not zero. We could do a "cache with head cut off" starting >>>>>> from the current offset in the dir and finish with that. Yeah, it's >>>>>> probably less complexity than trying to intercept the actor... >>>>> >>>>> On the other hand, we'll need to accommodate the native directory >>>>> indexing (i.e. seekdir(3) hell) in the cache, which is going to add to >>>>> complexity. Ugh. >>>> >>>> Another idea: we are allowed to omit directory entries added after >>>> the opendir/rewinddir. So if there was a simple way to filter out >>>> newly added entries which have origin then we are fine. >>>> >>> > > Following up on your idea: > - check in ovl_iterate() if version has changed and if dir became impure > - if it did, populate od->cache, but keep the dir od->is_real > - iterate upper cache entries and call ovl_cache_update_ino() > - Then actor of real dir iterator can use the cache to ommit entries or use > p->ino from cache if p->real_ino match real d_ino, but differs from p->ino. For non-merge dirs we can have a simplified cache just containing the entries with origin, recreated when the version changes or updated in rename, whichever is simpler. A non-merge dir will never become a merge one, so we can keep the handling separate. Thanks, Miklos -- To unsubscribe from this list: send the line "unsubscribe linux-unionfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html