On 05/18/2015 10:57 PM, pa...@cloudlinux.com wrote:
> From: Andrew Perepechko <pa...@cloudlinux.com>
> 
> Currently, shmem_lock immediately and
> unconditionally uncharges what it has
> just charged for a lock request.
> 
> This, indeed, causes a double uncharge
> with something like the following:
> 
>   shmid = shmget(12345, 8192, IPC_CREAT | 0666);
>   rc = shmctl(shmid, SHM_LOCK, NULL);
>   shmctl(shmid, IPC_RMID, 0);
> 
> with the following in the kernel log:
> 
> [  455.815025] Uncharging too much 2 h 0, res lockedpages ub 0
> 
> Signed-off-by: Andrew Perepechko <pa...@cloudlinux.com>
> ---
>  mm/shmem.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/mm/shmem.c b/mm/shmem.c
> index a6b3e30..d09a230 100644
> --- a/mm/shmem.c
> +++ b/mm/shmem.c
> @@ -1359,11 +1359,13 @@ int shmem_lock(struct file *file, int lock, struct 
> user_struct *user)
>               mapping_set_unevictable(file->f_mapping);
>       }
>       if (!lock && (info->flags & VM_LOCKED) && user) {
> +             ub_lockedshm_uncharge(info, inode->i_size);
>               user_shm_unlock(inode->i_size, user);
>               info->flags &= ~VM_LOCKED;
>               mapping_clear_unevictable(file->f_mapping);
>       }
> -     retval = 0;
> +     spin_unlock(&info->lock);
> +     return 0;
>  
>  out_nomem:
>       ub_lockedshm_uncharge(info, inode->i_size);
> 

Applied, thank you!
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to