NeilBrown <neilb@xxxxxxxx> wrote: > + fscache_enqueue_retrieval(monitor->op); > + > spin_lock(&object->work_lock); > list_add_tail(&monitor->op_link, &monitor->op->to_do); > spin_unlock(&object->work_lock); > > - fscache_enqueue_retrieval(monitor->op); That won't necessarily work because the work processor can then happen before you've added the work to the to_do list. I'm thinking that KiranKumar's solution might be the best one. The problem is that cachefiles_read_waiter() doesn't have a ref on the monitor object but is entirely dependent on the waitqueue lock for safety. I think KiranKumar's patch is correct to take a ref before doing the queuing. It might be possible to then pass this along to the work processor, but that might be too fiddly. Actually, I want to get rid of the page monitoring stuff entirely as it's quite fragile and use an iterator and direct-IO instead, but we have to fix this for now. David -- Linux-cachefs mailing list Linux-cachefs@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/linux-cachefs