summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/fs/ext2fs/ext2_bmap.c2
-rw-r--r--sys/fs/ext2fs/ext2_dinode.h20
-rw-r--r--sys/fs/ext2fs/ext2_htree.c6
-rw-r--r--sys/fs/ext2fs/ext2_inode_cnv.c4
-rw-r--r--sys/fs/ext2fs/ext2_lookup.c6
-rw-r--r--sys/fs/ext2fs/ext2_subr.c8
-rw-r--r--sys/fs/ext2fs/ext2_vfsops.c6
-rw-r--r--sys/fs/ext2fs/ext2_vnops.c2
-rw-r--r--sys/fs/ext2fs/inode.h7
9 files changed, 35 insertions, 26 deletions
diff --git a/sys/fs/ext2fs/ext2_bmap.c b/sys/fs/ext2fs/ext2_bmap.c
index 29cd7af..1ae3c2d 100644
--- a/sys/fs/ext2fs/ext2_bmap.c
+++ b/sys/fs/ext2fs/ext2_bmap.c
@@ -74,7 +74,7 @@ ext2_bmap(struct vop_bmap_args *ap)
if (ap->a_bnp == NULL)
return (0);
- if (VTOI(ap->a_vp)->i_flags & EXT4_EXTENTS)
+ if (VTOI(ap->a_vp)->i_flag & IN_E4EXTENTS)
error = ext4_bmapext(ap->a_vp, ap->a_bn, &blkno,
ap->a_runp, ap->a_runb);
else
diff --git a/sys/fs/ext2fs/ext2_dinode.h b/sys/fs/ext2fs/ext2_dinode.h
index 41b0236..2f2a963 100644
--- a/sys/fs/ext2fs/ext2_dinode.h
+++ b/sys/fs/ext2fs/ext2_dinode.h
@@ -50,22 +50,24 @@
/*
* Inode flags
- * The current implementation uses only EXT2_IMMUTABLE and EXT2_APPEND flags
+ * The system supports EXT2_IMMUTABLE, EXT2_APPEND and EXT2_NODUMP flags.
+ * The current implementation also uses EXT4_INDEX, EXT4_EXTENTS and
+ * EXT4_HUGE_FILE with some restrictions, imposed the lack of write
+ * support.
*/
#define EXT2_SECRM 0x00000001 /* Secure deletion */
#define EXT2_UNRM 0x00000002 /* Undelete */
#define EXT2_COMPR 0x00000004 /* Compress file */
#define EXT2_SYNC 0x00000008 /* Synchronous updates */
#define EXT2_IMMUTABLE 0x00000010 /* Immutable file */
-#define EXT2_APPEND 0x00000020 /* writes to file may only append */
-#define EXT2_NODUMP 0x00000040 /* do not dump file */
-#define EXT2_NOATIME 0x00000080 /* do not update atime */
-
-#define EXT4_INDEX 0x00001000 /* hash-indexed directory */
+#define EXT2_APPEND 0x00000020 /* Writes to file may only append */
+#define EXT2_NODUMP 0x00000040 /* Do not dump file */
+#define EXT2_NOATIME 0x00000080 /* Do not update atime */
+#define EXT4_INDEX 0x00001000 /* Hash-indexed directory */
#define EXT4_IMAGIC 0x00002000 /* AFS directory */
-#define EXT4_JOURNAL_DATA 0x00004000 /* file data should be journaled */
-#define EXT4_NOTAIL 0x00008000 /* file tail should not be merged */
-#define EXT4_DIRSYNC 0x00010000 /* dirsync behaviour */
+#define EXT4_JOURNAL_DATA 0x00004000 /* File data should be journaled */
+#define EXT4_NOTAIL 0x00008000 /* File tail should not be merged */
+#define EXT4_DIRSYNC 0x00010000 /* Dirsync behaviour */
#define EXT4_TOPDIR 0x00020000 /* Top of directory hierarchies*/
#define EXT4_HUGE_FILE 0x00040000 /* Set to each huge file */
#define EXT4_EXTENTS 0x00080000 /* Inode uses extents */
diff --git a/sys/fs/ext2fs/ext2_htree.c b/sys/fs/ext2fs/ext2_htree.c
index ff1e1a5..34af8ae 100644
--- a/sys/fs/ext2fs/ext2_htree.c
+++ b/sys/fs/ext2fs/ext2_htree.c
@@ -89,12 +89,10 @@ static int ext2_htree_writebuf(struct ext2fs_htree_lookup_info *info);
int
ext2_htree_has_idx(struct inode *ip)
{
-#ifdef EXT2FS_HTREE
if (EXT2_HAS_COMPAT_FEATURE(ip->i_e2fs, EXT2F_COMPAT_DIRHASHINDEX) &&
- ip->i_flags & EXT4_INDEX)
+ ip->i_flag & IN_E4INDEX)
return (1);
else
-#endif
return (0);
}
@@ -656,7 +654,7 @@ ext2_htree_create_index(struct vnode *vp, struct componentname *cnp,
((char *)ep + ep->e2d_reclen);
ep->e2d_reclen = buf1 + blksize - (char *)ep;
- dp->i_flags |= EXT4_INDEX;
+ dp->i_flag |= IN_E4INDEX;
/*
* Initialize index root.
diff --git a/sys/fs/ext2fs/ext2_inode_cnv.c b/sys/fs/ext2fs/ext2_inode_cnv.c
index 67712d0..31c9557 100644
--- a/sys/fs/ext2fs/ext2_inode_cnv.c
+++ b/sys/fs/ext2fs/ext2_inode_cnv.c
@@ -108,6 +108,8 @@ ext2_ei2i(struct ext2fs_dinode *ei, struct inode *ip)
ip->i_flags |= (ei->e2di_flags & EXT2_APPEND) ? SF_APPEND : 0;
ip->i_flags |= (ei->e2di_flags & EXT2_IMMUTABLE) ? SF_IMMUTABLE : 0;
ip->i_flags |= (ei->e2di_flags & EXT2_NODUMP) ? UF_NODUMP : 0;
+ ip->i_flag |= (ei->e2di_flags & EXT4_INDEX) ? IN_E4INDEX : 0;
+ ip->i_flag |= (ei->e2di_flags & EXT4_EXTENTS) ? IN_E4EXTENTS : 0;
ip->i_blocks = ei->e2di_nblock;
if (E2DI_HAS_HUGE_FILE(ip)) {
ip->i_blocks |= (uint64_t)ei->e2di_nblock_high << 32;
@@ -156,6 +158,8 @@ ext2_i2ei(struct inode *ip, struct ext2fs_dinode *ei)
ei->e2di_flags |= (ip->i_flags & SF_APPEND) ? EXT2_APPEND: 0;
ei->e2di_flags |= (ip->i_flags & SF_IMMUTABLE) ? EXT2_IMMUTABLE: 0;
ei->e2di_flags |= (ip->i_flags & UF_NODUMP) ? EXT2_NODUMP: 0;
+ ei->e2di_flags |= (ip->i_flag & IN_E4INDEX) ? EXT4_INDEX: 0;
+ ei->e2di_flags |= (ip->i_flag & IN_E4EXTENTS) ? EXT4_EXTENTS: 0;
ei->e2di_nblock = ip->i_blocks & 0xffffffff;
ei->e2di_nblock_high = ip->i_blocks >> 32 & 0xffff;
ei->e2di_gen = ip->i_gen;
diff --git a/sys/fs/ext2fs/ext2_lookup.c b/sys/fs/ext2fs/ext2_lookup.c
index d607554..c674197 100644
--- a/sys/fs/ext2fs/ext2_lookup.c
+++ b/sys/fs/ext2fs/ext2_lookup.c
@@ -884,12 +884,11 @@ ext2_direnter(struct inode *ip, struct vnode *dvp, struct componentname *cnp)
bcopy(cnp->cn_nameptr, newdir.e2d_name, (unsigned)cnp->cn_namelen + 1);
newentrysize = EXT2_DIR_REC_LEN(newdir.e2d_namlen);
-#ifdef EXT2FS_HTREE
if (ext2_htree_has_idx(dp)) {
error = ext2_htree_add_entry(dvp, &newdir, cnp);
if (error) {
- dp->i_flags &= ~EXT4_INDEX;
- dp->i_flags |= IN_CHANGE | IN_UPDATE;
+ dp->i_flag &= ~IN_E4INDEX;
+ dp->i_flag |= IN_CHANGE | IN_UPDATE;
}
return (error);
}
@@ -905,7 +904,6 @@ ext2_direnter(struct inode *ip, struct vnode *dvp, struct componentname *cnp)
return ext2_htree_create_index(dvp, cnp, &newdir);
}
}
-#endif /* EXT2FS_HTREE */
if (dp->i_count == 0) {
/*
diff --git a/sys/fs/ext2fs/ext2_subr.c b/sys/fs/ext2fs/ext2_subr.c
index ec10ea8..6b9041d 100644
--- a/sys/fs/ext2fs/ext2_subr.c
+++ b/sys/fs/ext2fs/ext2_subr.c
@@ -82,10 +82,10 @@ ext2_blkatoff(struct vnode *vp, off_t offset, char **res, struct buf **bpp)
*bpp = NULL;
/*
- * The EXT4_EXTENTS requires special treatment, otherwise we can
- * fall back to the normal path.
+ * IN_E4EXTENTS requires special treatment as we can otherwise fall
+ * back to the normal path.
*/
- if (!(ip->i_flags & EXT4_EXTENTS))
+ if (!(ip->i_flag & IN_E4EXTENTS))
goto normal;
memset(&path, 0, sizeof(path));
@@ -110,7 +110,7 @@ ext2_blkatoff(struct vnode *vp, off_t offset, char **res, struct buf **bpp)
if (res)
*res = (char *)bp->b_data + blkoff(fs, offset);
/*
- * If EXT4_EXTENTS is enabled we would get a wrong offset so
+ * If IN_E4EXTENTS is enabled we would get a wrong offset so
* reset b_offset here.
*/
bp->b_offset = lbn * bsize;
diff --git a/sys/fs/ext2fs/ext2_vfsops.c b/sys/fs/ext2fs/ext2_vfsops.c
index b468356..a18d5cc1 100644
--- a/sys/fs/ext2fs/ext2_vfsops.c
+++ b/sys/fs/ext2fs/ext2_vfsops.c
@@ -964,10 +964,10 @@ ext2_vget(struct mount *mp, ino_t ino, int flags, struct vnode **vpp)
* blocks are zeroed out - ext2_balloc depends on this
* although for regular files and directories only
*
- * If EXT4_EXTENTS flag is enabled, unused blocks aren't
- * zeroed out because we could corrupt the extent tree.
+ * If IN_E4EXTENTS is enabled, unused blocks are not zeroed
+ * out because we could corrupt the extent tree.
*/
- if (!(ip->i_flags & EXT4_EXTENTS) &&
+ if (!(ip->i_flag & IN_E4EXTENTS) &&
(S_ISDIR(ip->i_mode) || S_ISREG(ip->i_mode))) {
used_blocks = (ip->i_size+fs->e2fs_bsize-1) / fs->e2fs_bsize;
for (i = used_blocks; i < EXT2_NDIR_BLOCKS; i++)
diff --git a/sys/fs/ext2fs/ext2_vnops.c b/sys/fs/ext2fs/ext2_vnops.c
index 04ef9e2..4bcedc2 100644
--- a/sys/fs/ext2fs/ext2_vnops.c
+++ b/sys/fs/ext2fs/ext2_vnops.c
@@ -1615,7 +1615,7 @@ ext2_read(struct vop_read_args *ap)
ip = VTOI(vp);
/*EXT4_EXT_LOCK(ip);*/
- if (ip->i_flags & EXT4_EXTENTS)
+ if (ip->i_flag & IN_E4EXTENTS)
error = ext4_ext_read(ap);
else
error = ext2_ind_read(ap);
diff --git a/sys/fs/ext2fs/inode.h b/sys/fs/ext2fs/inode.h
index e2016c5..21c7944 100644
--- a/sys/fs/ext2fs/inode.h
+++ b/sys/fs/ext2fs/inode.h
@@ -153,6 +153,13 @@ struct inode {
#define IN_LAZYACCESS 0x0100 /* Process IN_ACCESS after the
suspension finished */
+/*
+ * These are translation flags for some attributes that Ext4
+ * passes as inode flags but that we cannot pass directly.
+ */
+#define IN_E4INDEX 0x010000
+#define IN_E4EXTENTS 0x020000
+
#define i_devvp i_ump->um_devvp
#ifdef _KERNEL
OpenPOWER on IntegriCloud