On Mon 06-01-25 21:59:07, Yafang Shao wrote: > On Mon, Jan 6, 2025 at 8:28 PM Michal Hocko <mhocko@xxxxxxxx> wrote: [...] > > The purpose of mlock syscall is to _guarantee_ memory to be resident > > (never swapped out). There might be additional constrains to prevent > > from mlock succeeding - e.g. rlimit or if memcg aims to control amount > > of the mlocked memory but those failures need to be explicitly > > communicated via syscall failure. > > Returning an error code like EBUSY to userspace is straightforward > when attempting to mlock a page that is charged to a different memcg. EAGAIN is already documented error failure when some pages cannot be mlocked, but yes this would be acceptable solution. The question is how to handle mlockall(MCL_FUTURE) resp. mlock(MLOCK_ONFAULT). I didn't give those much time but I can see some comlications there. Either we fail those on shared resources which could lead to pre-mature failures or we need to somehow record lock ownership and enforce it during the fault (charge). -- Michal Hocko SUSE Labs