[Ocfs2-tools-devel] [PATCH 4/5] Convert disabling of sparse feature to use new code in libocfs2
Jan Kara
jack at suse.cz
Wed Oct 14 11:08:58 PDT 2009
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);
- 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);
--
1.6.0.2
More information about the Ocfs2-tools-devel
mailing list