[PATCH v3 28/39] ubifs: record quota information about inode in ubifs_new_inode

Sheng Yong shengyong1 at huawei.com
Tue Sep 15 02:35:25 PDT 2015



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 <yangds.fnst at cn.fujitsu.com>
> ---
>  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 <linux/quotaops.h>
>  
>  /**
>   * 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?

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,
> 




More information about the linux-mtd mailing list