diff options
-rw-r--r-- | sys/fs/ext2fs/ext2_bmap.c | 2 | ||||
-rw-r--r-- | sys/fs/ext2fs/ext2_dinode.h | 20 | ||||
-rw-r--r-- | sys/fs/ext2fs/ext2_htree.c | 6 | ||||
-rw-r--r-- | sys/fs/ext2fs/ext2_inode_cnv.c | 4 | ||||
-rw-r--r-- | sys/fs/ext2fs/ext2_lookup.c | 6 | ||||
-rw-r--r-- | sys/fs/ext2fs/ext2_subr.c | 8 | ||||
-rw-r--r-- | sys/fs/ext2fs/ext2_vfsops.c | 6 | ||||
-rw-r--r-- | sys/fs/ext2fs/ext2_vnops.c | 2 | ||||
-rw-r--r-- | sys/fs/ext2fs/inode.h | 7 |
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 |