|
@@ -621,6 +621,7 @@ enum sock_flags {
|
|
|
SOCK_RCVTSTAMPNS, /* %SO_TIMESTAMPNS setting */
|
|
|
SOCK_LOCALROUTE, /* route locally only, %SO_DONTROUTE setting */
|
|
|
SOCK_QUEUE_SHRUNK, /* write queue has been shrunk recently */
|
|
|
+ SOCK_MEMALLOC, /* VM depends on this socket for swapping */
|
|
|
SOCK_TIMESTAMPING_TX_HARDWARE, /* %SOF_TIMESTAMPING_TX_HARDWARE */
|
|
|
SOCK_TIMESTAMPING_TX_SOFTWARE, /* %SOF_TIMESTAMPING_TX_SOFTWARE */
|
|
|
SOCK_TIMESTAMPING_RX_HARDWARE, /* %SOF_TIMESTAMPING_RX_HARDWARE */
|
|
@@ -660,7 +661,7 @@ static inline bool sock_flag(const struct sock *sk, enum sock_flags flag)
|
|
|
|
|
|
static inline gfp_t sk_gfp_atomic(struct sock *sk, gfp_t gfp_mask)
|
|
|
{
|
|
|
- return GFP_ATOMIC;
|
|
|
+ return GFP_ATOMIC | (sk->sk_allocation & __GFP_MEMALLOC);
|
|
|
}
|
|
|
|
|
|
static inline void sk_acceptq_removed(struct sock *sk)
|
|
@@ -803,6 +804,8 @@ extern int sk_stream_wait_memory(struct sock *sk, long *timeo_p);
|
|
|
extern void sk_stream_wait_close(struct sock *sk, long timeo_p);
|
|
|
extern int sk_stream_error(struct sock *sk, int flags, int err);
|
|
|
extern void sk_stream_kill_queues(struct sock *sk);
|
|
|
+extern void sk_set_memalloc(struct sock *sk);
|
|
|
+extern void sk_clear_memalloc(struct sock *sk);
|
|
|
|
|
|
extern int sk_wait_data(struct sock *sk, long *timeo);
|
|
|
|