summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2008-05-20 15:10:44 +1000
committerNiv Sardi <xaiki@debian.org>2008-07-28 16:58:27 +1000
commitbdd907bab78419f34113c51470192945741b839e (patch)
tree411366f18ded6458d0d087012aef17886bbf1106
parente34b562c6bbffc3c466251ffa1d2adaf163db566 (diff)
downloadlinux-stable-bdd907bab78419f34113c51470192945741b839e.tar.gz
linux-stable-bdd907bab78419f34113c51470192945741b839e.tar.bz2
linux-stable-bdd907bab78419f34113c51470192945741b839e.zip
[XFS] allow xfs_args_allocate to fail
Switch xfs_args_allocate to kzalloc and handle failures. SGI-PV: 981951 SGI-Modid: xfs-linux-melb:xfs-kern:31195a Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: David Chinner <dgc@sgi.com> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
-rw-r--r--fs/xfs/linux-2.6/xfs_super.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c
index 613370f9a4bd..d13d883d0039 100644
--- a/fs/xfs/linux-2.6/xfs_super.c
+++ b/fs/xfs/linux-2.6/xfs_super.c
@@ -75,7 +75,10 @@ xfs_args_allocate(
{
struct xfs_mount_args *args;
- args = kmem_zalloc(sizeof(struct xfs_mount_args), KM_SLEEP);
+ args = kzalloc(sizeof(struct xfs_mount_args), GFP_KERNEL);
+ if (!args)
+ return NULL;
+
args->logbufs = args->logbufsize = -1;
strncpy(args->fsname, sb->s_id, MAXNAMELEN);
@@ -1396,9 +1399,13 @@ xfs_fs_remount(
char *options)
{
struct xfs_mount *mp = XFS_M(sb);
- struct xfs_mount_args *args = xfs_args_allocate(sb, 0);
+ struct xfs_mount_args *args;
int error;
+ args = xfs_args_allocate(sb, 0);
+ if (!args)
+ return -ENOMEM;
+
error = xfs_parseargs(mp, options, args, 1);
if (error)
goto out_free_args;
@@ -1420,7 +1427,7 @@ xfs_fs_remount(
}
out_free_args:
- kmem_free(args);
+ kfree(args);
return -error;
}
@@ -1725,9 +1732,13 @@ xfs_fs_fill_super(
{
struct inode *root;
struct xfs_mount *mp = NULL;
- struct xfs_mount_args *args = xfs_args_allocate(sb, silent);
+ struct xfs_mount_args *args;
int flags = 0, error;
+ args = xfs_args_allocate(sb, silent);
+ if (!args)
+ return -ENOMEM;
+
mp = xfs_mount_init();
INIT_LIST_HEAD(&mp->m_sync_list);
@@ -1826,7 +1837,7 @@ xfs_fs_fill_super(
xfs_itrace_exit(XFS_I(sb->s_root->d_inode));
- kmem_free(args);
+ kfree(args);
return 0;
error2:
@@ -1874,7 +1885,7 @@ xfs_fs_fill_super(
kmem_free(mp);
fail_vfsop:
- kmem_free(args);
+ kfree(args);
return -error;
}