Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=9f3aa3018314f9... Commit: 9f3aa3018314f9d1a93024bc554fdf020256caaa Parent: f6f7fc44566dc95c983a24b5b51d5b0d4f36f2e9 Author: Bob Peterson rpeterso@redhat.com AuthorDate: Tue Dec 18 14:14:08 2012 -0600 Committer: Bob Peterson rpeterso@redhat.com CommitterDate: Thu Jan 3 07:35:01 2013 -0700
gfs2_convert: clear out old di_mode before setting it
This patch clears the dinode 'di_mode' inode type field before setting it based on the GFS1 value. In rare circumstances (e.g. fsck.gfs2 ran on a GFS1 file system and created lost+found with both GFS1 and GFS2 data) di_mode might have an old value. In these cases, simply doing a logical 'or' with the correct value produces an invalid value. Zeroing it out beforehand ensures it is set correctly based on the GFS1 type.
rhbz#888053 --- gfs2/convert/gfs2_convert.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/gfs2/convert/gfs2_convert.c b/gfs2/convert/gfs2_convert.c index d6fe1c8..6f3dfb3 100644 --- a/gfs2/convert/gfs2_convert.c +++ b/gfs2/convert/gfs2_convert.c @@ -897,6 +897,7 @@ static int adjust_inode(struct gfs2_sbd *sbp, struct gfs2_buffer_head *bh) inode->i_di.di_num.no_formal_ino = sbp->md.next_inum; ; /* Fix the inode type: gfs1 uses di_type, gfs2 uses di_mode. */ + inode->i_di.di_mode &= ~S_IFMT; switch (inode->i_di.__pad1) { /* formerly di_type */ case GFS_FILE_DIR: /* directory */ inode->i_di.di_mode |= S_IFDIR;
cluster-commits@lists.fedorahosted.org