From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [59.151.112.132] (helo=heian.cn.fujitsu.com) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1Zc1u0-0003vI-Rj for linux-mtd@lists.infradead.org; Wed, 16 Sep 2015 01:52:53 +0000 Message-ID: <55F8C9E3.8000601@cn.fujitsu.com> Date: Wed, 16 Sep 2015 09:46:11 +0800 From: Dongsheng Yang MIME-Version: 1.0 To: Sheng Yong , , , , CC: , Subject: Re: [PATCH v3 28/39] ubifs: record quota information about inode in ubifs_new_inode References: <1442307754-13233-1-git-send-email-yangds.fnst@cn.fujitsu.com> <1442307754-13233-29-git-send-email-yangds.fnst@cn.fujitsu.com> <55F7E65D.7060903@huawei.com> In-Reply-To: <55F7E65D.7060903@huawei.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , On 09/15/2015 05:35 PM, Sheng Yong wrote: > > > On 9/15/2015 5:02 PM, Dongsheng Yang wrote: >> Initialize quota and alloc a inode quota information in >> ubifs_new_inode(). Then quota would be aware of a new >> inode is allocated. >> >> Signed-off-by: Dongsheng Yang >> --- >> fs/ubifs/dir.c | 18 ++++++++++++++++-- >> 1 file changed, 16 insertions(+), 2 deletions(-) >> >> diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c >> index 4db0ceb..802c6ad 100644 >> --- a/fs/ubifs/dir.c >> +++ b/fs/ubifs/dir.c >> @@ -41,6 +41,7 @@ >> */ >> >> #include "ubifs.h" >> +#include >> >> /** >> * inherit_flags - inherit flags of the parent inode. >> @@ -90,6 +91,7 @@ struct inode *ubifs_new_inode(struct ubifs_info *c, const struct inode *dir, >> { >> struct inode *inode; >> struct ubifs_inode *ui; >> + int err = 0; >> >> inode = new_inode(c->vfs_sb); >> if (!inode) >> @@ -109,6 +111,11 @@ struct inode *ubifs_new_inode(struct ubifs_info *c, const struct inode *dir, >> ubifs_current_time(inode); >> inode->i_mapping->nrpages = 0; >> >> + dquot_initialize(inode); >> + err = dquot_alloc_inode(inode); >> + if (err) >> + goto fail_drop; >> + > Hi, Dongsheng > > I got a question here, it seems the inode used for xattr may not be counted in? Yes, that's intentional. inodes for xattr is not available to user. So I think we should not count it in quota. Yang > > thanks, > Sheng >> switch (mode & S_IFMT) { >> case S_IFREG: >> inode->i_mapping->a_ops = &ubifs_file_address_operations; >> @@ -148,8 +155,8 @@ struct inode *ubifs_new_inode(struct ubifs_info *c, const struct inode *dir, >> spin_unlock(&c->cnt_lock); >> ubifs_err(c, "out of inode numbers"); >> make_bad_inode(inode); >> - iput(inode); >> - return ERR_PTR(-EINVAL); >> + err = -EINVAL; >> + goto fail_free; >> } >> ubifs_warn(c, "running out of inode numbers (current %lu, max %u)", >> (unsigned long)c->highest_inum, INUM_WATERMARK); >> @@ -166,6 +173,13 @@ struct inode *ubifs_new_inode(struct ubifs_info *c, const struct inode *dir, >> ui->creat_sqnum = ++c->max_sqnum; >> spin_unlock(&c->cnt_lock); >> return inode; >> + >> +fail_free: >> + dquot_free_inode(inode); >> +fail_drop: >> + dquot_drop(inode); >> + iput(inode); >> + return ERR_PTR(err); >> } >> >> static int dbg_check_name(const struct ubifs_info *c, >> > > . >