Re: [PATCH rdma-next V1 1/4] IB/IPoIB: Convert IPoIB to memalloc_noio_* calls

Leon Romanovsky
2017-05-29T17:01:49Z

[-- Attachment #1: Type: text/plain, Size: 2721 bytes --]

On Mon, May 29, 2017 at 12:44:46PM -0400, Dennis Dalessandro wrote:
> On 5/23/2017 7:38 AM, Leon Romanovsky wrote:
> > From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
> >
> > Commit 21caf2fc1931 ("mm: teach mm by current context info to not do I/O
> > during memory allocation") added the memalloc_noio_(save|restore) functions
> > to enable people to modify the MM behavior by disabling I/O during memory
> > allocation. This was further extended in Fixes: 934f3072c17c ("mm: clear
> > __GFP_FS when PF_MEMALLOC_NOIO is set"). memalloc_noio_* functions prevent
> > allocation paths recursing back into the filesystem without explicitly
> > changing the flags for every allocation site.
> >
> > However the IPoIB hasn't been keeping up with the changes and missed
> > completely these memalloc_noio_* calls. This led to update of
> > allocation site with special QP creation flag, see commit 09b93088d750
> > ("IB: Add a QP creation flag to use GFP_NOIO allocations"), while this
> > flag is supported by small number of drivers in IB stack.
> >
> > Let's change it by updating to memalloc_noio_* calls and allow
> > for every driver underneath enjoy NOIO allocations.
> >
> > Signed-off-by: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
> > Signed-off-by: Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
>
> Reviewed-by: Dennis Dalessandro <dennis.dalessandro-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
>
> > @@ -1131,10 +1127,11 @@ static int ipoib_cm_tx_init(struct ipoib_cm_tx *p, u32 qpn,
> > struct sa_path_rec *pathrec)
> > {
> > struct ipoib_dev_priv *priv = ipoib_priv(p->dev);
> > + unsigned int noio_flag;
>
> > int ret;
> > - p->tx_ring = __vmalloc(ipoib_sendq_size * sizeof *p->tx_ring,
> > - GFP_NOIO, PAGE_KERNEL);
> > + noio_flag = memalloc_noio_save();
>
> NIT: Maybe just call this "flags" since there could be other flags in
> current->flags when calling memalloc_noio_save()

I didn't want to be different from other callers :)
➜ linux-rdma git:(master) ✗ git grep memalloc_noio_save
drivers/base/power/runtime.c: noio_flag = memalloc_noio_save();
drivers/md/dm-bufio.c: noio_flag = memalloc_noio_save();
drivers/md/dm-ioctl.c: noio_flag = memalloc_noio_save();
drivers/usb/core/hub.c: noio_flag = memalloc_noio_save();
fs/ocfs2/cluster/tcp.c: noio_flag = memalloc_noio_save();
fs/ocfs2/cluster/tcp.c: noio_flag = memalloc_noio_save();
include/linux/sched/mm.h:static inline unsigned int memalloc_noio_save(void)
net/ceph/crypto.c: noio_flag = memalloc_noio_save();
net/ceph/messenger.c: noio_flag = memalloc_noio_save();

>
> -Denny

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]