mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
[XFS] Dynamically allocate local kiocb structures in readv/writev routines
to reduce stack footprint. SGI-PV: 947312 SGI-Modid: xfs-linux-melb:xfs-kern:25358a Signed-off-by: Nathan Scott <nathans@sgi.com>
This commit is contained in:
parent
0293ce3a9f
commit
1f6553f9f9
1 changed files with 22 additions and 12 deletions
|
@ -145,17 +145,22 @@ __linvfs_readv(
|
||||||
{
|
{
|
||||||
struct inode *inode = file->f_mapping->host;
|
struct inode *inode = file->f_mapping->host;
|
||||||
vnode_t *vp = LINVFS_GET_VP(inode);
|
vnode_t *vp = LINVFS_GET_VP(inode);
|
||||||
struct kiocb kiocb;
|
struct kiocb *kiocb;
|
||||||
ssize_t rval;
|
ssize_t rval;
|
||||||
|
|
||||||
init_sync_kiocb(&kiocb, file);
|
kiocb = kmalloc(sizeof(*kiocb), GFP_KERNEL);
|
||||||
kiocb.ki_pos = *ppos;
|
if (unlikely(!kiocb))
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
init_sync_kiocb(kiocb, file);
|
||||||
|
kiocb->ki_pos = *ppos;
|
||||||
|
|
||||||
if (unlikely(file->f_flags & O_DIRECT))
|
if (unlikely(file->f_flags & O_DIRECT))
|
||||||
ioflags |= IO_ISDIRECT;
|
ioflags |= IO_ISDIRECT;
|
||||||
VOP_READ(vp, &kiocb, iov, nr_segs, &kiocb.ki_pos, ioflags, NULL, rval);
|
VOP_READ(vp, kiocb, iov, nr_segs, &kiocb->ki_pos, ioflags, NULL, rval);
|
||||||
|
|
||||||
*ppos = kiocb.ki_pos;
|
*ppos = kiocb->ki_pos;
|
||||||
|
kfree(kiocb);
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,17 +195,22 @@ __linvfs_writev(
|
||||||
{
|
{
|
||||||
struct inode *inode = file->f_mapping->host;
|
struct inode *inode = file->f_mapping->host;
|
||||||
vnode_t *vp = LINVFS_GET_VP(inode);
|
vnode_t *vp = LINVFS_GET_VP(inode);
|
||||||
struct kiocb kiocb;
|
struct kiocb *kiocb;
|
||||||
ssize_t rval;
|
ssize_t rval;
|
||||||
|
|
||||||
init_sync_kiocb(&kiocb, file);
|
kiocb = kmalloc(sizeof(*kiocb), GFP_KERNEL);
|
||||||
kiocb.ki_pos = *ppos;
|
if (unlikely(!kiocb))
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
init_sync_kiocb(kiocb, file);
|
||||||
|
kiocb->ki_pos = *ppos;
|
||||||
if (unlikely(file->f_flags & O_DIRECT))
|
if (unlikely(file->f_flags & O_DIRECT))
|
||||||
ioflags |= IO_ISDIRECT;
|
ioflags |= IO_ISDIRECT;
|
||||||
|
|
||||||
VOP_WRITE(vp, &kiocb, iov, nr_segs, &kiocb.ki_pos, ioflags, NULL, rval);
|
VOP_WRITE(vp, kiocb, iov, nr_segs, &kiocb->ki_pos, ioflags, NULL, rval);
|
||||||
|
|
||||||
*ppos = kiocb.ki_pos;
|
*ppos = kiocb->ki_pos;
|
||||||
|
kfree(kiocb);
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue