diff --git a/include/net/sock.h b/include/net/sock.h index fad3a9bb9dcf..be5ec94020f1 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1204,11 +1204,13 @@ static inline void memcg_memory_allocated_add(struct cg_proto *prot, unsigned long amt, int *parent_status) { - page_counter_charge(&prot->memory_allocated, amt); + struct page_counter *counter; - if (page_counter_read(&prot->memory_allocated) > - prot->memory_allocated.limit) - *parent_status = OVER_LIMIT; + if (page_counter_try_charge(&prot->memory_allocated, amt, &counter)) + return; + + page_counter_charge(&prot->memory_allocated, amt); + *parent_status = OVER_LIMIT; } static inline void memcg_memory_allocated_sub(struct cg_proto *prot,