Gitweb:
http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=...
Commit: 75d28b69c5e47f48149efba985609161782bd31c
Parent: cf9c5e17f768c02b639d57df606b7b1594eb00ab
Author: Bob Peterson <rpeterso(a)redhat.com>
AuthorDate: Fri Jan 8 12:44:14 2010 -0600
Committer: Bob Peterson <rpeterso(a)redhat.com>
CommitterDate: Fri Jan 8 12:44:14 2010 -0600
gfs_fsck: Don't try to convert free inodes to free if -n was specified.
The code was checking free inodes and attempting to convert them
to free blocks, even if -n was specified on gfs_fsck. But free inodes
aren't technically errors and gfs_fsck's converting them to free blocks
is a convenience, so if -n was specified, don't treat them as errors.
rhbz#508978
---
gfs/gfs_fsck/pass4.c | 70 +++++++++++++++++++++++++++----------------------
1 files changed, 39 insertions(+), 31 deletions(-)
diff --git a/gfs/gfs_fsck/pass4.c b/gfs/gfs_fsck/pass4.c
index edfd57d..cb4255e 100644
--- a/gfs/gfs_fsck/pass4.c
+++ b/gfs/gfs_fsck/pass4.c
@@ -118,40 +118,48 @@ static int scan_inode_list(struct fsck_sb *sbp, osi_list_t *list) {
stack;
return -1;
}
- /* We don't want to clear zero-size files with
- * eattrs - there might be relevent info in
- * them. */
- if(!ip->i_di.di_size && !ip->i_di.di_eattr){
- log_err("Unlinked inode has zero size\n");
+ if(!sbp->opts->no) {
+ /* We don't want to clear zero-size files with
+ * eattrs - there might be relevent info in
+ * them. */
+ if(!ip->i_di.di_size && !ip->i_di.di_eattr){
+ log_err("Unlinked inode has zero "
+ "size\n");
+ errors_found++;
+ if(query(sbp, "Clear zero-size "
+ "unlinked inode? (y/n) ")) {
+ errors_corrected++;
+ block_set(sbp->bl, ii->inode,
+ block_free);
+ free_inode(&ip);
+ log_err("Unlinked inode with "
+ "zero size cleared\n");
+ continue;
+ } else
+ log_err("Unlinked inode with "
+ "zero size not "
+ "cleared\n");
+ }
errors_found++;
- if(query(sbp, "Clear zero-size unlinked inode? (y/n) ")) {
- errors_corrected++;
- block_set(sbp->bl, ii->inode, block_free);
- free_inode(&ip);
- log_err("Unlinked inode with zero size cleared\n");
- continue;
+ if(query(sbp, "Add unlinked inode to l+f? "
+ "(y/n)")) {
+ if(add_inode_to_lf(ip)) {
+ stack;
+ free_inode(&ip);
+ log_err("Unable to unlinked "
+ "inode to l+f\n");
+ return -1;
+ } else {
+ fix_inode_count(sbp, ii, ip);
+ lf_addition = 1;
+ errors_corrected++;
+ log_err("Unlinked inode added "
+ "to l+f\n");
+ }
} else
- log_err("Unlinked inode with zero size"
- " not cleared\n");
-
+ log_err("Unlinked inode left "
+ "unlinked\n");
}
- errors_found++;
- if(query(sbp, "Add unlinked inode to l+f? (y/n)")) {
- if(add_inode_to_lf(ip)) {
- stack;
- free_inode(&ip);
- log_err("Unable to unlinked inode to "
- "l+f\n");
- return -1;
- } else {
- fix_inode_count(sbp, ii, ip);
- lf_addition = 1;
- errors_corrected++;
- log_err("Unlinked inode added to "
- "l+f\n");
- }
- } else
- log_err("Unlinked inode left unlinked\n");
free_inode(&ip);
}
else if(ii->link_count != ii->counted_links) {