Commit fa399093 authored by NeilBrown's avatar NeilBrown Committed by Greg Kroah-Hartman

staging: lustre: replace memory_presure funcitons by standard interfaces.

Use memalloc_noreclaim_save() and memalloc_noreclaim_restore(),
and for testing, just directly test the flag in current->flags
Signed-off-by: default avatarNeilBrown <neilb@suse.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 525609ed
...@@ -48,35 +48,4 @@ ...@@ -48,35 +48,4 @@
#define NUM_CACHEPAGES totalram_pages #define NUM_CACHEPAGES totalram_pages
#endif #endif
static inline unsigned int memory_pressure_get(void)
{
return current->flags & PF_MEMALLOC;
}
static inline void memory_pressure_set(void)
{
current->flags |= PF_MEMALLOC;
}
static inline void memory_pressure_clr(void)
{
current->flags &= ~PF_MEMALLOC;
}
static inline int cfs_memory_pressure_get_and_set(void)
{
int old = memory_pressure_get();
if (!old)
memory_pressure_set();
return old;
}
static inline void cfs_memory_pressure_restore(int old)
{
if (old)
memory_pressure_set();
else
memory_pressure_clr();
}
#endif #endif
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
* *
*/ */
#include <linux/sched/mm.h>
#include "socklnd.h" #include "socklnd.h"
struct ksock_tx * struct ksock_tx *
...@@ -876,7 +877,7 @@ ksocknal_launch_packet(struct lnet_ni *ni, struct ksock_tx *tx, ...@@ -876,7 +877,7 @@ ksocknal_launch_packet(struct lnet_ni *ni, struct ksock_tx *tx,
int int
ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg)
{ {
int mpflag = 1; unsigned int mpflag = 0;
int type = lntmsg->msg_type; int type = lntmsg->msg_type;
struct lnet_process_id target = lntmsg->msg_target; struct lnet_process_id target = lntmsg->msg_target;
unsigned int payload_niov = lntmsg->msg_niov; unsigned int payload_niov = lntmsg->msg_niov;
...@@ -909,13 +910,13 @@ ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) ...@@ -909,13 +910,13 @@ ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg)
tx_frags.paged.kiov[payload_niov]); tx_frags.paged.kiov[payload_niov]);
if (lntmsg->msg_vmflush) if (lntmsg->msg_vmflush)
mpflag = cfs_memory_pressure_get_and_set(); mpflag = memalloc_noreclaim_save();
tx = ksocknal_alloc_tx(KSOCK_MSG_LNET, desc_size); tx = ksocknal_alloc_tx(KSOCK_MSG_LNET, desc_size);
if (!tx) { if (!tx) {
CERROR("Can't allocate tx desc type %d size %d\n", CERROR("Can't allocate tx desc type %d size %d\n",
type, desc_size); type, desc_size);
if (lntmsg->msg_vmflush) if (lntmsg->msg_vmflush)
cfs_memory_pressure_restore(mpflag); memalloc_noreclaim_restore(mpflag);
return -ENOMEM; return -ENOMEM;
} }
...@@ -949,8 +950,8 @@ ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) ...@@ -949,8 +950,8 @@ ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg)
/* The first fragment will be set later in pro_pack */ /* The first fragment will be set later in pro_pack */
rc = ksocknal_launch_packet(ni, tx, target); rc = ksocknal_launch_packet(ni, tx, target);
if (!mpflag) if (mpflag)
cfs_memory_pressure_restore(mpflag); memalloc_noreclaim_restore(mpflag);
if (!rc) if (!rc)
return 0; return 0;
......
...@@ -114,7 +114,7 @@ static struct cfs_trace_page *cfs_tage_alloc(gfp_t gfp) ...@@ -114,7 +114,7 @@ static struct cfs_trace_page *cfs_tage_alloc(gfp_t gfp)
struct cfs_trace_page *tage; struct cfs_trace_page *tage;
/* My caller is trying to free memory */ /* My caller is trying to free memory */
if (!in_interrupt() && memory_pressure_get()) if (!in_interrupt() && (current->flags & PF_MEMALLOC))
return NULL; return NULL;
/* /*
...@@ -192,7 +192,8 @@ cfs_trace_get_tage_try(struct cfs_trace_cpu_data *tcd, unsigned long len) ...@@ -192,7 +192,8 @@ cfs_trace_get_tage_try(struct cfs_trace_cpu_data *tcd, unsigned long len)
} else { } else {
tage = cfs_tage_alloc(GFP_ATOMIC); tage = cfs_tage_alloc(GFP_ATOMIC);
if (unlikely(!tage)) { if (unlikely(!tage)) {
if (!memory_pressure_get() || in_interrupt()) if (!(current->flags & PF_MEMALLOC) ||
in_interrupt())
pr_warn_ratelimited("cannot allocate a tage (%ld)\n", pr_warn_ratelimited("cannot allocate a tage (%ld)\n",
tcd->tcd_cur_pages); tcd->tcd_cur_pages);
return NULL; return NULL;
......
...@@ -2014,7 +2014,7 @@ LNetPut(lnet_nid_t self, struct lnet_handle_md mdh, enum lnet_ack_req ack, ...@@ -2014,7 +2014,7 @@ LNetPut(lnet_nid_t self, struct lnet_handle_md mdh, enum lnet_ack_req ack,
libcfs_id2str(target)); libcfs_id2str(target));
return -ENOMEM; return -ENOMEM;
} }
msg->msg_vmflush = !!memory_pressure_get(); msg->msg_vmflush = !!(current->flags & PF_MEMALLOC);
cpt = lnet_cpt_of_cookie(mdh.cookie); cpt = lnet_cpt_of_cookie(mdh.cookie);
lnet_res_lock(cpt); lnet_res_lock(cpt);
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#define DEBUG_SUBSYSTEM S_LDLM #define DEBUG_SUBSYSTEM S_LDLM
#include <linux/libcfs/libcfs.h> #include <linux/libcfs/libcfs.h>
#include <linux/sched/mm.h>
#include <lustre_dlm.h> #include <lustre_dlm.h>
#include <obd_class.h> #include <obd_class.h>
#include <linux/list.h> #include <linux/list.h>
...@@ -387,7 +388,7 @@ static inline void init_blwi(struct ldlm_bl_work_item *blwi, ...@@ -387,7 +388,7 @@ static inline void init_blwi(struct ldlm_bl_work_item *blwi,
init_completion(&blwi->blwi_comp); init_completion(&blwi->blwi_comp);
INIT_LIST_HEAD(&blwi->blwi_head); INIT_LIST_HEAD(&blwi->blwi_head);
if (memory_pressure_get()) if (current->flags & PF_MEMALLOC)
blwi->blwi_mem_pressure = 1; blwi->blwi_mem_pressure = 1;
blwi->blwi_ns = ns; blwi->blwi_ns = ns;
...@@ -776,12 +777,14 @@ static int ldlm_bl_thread_need_create(struct ldlm_bl_pool *blp, ...@@ -776,12 +777,14 @@ static int ldlm_bl_thread_need_create(struct ldlm_bl_pool *blp,
static int ldlm_bl_thread_blwi(struct ldlm_bl_pool *blp, static int ldlm_bl_thread_blwi(struct ldlm_bl_pool *blp,
struct ldlm_bl_work_item *blwi) struct ldlm_bl_work_item *blwi)
{ {
unsigned int flags = 0;
if (!blwi->blwi_ns) if (!blwi->blwi_ns)
/* added by ldlm_cleanup() */ /* added by ldlm_cleanup() */
return LDLM_ITER_STOP; return LDLM_ITER_STOP;
if (blwi->blwi_mem_pressure) if (blwi->blwi_mem_pressure)
memory_pressure_set(); flags = memalloc_noreclaim_save();
OBD_FAIL_TIMEOUT(OBD_FAIL_LDLM_PAUSE_CANCEL2, 4); OBD_FAIL_TIMEOUT(OBD_FAIL_LDLM_PAUSE_CANCEL2, 4);
...@@ -804,7 +807,7 @@ static int ldlm_bl_thread_blwi(struct ldlm_bl_pool *blp, ...@@ -804,7 +807,7 @@ static int ldlm_bl_thread_blwi(struct ldlm_bl_pool *blp,
blwi->blwi_lock); blwi->blwi_lock);
} }
if (blwi->blwi_mem_pressure) if (blwi->blwi_mem_pressure)
memory_pressure_clr(); memalloc_noreclaim_restore(flags);
if (blwi->blwi_flags & LCF_ASYNC) if (blwi->blwi_flags & LCF_ASYNC)
kfree(blwi); kfree(blwi);
......
...@@ -2622,7 +2622,7 @@ int osc_flush_async_page(const struct lu_env *env, struct cl_io *io, ...@@ -2622,7 +2622,7 @@ int osc_flush_async_page(const struct lu_env *env, struct cl_io *io,
oap->oap_async_flags |= ASYNC_READY | ASYNC_URGENT; oap->oap_async_flags |= ASYNC_READY | ASYNC_URGENT;
spin_unlock(&oap->oap_lock); spin_unlock(&oap->oap_lock);
if (memory_pressure_get()) if (current->flags & PF_MEMALLOC)
ext->oe_memalloc = 1; ext->oe_memalloc = 1;
ext->oe_urgent = 1; ext->oe_urgent = 1;
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#define DEBUG_SUBSYSTEM S_OSC #define DEBUG_SUBSYSTEM S_OSC
#include <linux/libcfs/libcfs.h> #include <linux/libcfs/libcfs.h>
#include <linux/sched/mm.h>
#include <lustre_dlm.h> #include <lustre_dlm.h>
#include <lustre_net.h> #include <lustre_net.h>
...@@ -1654,7 +1655,7 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli, ...@@ -1654,7 +1655,7 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli,
struct cl_req_attr *crattr = NULL; struct cl_req_attr *crattr = NULL;
u64 starting_offset = OBD_OBJECT_EOF; u64 starting_offset = OBD_OBJECT_EOF;
u64 ending_offset = 0; u64 ending_offset = 0;
int mpflag = 0; unsigned int mpflag = 0;
int mem_tight = 0; int mem_tight = 0;
int page_count = 0; int page_count = 0;
bool soft_sync = false; bool soft_sync = false;
...@@ -1677,7 +1678,7 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli, ...@@ -1677,7 +1678,7 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli,
soft_sync = osc_over_unstable_soft_limit(cli); soft_sync = osc_over_unstable_soft_limit(cli);
if (mem_tight) if (mem_tight)
mpflag = cfs_memory_pressure_get_and_set(); mpflag = memalloc_noreclaim_save();
pga = kcalloc(page_count, sizeof(*pga), GFP_NOFS); pga = kcalloc(page_count, sizeof(*pga), GFP_NOFS);
if (!pga) { if (!pga) {
...@@ -1791,7 +1792,7 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli, ...@@ -1791,7 +1792,7 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli,
out: out:
if (mem_tight != 0) if (mem_tight != 0)
cfs_memory_pressure_restore(mpflag); memalloc_noreclaim_restore(mpflag);
if (rc != 0) { if (rc != 0) {
LASSERT(!req); LASSERT(!req);
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
*/ */
#define DEBUG_SUBSYSTEM S_RPC #define DEBUG_SUBSYSTEM S_RPC
#include <linux/sched/mm.h>
#include <obd_support.h> #include <obd_support.h>
#include <lustre_net.h> #include <lustre_net.h>
#include <lustre_lib.h> #include <lustre_lib.h>
...@@ -472,7 +473,7 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) ...@@ -472,7 +473,7 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply)
{ {
int rc; int rc;
int rc2; int rc2;
int mpflag = 0; unsigned int mpflag = 0;
struct ptlrpc_connection *connection; struct ptlrpc_connection *connection;
struct lnet_handle_me reply_me_h; struct lnet_handle_me reply_me_h;
struct lnet_md reply_md; struct lnet_md reply_md;
...@@ -558,7 +559,7 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) ...@@ -558,7 +559,7 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply)
lustre_msg_add_flags(request->rq_reqmsg, MSG_RESENT); lustre_msg_add_flags(request->rq_reqmsg, MSG_RESENT);
if (request->rq_memalloc) if (request->rq_memalloc)
mpflag = cfs_memory_pressure_get_and_set(); mpflag = memalloc_noreclaim_save();
rc = sptlrpc_cli_wrap_request(request); rc = sptlrpc_cli_wrap_request(request);
if (rc) { if (rc) {
...@@ -710,7 +711,7 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply) ...@@ -710,7 +711,7 @@ int ptl_send_rpc(struct ptlrpc_request *request, int noreply)
ptlrpc_unregister_bulk(request, 0); ptlrpc_unregister_bulk(request, 0);
out: out:
if (request->rq_memalloc) if (request->rq_memalloc)
cfs_memory_pressure_restore(mpflag); memalloc_noreclaim_restore(mpflag);
return rc; return rc;
} }
EXPORT_SYMBOL(ptl_send_rpc); EXPORT_SYMBOL(ptl_send_rpc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment