forked from Minki/linux
xfs: fix missing KM_NOFS tags to keep lockdep happy
There are several places where we use KM_SLEEP allocation contexts and use the fact that they are called from transaction context to add KM_NOFS where appropriate. Unfortunately, there are several places where the code makes this assumption but can be called from outside transaction context but with filesystem locks held. These places need explicit KM_NOFS annotations to avoid lockdep complaining about reclaim contexts. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Ben Myers <bpm@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
parent
52c24ad39f
commit
ac14876cf9
@ -1649,7 +1649,7 @@ xfs_alloc_buftarg(
|
||||
{
|
||||
xfs_buftarg_t *btp;
|
||||
|
||||
btp = kmem_zalloc(sizeof(*btp), KM_SLEEP);
|
||||
btp = kmem_zalloc(sizeof(*btp), KM_SLEEP | KM_NOFS);
|
||||
|
||||
btp->bt_mount = mp;
|
||||
btp->bt_dev = bdev->bd_dev;
|
||||
|
@ -2464,7 +2464,8 @@ xfs_buf_map_from_irec(
|
||||
ASSERT(nirecs >= 1);
|
||||
|
||||
if (nirecs > 1) {
|
||||
map = kmem_zalloc(nirecs * sizeof(struct xfs_buf_map), KM_SLEEP);
|
||||
map = kmem_zalloc(nirecs * sizeof(struct xfs_buf_map),
|
||||
KM_SLEEP | KM_NOFS);
|
||||
if (!map)
|
||||
return ENOMEM;
|
||||
*mapp = map;
|
||||
@ -2520,7 +2521,8 @@ xfs_dabuf_map(
|
||||
* Optimize the one-block case.
|
||||
*/
|
||||
if (nfsb != 1)
|
||||
irecs = kmem_zalloc(sizeof(irec) * nfsb, KM_SLEEP);
|
||||
irecs = kmem_zalloc(sizeof(irec) * nfsb,
|
||||
KM_SLEEP | KM_NOFS);
|
||||
|
||||
nirecs = nfsb;
|
||||
error = xfs_bmapi_read(dp, (xfs_fileoff_t)bno, nfsb, irecs,
|
||||
|
@ -1336,7 +1336,7 @@ xfs_dir2_leaf_getdents(
|
||||
mp->m_sb.sb_blocksize);
|
||||
map_info = kmem_zalloc(offsetof(struct xfs_dir2_leaf_map_info, map) +
|
||||
(length * sizeof(struct xfs_bmbt_irec)),
|
||||
KM_SLEEP);
|
||||
KM_SLEEP | KM_NOFS);
|
||||
map_info->map_size = length;
|
||||
|
||||
/*
|
||||
|
@ -139,7 +139,7 @@ xlog_cil_prepare_log_vecs(
|
||||
|
||||
new_lv = kmem_zalloc(sizeof(*new_lv) +
|
||||
niovecs * sizeof(struct xfs_log_iovec),
|
||||
KM_SLEEP);
|
||||
KM_SLEEP|KM_NOFS);
|
||||
|
||||
/* The allocated iovec region lies beyond the log vector. */
|
||||
new_lv->lv_iovecp = (struct xfs_log_iovec *)&new_lv[1];
|
||||
|
Loading…
Reference in New Issue
Block a user