From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dmitry Monakhov Subject: [PATCH 12/12] ext2: add error handling for dquot_initialize Date: Wed, 19 May 2010 10:02:08 +0400 Message-ID: <1274248928-5113-13-git-send-email-dmonakhov@openvz.org> References: <1274248928-5113-1-git-send-email-dmonakhov@openvz.org> <1274248928-5113-2-git-send-email-dmonakhov@openvz.org> <1274248928-5113-3-git-send-email-dmonakhov@openvz.org> <1274248928-5113-4-git-send-email-dmonakhov@openvz.org> <1274248928-5113-5-git-send-email-dmonakhov@openvz.org> <1274248928-5113-6-git-send-email-dmonakhov@openvz.org> <1274248928-5113-7-git-send-email-dmonakhov@openvz.org> <1274248928-5113-8-git-send-email-dmonakhov@openvz.org> <1274248928-5113-9-git-send-email-dmonakhov@openvz.org> <1274248928-5113-10-git-send-email-dmonakhov@openvz.org> <1274248928-5113-11-git-send-email-dmonakhov@openvz.org> <1274248928-5113-12-git-send-email-dmonakhov@openvz.org> Cc: jack@suse.cz, hch@infradead.org, Dmitry Monakhov To: linux-fsdevel@vger.kernel.org Return-path: Received: from fg-out-1718.google.com ([72.14.220.155]:61582 "EHLO fg-out-1718.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750813Ab0ESGCc (ORCPT ); Wed, 19 May 2010 02:02:32 -0400 Received: by fg-out-1718.google.com with SMTP id d23so3579967fga.1 for ; Tue, 18 May 2010 23:02:30 -0700 (PDT) In-Reply-To: <1274248928-5113-12-git-send-email-dmonakhov@openvz.org> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: Signed-off-by: Dmitry Monakhov --- fs/ext2/ialloc.c | 5 ++++- fs/ext2/inode.c | 11 +++++++++-- fs/ext2/namei.c | 40 ++++++++++++++++++++++++++++++---------- 3 files changed, 43 insertions(+), 13 deletions(-) diff --git a/fs/ext2/ialloc.c b/fs/ext2/ialloc.c index f0c5286..2b3e739 100644 --- a/fs/ext2/ialloc.c +++ b/fs/ext2/ialloc.c @@ -585,7 +585,10 @@ got: goto fail_drop; } - dquot_initialize(inode); + err = dquot_initialize(inode); + if (err) + goto fail_drop; + err = dquot_alloc_inode(inode); if (err) goto fail_drop; diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 527c46d..6f6cf0e 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c @@ -59,8 +59,15 @@ static inline int ext2_inode_is_fast_symlink(struct inode *inode) */ void ext2_delete_inode (struct inode * inode) { - if (!is_bad_inode(inode)) - dquot_initialize(inode); + if (!is_bad_inode(inode)) { + int ret = dquot_initialize(inode); + if (ret) + ext2_error(inode->i_sb, __func__, "Fail to init_quota " + "for inode %lu, uid %d, gid:%d, error%d, thus " + "quota information is probably inconsistent, " + "Please run quotacheck(8)", inode->i_ino, + inode->i_uid, inode->i_gid, ret); + } truncate_inode_pages(&inode->i_data, 0); if (is_bad_inode(inode)) diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c index 71efb0e..d47e549 100644 --- a/fs/ext2/namei.c +++ b/fs/ext2/namei.c @@ -101,8 +101,11 @@ struct dentry *ext2_get_parent(struct dentry *child) static int ext2_create (struct inode * dir, struct dentry * dentry, int mode, struct nameidata *nd) { struct inode *inode; + int err; - dquot_initialize(dir); + err = dquot_initialize(dir); + if (err) + return err; inode = ext2_new_inode(dir, mode); if (IS_ERR(inode)) @@ -131,7 +134,9 @@ static int ext2_mknod (struct inode * dir, struct dentry *dentry, int mode, dev_ if (!new_valid_dev(rdev)) return -EINVAL; - dquot_initialize(dir); + err = dquot_initialize(dir); + if (err) + return err; inode = ext2_new_inode (dir, mode); err = PTR_ERR(inode); @@ -157,7 +162,9 @@ static int ext2_symlink (struct inode * dir, struct dentry * dentry, if (l > sb->s_blocksize) goto out; - dquot_initialize(dir); + err = dquot_initialize(dir); + if (err) + return err; inode = ext2_new_inode (dir, S_IFLNK | S_IRWXUGO); err = PTR_ERR(inode); @@ -202,7 +209,9 @@ static int ext2_link (struct dentry * old_dentry, struct inode * dir, if (inode->i_nlink >= EXT2_LINK_MAX) return -EMLINK; - dquot_initialize(dir); + err = dquot_initialize(dir); + if (err) + return err; inode->i_ctime = CURRENT_TIME_SEC; inode_inc_link_count(inode); @@ -226,7 +235,9 @@ static int ext2_mkdir(struct inode * dir, struct dentry * dentry, int mode) if (dir->i_nlink >= EXT2_LINK_MAX) goto out; - dquot_initialize(dir); + err = dquot_initialize(dir); + if (err) + return err; inode_inc_link_count(dir); @@ -274,7 +285,9 @@ static int ext2_unlink(struct inode * dir, struct dentry *dentry) struct page * page; int err = -ENOENT; - dquot_initialize(dir); + err = dquot_initialize(dir); + if (err) + return err; de = ext2_find_entry (dir, &dentry->d_name, &page); if (!de) @@ -316,14 +329,21 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry, struct ext2_dir_entry_2 * dir_de = NULL; struct page * old_page; struct ext2_dir_entry_2 * old_de; - int err = -ENOENT; + int err; - dquot_initialize(old_dir); - dquot_initialize(new_dir); + err = dquot_initialize(old_dir); + if (err) + return err; + + err = dquot_initialize(new_dir); + if (err) + return err; old_de = ext2_find_entry (old_dir, &old_dentry->d_name, &old_page); - if (!old_de) + if (!old_de) { + err = -ENOENT; goto out; + } if (S_ISDIR(old_inode->i_mode)) { err = -EIO; -- 1.6.6.1