[Ocfs2-devel] [PATCH 4/5] Convert disabling of sparse feature to use new code in libocfs2

Tristan tristan.ye at oracle.com
Fri Oct 16 01:16:54 PDT 2009


Jan Kara wrote:
> Make code handling update of quota information when disabling
> sparse feature use new generic code in libocfs2.
>
> Signed-off-by: Jan Kara <jack at suse.cz>
> ---
>  tunefs.ocfs2/feature_sparse_files.c |  100 ++++++----------------------------
>  1 files changed, 18 insertions(+), 82 deletions(-)
>
> diff --git a/tunefs.ocfs2/feature_sparse_files.c b/tunefs.ocfs2/feature_sparse_files.c
> index d4dff34..4f8c0db 100644
> --- a/tunefs.ocfs2/feature_sparse_files.c
> +++ b/tunefs.ocfs2/feature_sparse_files.c
> @@ -448,8 +448,6 @@ static errcode_t fill_sparse_files(ocfs2_filesys *fs,
>  	struct list_head *pos;
>  	struct sparse_file *file;
>  	struct tools_progress *prog;
>   

> -	struct ocfs2_super_block *super = OCFS2_RAW_SB(fs->fs_super);
>   
Please don't remove this variable though it will not be used in this 
patch anymore, your following patch(patch5) however will use this 
structure again, see:

[PATCH 5/5] Don't account space used for system files when disabling 
sparse feature

-		if (di->i_clusters != file->old_clusters) {
+		if (di->i_clusters != file->old_clusters && 
+		    (!(di->i_flags & OCFS2_SYSTEM_FL) ||
+		    file->blkno == super->s_root_blkno)) {


> -	int has_usrquota, has_grpquota;
>  	ocfs2_quota_hash *usrhash = NULL, *grphash = NULL;
>  
>  	prog = tools_progress_start("Filling holes", "filling",
> @@ -459,32 +457,14 @@ static errcode_t fill_sparse_files(ocfs2_filesys *fs,
>  		goto out;
>  	}
>  
> -	has_usrquota = OCFS2_HAS_RO_COMPAT_FEATURE(super,
> -					OCFS2_FEATURE_RO_COMPAT_USRQUOTA);
> -	has_grpquota = OCFS2_HAS_RO_COMPAT_FEATURE(super,
> -					OCFS2_FEATURE_RO_COMPAT_GRPQUOTA);
> -	if (has_usrquota) {
> -		ret = ocfs2_init_fs_quota_info(fs, USRQUOTA);
> -		if (ret)
> -			goto out;
> -		ret = ocfs2_read_global_quota_info(fs, USRQUOTA);
> -		if (ret)
> -			goto out;
> -		ret = ocfs2_new_quota_hash(&usrhash);
> -		if (ret)
> -			goto out;
> -	}
> -	if (has_grpquota) {
> -		ret = ocfs2_init_fs_quota_info(fs, GRPQUOTA);
> -		if (ret)
> -			goto out;
> -		ret = ocfs2_read_global_quota_info(fs, GRPQUOTA);
> -		if (ret)
> -			goto out;
> -		ret = ocfs2_new_quota_hash(&grphash);
> -		if (ret)
> -			goto out;
> -	}
> +
> +	ret = ocfs2_load_fs_quota_info(fs);
> +	if (ret)
> +		goto out;
> +
> +	ret = ocfs2_init_quota_change(fs, &usrhash, &grphash);
> +	if (ret)
> +		goto out;
>  
>  	ret = ocfs2_malloc_block(fs->fs_io, &buf);
>  	if (ret)
> @@ -497,7 +477,7 @@ static errcode_t fill_sparse_files(ocfs2_filesys *fs,
>  		if (ret)
>  			break;
>  
> -		if (!file->truncate && !has_usrquota && !has_grpquota)
> +		if (!file->truncate && !usrhash && !grphash)
>  			continue;
>  
>  		ret = ocfs2_read_inode(fs, file->blkno, buf);
> @@ -511,7 +491,6 @@ static errcode_t fill_sparse_files(ocfs2_filesys *fs,
>  		}
>  		if (di->i_clusters != file->old_clusters) {
>  			long long change;
> -			ocfs2_cached_dquot *udquot = NULL, *gdquot = NULL;
>  
>  			if (di->i_clusters > file->old_clusters) {
>  				change = ocfs2_clusters_to_bytes(fs,
> @@ -521,64 +500,21 @@ static errcode_t fill_sparse_files(ocfs2_filesys *fs,
>  					file->old_clusters - di->i_clusters);
>  			}
>  
> -			if (has_usrquota) {
> -				ret = ocfs2_find_quota_hash(usrhash, di->i_uid,
> -							    &udquot);
> -				if (ret)
> -					break;
> -				if (!udquot) {
> -					ret = ocfs2_read_dquot(fs, USRQUOTA,
> -							       di->i_uid,
> -							       &udquot);
> -					if (ret)
> -						break;
> -					ret = ocfs2_insert_quota_hash(usrhash,
> -								      udquot);
> -					if (ret)
> -						break;
> -				}
> -				udquot->d_ddquot.dqb_curspace += change;
> -			}
> -			if (has_grpquota) {
> -				ret = ocfs2_find_quota_hash(grphash, di->i_gid,
> -							    &gdquot);
> -				if (ret)
> -					break;
> -				if (!gdquot) {
> -					ret = ocfs2_read_dquot(fs, GRPQUOTA,
> -							       di->i_gid,
> -							       &gdquot);
> -					if (ret)
> -						break;
> -					ret = ocfs2_insert_quota_hash(grphash,
> -								      gdquot);
> -					if (ret)
> -						break;
> -				}
> -				gdquot->d_ddquot.dqb_curspace += change;
> -			}
> +			ret = ocfs2_apply_quota_change(fs, usrhash, grphash,
> +						       di->i_uid, di->i_gid,
> +						       change, 0);
> +			if (ret)
> +				break;
>  		}
>  	}
>  
>  	ocfs2_free(&buf);
>  
>  out:
> -	if (usrhash) {
> -		err = ocfs2_write_release_dquots(fs, USRQUOTA, usrhash);
> -		if (!ret)
> -			ret = err;
> -		err = ocfs2_free_quota_hash(usrhash);
> -		if (!ret)
> -			ret = err;
> -	}
> -	if (grphash) {
> -		err = ocfs2_write_release_dquots(fs, GRPQUOTA, grphash);
> -		if (!ret)
> -			ret = err;
> -		err = ocfs2_free_quota_hash(grphash);
> -		if (!ret)
> -			ret = err;
> -	}
> +	err = ocfs2_finish_quota_change(fs, usrhash, grphash);
> +	if (!ret)
> +		ret = err;
> +
>  	if (prog)
>  		tools_progress_stop(prog);
>  
>   




More information about the Ocfs2-devel mailing list