[PATCH 18/30] 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: NeilBrown--- .../lustre/include/linux/libcfs/libcfs_prim.h | 31 .../staging/lustre/lnet/klnds/socklnd/socklnd_cb.c | 11 --- drivers/staging/lustre/lnet/libcfs/tracefile.c |5 ++- drivers/staging/lustre/lnet/lnet/lib-move.c|2 + drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c|9 -- drivers/staging/lustre/lustre/osc/osc_cache.c |2 + drivers/staging/lustre/lustre/osc/osc_request.c|7 +++-- drivers/staging/lustre/lustre/ptlrpc/niobuf.c |7 +++-- 8 files changed, 25 insertions(+), 49 deletions(-) diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h index d4c5965c43b1..2b0dafb6155b 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h @@ -48,35 +48,4 @@ #define NUM_CACHEPAGES totalram_pages #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 diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c index 14450fd5957a..01b31a6bb588 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c @@ -22,6 +22,7 @@ * */ +#include #include "socklnd.h" struct ksock_tx * @@ -876,7 +877,7 @@ ksocknal_launch_packet(struct lnet_ni *ni, struct ksock_tx *tx, int ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) { - int mpflag = 1; + unsigned int mpflag = 0; int type = lntmsg->msg_type; struct lnet_process_id target = lntmsg->msg_target; unsigned int payload_niov = lntmsg->msg_niov; @@ -909,13 +910,13 @@ ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) tx_frags.paged.kiov[payload_niov]); if (lntmsg->msg_vmflush) - mpflag = cfs_memory_pressure_get_and_set(); + mpflag = memalloc_noreclaim_save(); tx = ksocknal_alloc_tx(KSOCK_MSG_LNET, desc_size); if (!tx) { CERROR("Can't allocate tx desc type %d size %d\n", type, desc_size); if (lntmsg->msg_vmflush) - cfs_memory_pressure_restore(mpflag); + memalloc_noreclaim_restore(mpflag); return -ENOMEM; } @@ -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 */ rc = ksocknal_launch_packet(ni, tx, target); - if (!mpflag) - cfs_memory_pressure_restore(mpflag); + if (mpflag) + memalloc_noreclaim_restore(mpflag); if (!rc) return 0; diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c index 514e1845740e..878fbb9745a0 100644 --- a/drivers/staging/lustre/lnet/libcfs/tracefile.c +++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c @@ -114,7 +114,7 @@ static struct cfs_trace_page *cfs_tage_alloc(gfp_t gfp) struct cfs_trace_page *tage; /* My caller is trying to free memory */ - if (!in_interrupt() && memory_pressure_get()) + if (!in_interrupt() && (current->flags & PF_MEMALLOC)) return NULL; /* @@ -192,7 +192,8 @@ cfs_trace_get_tage_try(struct cfs_trace_cpu_data *tcd, unsigned long len) } else { tage = cfs_tage_alloc(GFP_ATOMIC); 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", tcd->tcd_cur_pages); return NULL; diff --git a/drivers/staging/lustre/lnet/lnet/lib-move.c b/drivers/staging/lustre/lnet/lnet/lib-move.c index
[PATCH 18/30] 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: NeilBrown --- .../lustre/include/linux/libcfs/libcfs_prim.h | 31 .../staging/lustre/lnet/klnds/socklnd/socklnd_cb.c | 11 --- drivers/staging/lustre/lnet/libcfs/tracefile.c |5 ++- drivers/staging/lustre/lnet/lnet/lib-move.c|2 + drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c|9 -- drivers/staging/lustre/lustre/osc/osc_cache.c |2 + drivers/staging/lustre/lustre/osc/osc_request.c|7 +++-- drivers/staging/lustre/lustre/ptlrpc/niobuf.c |7 +++-- 8 files changed, 25 insertions(+), 49 deletions(-) diff --git a/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h b/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h index d4c5965c43b1..2b0dafb6155b 100644 --- a/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h +++ b/drivers/staging/lustre/include/linux/libcfs/libcfs_prim.h @@ -48,35 +48,4 @@ #define NUM_CACHEPAGES totalram_pages #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 diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c index 14450fd5957a..01b31a6bb588 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c @@ -22,6 +22,7 @@ * */ +#include #include "socklnd.h" struct ksock_tx * @@ -876,7 +877,7 @@ ksocknal_launch_packet(struct lnet_ni *ni, struct ksock_tx *tx, int ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) { - int mpflag = 1; + unsigned int mpflag = 0; int type = lntmsg->msg_type; struct lnet_process_id target = lntmsg->msg_target; unsigned int payload_niov = lntmsg->msg_niov; @@ -909,13 +910,13 @@ ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) tx_frags.paged.kiov[payload_niov]); if (lntmsg->msg_vmflush) - mpflag = cfs_memory_pressure_get_and_set(); + mpflag = memalloc_noreclaim_save(); tx = ksocknal_alloc_tx(KSOCK_MSG_LNET, desc_size); if (!tx) { CERROR("Can't allocate tx desc type %d size %d\n", type, desc_size); if (lntmsg->msg_vmflush) - cfs_memory_pressure_restore(mpflag); + memalloc_noreclaim_restore(mpflag); return -ENOMEM; } @@ -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 */ rc = ksocknal_launch_packet(ni, tx, target); - if (!mpflag) - cfs_memory_pressure_restore(mpflag); + if (mpflag) + memalloc_noreclaim_restore(mpflag); if (!rc) return 0; diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c index 514e1845740e..878fbb9745a0 100644 --- a/drivers/staging/lustre/lnet/libcfs/tracefile.c +++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c @@ -114,7 +114,7 @@ static struct cfs_trace_page *cfs_tage_alloc(gfp_t gfp) struct cfs_trace_page *tage; /* My caller is trying to free memory */ - if (!in_interrupt() && memory_pressure_get()) + if (!in_interrupt() && (current->flags & PF_MEMALLOC)) return NULL; /* @@ -192,7 +192,8 @@ cfs_trace_get_tage_try(struct cfs_trace_cpu_data *tcd, unsigned long len) } else { tage = cfs_tage_alloc(GFP_ATOMIC); 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", tcd->tcd_cur_pages); return NULL; diff --git a/drivers/staging/lustre/lnet/lnet/lib-move.c b/drivers/staging/lustre/lnet/lnet/lib-move.c index 60464135161b..f8eaf8ff8d8d 100644