Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html