dquot_initialize() can now return error. Handle it where possible.

Signed-off-by: Jan Kara <j...@suse.com>
---
 fs/ocfs2/file.c         | 14 ++++++++----
 fs/ocfs2/namei.c        | 59 +++++++++++++++++++++++++++++++++++++------------
 fs/ocfs2/refcounttree.c |  5 +++--
 3 files changed, 58 insertions(+), 20 deletions(-)

diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index 4d9e8275ed99..7210583b472f 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -105,8 +105,11 @@ static int ocfs2_file_open(struct inode *inode, struct 
file *file)
                              file->f_path.dentry->d_name.len,
                              file->f_path.dentry->d_name.name, mode);
 
-       if (file->f_mode & FMODE_WRITE)
-               dquot_initialize(inode);
+       if (file->f_mode & FMODE_WRITE) {
+               status = dquot_initialize(inode);
+               if (status)
+                       goto leave;
+       }
 
        spin_lock(&oi->ip_lock);
 
@@ -1155,8 +1158,11 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr 
*attr)
        if (status)
                return status;
 
-       if (is_quota_modification(inode, attr))
-               dquot_initialize(inode);
+       if (is_quota_modification(inode, attr)) {
+               status = dquot_initialize(inode);
+               if (status)
+                       return status;
+       }
        size_change = S_ISREG(inode->i_mode) && attr->ia_valid & ATTR_SIZE;
        if (size_change) {
                status = ocfs2_rw_lock(inode, 1);
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
index 6e6abb93fda5..948681e37cfd 100644
--- a/fs/ocfs2/namei.c
+++ b/fs/ocfs2/namei.c
@@ -200,11 +200,12 @@ bail:
 static struct inode *ocfs2_get_init_inode(struct inode *dir, umode_t mode)
 {
        struct inode *inode;
+       int status;
 
        inode = new_inode(dir->i_sb);
        if (!inode) {
                mlog(ML_ERROR, "new_inode failed!\n");
-               return NULL;
+               return ERR_PTR(-ENOMEM);
        }
 
        /* populate as many fields early on as possible - many of
@@ -213,7 +214,10 @@ static struct inode *ocfs2_get_init_inode(struct inode 
*dir, umode_t mode)
        if (S_ISDIR(mode))
                set_nlink(inode, 2);
        inode_init_owner(inode, dir, mode);
-       dquot_initialize(inode);
+       status = dquot_initialize(inode);
+       if (status)
+               return ERR_PTR(status);
+
        return inode;
 }
 
@@ -264,7 +268,11 @@ static int ocfs2_mknod(struct inode *dir,
                          (unsigned long long)OCFS2_I(dir)->ip_blkno,
                          (unsigned long)dev, mode);
 
-       dquot_initialize(dir);
+       status = dquot_initialize(dir);
+       if (status) {
+               mlog_errno(status);
+               return status;
+       }
 
        /* get our super block */
        osb = OCFS2_SB(dir->i_sb);
@@ -311,8 +319,9 @@ static int ocfs2_mknod(struct inode *dir,
        }
 
        inode = ocfs2_get_init_inode(dir, mode);
-       if (!inode) {
-               status = -ENOMEM;
+       if (IS_ERR(inode)) {
+               status = PTR_ERR(inode);
+               inode = NULL;
                mlog_errno(status);
                goto leave;
        }
@@ -708,7 +717,11 @@ static int ocfs2_link(struct dentry *old_dentry,
        if (S_ISDIR(inode->i_mode))
                return -EPERM;
 
-       dquot_initialize(dir);
+       err = dquot_initialize(dir);
+       if (err) {
+               mlog_errno(err);
+               return err;
+       }
 
        err = ocfs2_double_lock(osb, &old_dir_bh, old_dir,
                        &parent_fe_bh, dir, 0);
@@ -896,7 +909,11 @@ static int ocfs2_unlink(struct inode *dir,
                           (unsigned long long)OCFS2_I(dir)->ip_blkno,
                           (unsigned long long)OCFS2_I(inode)->ip_blkno);
 
-       dquot_initialize(dir);
+       status = dquot_initialize(dir);
+       if (status) {
+               mlog_errno(status);
+               return status;
+       }
 
        BUG_ON(d_inode(dentry->d_parent) != dir);
 
@@ -1230,8 +1247,16 @@ static int ocfs2_rename(struct inode *old_dir,
                           old_dentry->d_name.len, old_dentry->d_name.name,
                           new_dentry->d_name.len, new_dentry->d_name.name);
 
-       dquot_initialize(old_dir);
-       dquot_initialize(new_dir);
+       status = dquot_initialize(old_dir);
+       if (status) {
+               mlog_errno(status);
+               goto bail;
+       }
+       status = dquot_initialize(new_dir);
+       if (status) {
+               mlog_errno(status);
+               goto bail;
+       }
 
        osb = OCFS2_SB(old_dir->i_sb);
 
@@ -1786,7 +1811,11 @@ static int ocfs2_symlink(struct inode *dir,
        trace_ocfs2_symlink_begin(dir, dentry, symname,
                                  dentry->d_name.len, dentry->d_name.name);
 
-       dquot_initialize(dir);
+       status = dquot_initialize(dir);
+       if (status) {
+               mlog_errno(status);
+               goto bail;
+       }
 
        sb = dir->i_sb;
        osb = OCFS2_SB(sb);
@@ -1831,8 +1860,9 @@ static int ocfs2_symlink(struct inode *dir,
        }
 
        inode = ocfs2_get_init_inode(dir, S_IFLNK | S_IRWXUGO);
-       if (!inode) {
-               status = -ENOMEM;
+       if (IS_ERR(inode)) {
+               status = PTR_ERR(inode);
+               inode = NULL;
                mlog_errno(status);
                goto bail;
        }
@@ -2485,8 +2515,9 @@ int ocfs2_create_inode_in_orphan(struct inode *dir,
        }
 
        inode = ocfs2_get_init_inode(dir, mode);
-       if (!inode) {
-               status = -ENOMEM;
+       if (IS_ERR(inode)) {
+               status = PTR_ERR(inode);
+               inode = NULL;
                mlog_errno(status);
                goto leave;
        }
diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c
index b69dd14c0b9b..7dc818b87cd8 100644
--- a/fs/ocfs2/refcounttree.c
+++ b/fs/ocfs2/refcounttree.c
@@ -4419,8 +4419,9 @@ static int ocfs2_vfs_reflink(struct dentry *old_dentry, 
struct inode *dir,
        }
 
        mutex_lock(&inode->i_mutex);
-       dquot_initialize(dir);
-       error = ocfs2_reflink(old_dentry, dir, new_dentry, preserve);
+       error = dquot_initialize(dir);
+       if (!error)
+               error = ocfs2_reflink(old_dentry, dir, new_dentry, preserve);
        mutex_unlock(&inode->i_mutex);
        if (!error)
                fsnotify_create(dir, new_dentry);
-- 
2.1.4


------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
Jfs-discussion mailing list
Jfs-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jfs-discussion

Reply via email to