|
@@ -484,7 +484,7 @@ static int ceph_tcp_connect(struct ceph_connection *con)
|
|
|
IPPROTO_TCP, &sock);
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
- sock->sk->sk_allocation = GFP_NOFS;
|
|
|
+ sock->sk->sk_allocation = GFP_NOFS | __GFP_MEMALLOC;
|
|
|
|
|
|
#ifdef CONFIG_LOCKDEP
|
|
|
lockdep_set_class(&sock->sk->sk_lock, &socket_class);
|
|
@@ -509,6 +509,9 @@ static int ceph_tcp_connect(struct ceph_connection *con)
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
+
|
|
|
+ sk_set_memalloc(sock->sk);
|
|
|
+
|
|
|
con->sock = sock;
|
|
|
return 0;
|
|
|
}
|
|
@@ -2769,8 +2772,11 @@ static void con_work(struct work_struct *work)
|
|
|
{
|
|
|
struct ceph_connection *con = container_of(work, struct ceph_connection,
|
|
|
work.work);
|
|
|
+ unsigned long pflags = current->flags;
|
|
|
bool fault;
|
|
|
|
|
|
+ current->flags |= PF_MEMALLOC;
|
|
|
+
|
|
|
mutex_lock(&con->mutex);
|
|
|
while (true) {
|
|
|
int ret;
|
|
@@ -2824,6 +2830,8 @@ static void con_work(struct work_struct *work)
|
|
|
con_fault_finish(con);
|
|
|
|
|
|
con->ops->put(con);
|
|
|
+
|
|
|
+ tsk_restore_flags(current, pflags, PF_MEMALLOC);
|
|
|
}
|
|
|
|
|
|
/*
|