diff options
author | 2022-11-15 09:10:56 +0000 | |
---|---|---|
committer | 2022-11-16 12:42:00 +0000 | |
commit | 57fc05e8e82d015d5d58572e146ac8579a66efea (patch) | |
tree | 8da6480ee840cbb9a9913e0d516a35a0568ea8db | |
parent | net: linkwatch: only report IF_OPER_LOWERLAYERDOWN if iflink is actually down (diff) | |
download | wireguard-linux-57fc05e8e82d015d5d58572e146ac8579a66efea.tar.xz wireguard-linux-57fc05e8e82d015d5d58572e146ac8579a66efea.zip |
net: mm_account_pinned_pages() optimization
Adopt atomic_long_try_cmpxchg() in mm_account_pinned_pages()
as it is slightly more efficient.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/core/skbuff.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 90d085290d49..4bf95e36ed16 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -1267,13 +1267,12 @@ int mm_account_pinned_pages(struct mmpin *mmp, size_t size) max_pg = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT; user = mmp->user ? : current_user(); + old_pg = atomic_long_read(&user->locked_vm); do { - old_pg = atomic_long_read(&user->locked_vm); new_pg = old_pg + num_pg; if (new_pg > max_pg) return -ENOBUFS; - } while (atomic_long_cmpxchg(&user->locked_vm, old_pg, new_pg) != - old_pg); + } while (!atomic_long_try_cmpxchg(&user->locked_vm, &old_pg, new_pg)); if (!mmp->user) { mmp->user = get_uid(user); |