On 10/3/23 12:00, Boris Brezillon wrote: >> I'd prefer to keep refcounting as is, don't see how to implement your >> suggestion. > Can you be more specific? I don't really see what the problem is with > decrementing pages_use_count when you free the sgt (eviction), and > re-incrementing it when the sgt is restored (swapin). For the reference, we further discussed this question about refcounting with Boris offline and found how to implement the refcnt drop done by shrinker's evict/purge. For evict/purge we can do: if (!refcount_dec_not_one(&shmem->pages_use_count)) refcount_set(&shmem->pages_use_count, 0); and then for swapin: if (!refcount_inc_not_zero(&shmem->pages_use_count)) refcount_set(&shmem->pages_use_count, 1); This resolves the issue with dropping refcnt to zero I was talking about, allowing to delegate sgt's refcnt ownership to shrinker. -- Best regards, Dmitry