X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=ldiskfs%2Fkernel_patches%2Fpatches%2Fext3-fiemap-2.6.22-vanilla.patch;h=80897e8745076781b44f81b7deb9b25e5ad93143;hb=299a09a121b6db885ecc26b2739c6e325e2145c7;hp=76474bf271b8b7086159bd41259ec0048f3adc92;hpb=f02790e857404ba7ad16d79084b108585f594c32;p=fs%2Flustre-release.git diff --git a/ldiskfs/kernel_patches/patches/ext3-fiemap-2.6.22-vanilla.patch b/ldiskfs/kernel_patches/patches/ext3-fiemap-2.6.22-vanilla.patch index 76474bf..80897e8 100644 --- a/ldiskfs/kernel_patches/patches/ext3-fiemap-2.6.22-vanilla.patch +++ b/ldiskfs/kernel_patches/patches/ext3-fiemap-2.6.22-vanilla.patch @@ -5,7 +5,7 @@ Index: linux-2.6.22.14/fs/ext3/ioctl.c =================================================================== --- linux-2.6.22.14.orig/fs/ext3/ioctl.c +++ linux-2.6.22.14/fs/ext3/ioctl.c -@@ -17,6 +17,159 @@ +@@ -17,6 +17,161 @@ #include #include #include @@ -19,9 +19,9 @@ Index: linux-2.6.22.14/fs/ext3/ioctl.c + * @fieinfo: Fiemap context passed into ->fiemap + * @logical: Extent logical start offset, in bytes + * @phys: Extent physical start offset, in bytes -+ * @len: Extent length, in bytes ++ * @len: Extent length, in bytes + * @flags: FIEMAP_EXTENT flags that describe this extent -+ * @lun: LUN on which this extent resides ++ * @lun: LUN on which this extent resides + * + * Called from file system ->fiemap callback. Will populate extent + * info as passed in via arguments and copy to user memory. On @@ -31,9 +31,9 @@ Index: linux-2.6.22.14/fs/ext3/ioctl.c + * extent that will fit in user array. + */ +#define SET_UNKNOWN_FLAGS (FIEMAP_EXTENT_DELALLOC) -+#define SET_NO_DIRECT_FLAGS (FIEMAP_EXTENT_DATA_COMPRESSED \ -+ |FIEMAP_EXTENT_DATA_ENCRYPTED \ ++#define SET_NO_DIRECT_FLAGS (FIEMAP_EXTENT_DATA_ENCRYPTED \ + |FIEMAP_EXTENT_NET) ++#define SET_NO_UNMOUNTED_IO_FLAGS (FIEMAP_EXTENT_DATA_ENCRYPTED) +#define SET_NOT_ALIGNED_FLAGS (FIEMAP_EXTENT_DATA_TAIL|FIEMAP_EXTENT_DATA_INLINE) +int fiemap_fill_next_extent(struct fiemap_extent_info *fieinfo, u64 logical, + u64 phys, u64 len, u32 flags, dev_t dev) @@ -43,19 +43,21 @@ Index: linux-2.6.22.14/fs/ext3/ioctl.c + + /* only count the extents */ + if (fieinfo->fi_extents_max == 0) { -+ fieinfo->fi_extents_mapped++; -+ return (flags & FIEMAP_EXTENT_LAST) ? 1 : 0; ++ fieinfo->fi_extents_mapped++; ++ return (flags & FIEMAP_EXTENT_LAST) ? 1 : 0; + } + + if (fieinfo->fi_extents_mapped >= fieinfo->fi_extents_max) -+ return 1; ++ return 1; + + if (flags & SET_UNKNOWN_FLAGS) -+ flags |= FIEMAP_EXTENT_UNKNOWN; ++ flags |= FIEMAP_EXTENT_UNKNOWN; + if (flags & SET_NO_DIRECT_FLAGS) -+ flags |= FIEMAP_EXTENT_NO_DIRECT; ++ flags |= FIEMAP_EXTENT_NO_DIRECT; + if (flags & SET_NOT_ALIGNED_FLAGS) -+ flags |= FIEMAP_EXTENT_NOT_ALIGNED; ++ flags |= FIEMAP_EXTENT_NOT_ALIGNED; ++ if (flags & SET_NO_UNMOUNTED_IO_FLAGS) ++ flags |= FIEMAP_EXTENT_ENCODED; + + extent.fe_logical = logical; + extent.fe_physical = phys; @@ -65,11 +67,11 @@ Index: linux-2.6.22.14/fs/ext3/ioctl.c + + dest += fieinfo->fi_extents_mapped; + if (copy_to_user(dest, &extent, sizeof(extent))) -+ return -EFAULT; ++ return -EFAULT; + + fieinfo->fi_extents_mapped++; + if (fieinfo->fi_extents_mapped == fieinfo->fi_extents_max) -+ return 1; ++ return 1; + + return (flags & FIEMAP_EXTENT_LAST) ? 1 : 0; +} @@ -131,11 +133,11 @@ Index: linux-2.6.22.14/fs/ext3/ioctl.c + int error = 0; + + if (copy_from_user(&fiemap, (struct fiemap __user *) arg, -+ sizeof(struct fiemap))) ++ sizeof(struct fiemap))) + return -EFAULT; + + if (fiemap.fm_extent_count > FIEMAP_MAX_EXTENTS) -+ return -EINVAL; ++ return -EINVAL; + + error = fiemap_check_ranges(sb, fiemap.fm_start, fiemap.fm_length, + &len); @@ -149,7 +151,7 @@ Index: linux-2.6.22.14/fs/ext3/ioctl.c + if (fiemap.fm_extent_count != 0 && + !access_ok(VERIFY_WRITE, (void *)arg, + offsetof(typeof(fiemap), fm_extents[fiemap.fm_extent_count]))) -+ return -EFAULT; ++ return -EFAULT; + + if (fieinfo.fi_flags & FIEMAP_FLAG_SYNC) + filemap_write_and_wait(inode->i_mapping); @@ -165,7 +167,7 @@ Index: linux-2.6.22.14/fs/ext3/ioctl.c int ext3_ioctl (struct inode * inode, struct file * filp, unsigned int cmd, unsigned long arg) -@@ -274,7 +427,9 @@ flags_err: +@@ -274,7 +429,9 @@ flags_err: return err; } @@ -180,7 +182,7 @@ Index: linux-2.6.22.14/include/linux/ext3_fs.h =================================================================== --- linux-2.6.22.14.orig/include/linux/ext3_fs.h +++ linux-2.6.22.14/include/linux/ext3_fs.h -@@ -254,15 +254,16 @@ struct ext3_new_group_data { +@@ -255,15 +255,16 @@ struct ext3_new_group_data { #define EXT3_IOC_SETFLAGS FS_IOC_SETFLAGS #define EXT3_IOC_GETVERSION _IOR('f', 3, long) #define EXT3_IOC_SETVERSION _IOW('f', 4, long) @@ -188,7 +190,7 @@ Index: linux-2.6.22.14/include/linux/ext3_fs.h +#define EXT3_IOC_SETRSVSZ _IOW('f', 6, long) #define EXT3_IOC_GROUP_EXTEND _IOW('f', 7, unsigned long) #define EXT3_IOC_GROUP_ADD _IOW('f', 8,struct ext3_new_group_input) -+#define EXT3_IOC_FIEMAP _IOWR('f', 10, struct fiemap) ++#define EXT3_IOC_FIEMAP _IOWR('f', 11, struct fiemap) #define EXT3_IOC_GETVERSION_OLD FS_IOC_GETVERSION #define EXT3_IOC_SETVERSION_OLD FS_IOC_SETVERSION #ifdef CONFIG_JBD_DEBUG @@ -199,7 +201,7 @@ Index: linux-2.6.22.14/include/linux/ext3_fs.h /* * ioctl commands in 32 bit emulation -@@ -280,6 +281,8 @@ struct ext3_new_group_data { +@@ -281,6 +282,8 @@ struct ext3_new_group_data { #define EXT3_IOC32_GETVERSION_OLD FS_IOC32_GETVERSION #define EXT3_IOC32_SETVERSION_OLD FS_IOC32_SETVERSION @@ -208,7 +210,7 @@ Index: linux-2.6.22.14/include/linux/ext3_fs.h /* * Mount options -@@ -1056,6 +1059,9 @@ extern int ext3_block_truncate_page(hand +@@ -1057,6 +1060,9 @@ extern int ext3_block_truncate_page(hand extern int ext3_ioctl (struct inode *, struct file *, unsigned int, unsigned long); extern long ext3_compat_ioctl (struct file *, unsigned int, unsigned long); @@ -218,7 +220,7 @@ Index: linux-2.6.22.14/include/linux/ext3_fs.h /* namei.c */ extern int ext3_orphan_add(handle_t *, struct inode *); -@@ -1133,7 +1139,6 @@ ext3_get_blocks_wrap(handle_t *handle, s +@@ -1134,7 +1140,6 @@ ext3_get_blocks_wrap(handle_t *handle, s return ret; } @@ -412,7 +414,7 @@ Index: linux-2.6.22.14/fs/ext3/fiemap.h =================================================================== --- /dev/null +++ linux-2.6.22.14/fs/ext3/fiemap.h -@@ -0,0 +1,84 @@ +@@ -0,0 +1,85 @@ +/* + * FIEMAP ioctl infrastructure. + * @@ -431,8 +433,10 @@ Index: linux-2.6.22.14/fs/ext3/fiemap.h + __u64 fe_physical; /* physical offset in bytes for the start + * of the extent from the beginning of the disk */ + __u64 fe_length; /* length in bytes for this extent */ ++ __u64 fe_reserved64[2]; + __u32 fe_flags; /* FIEMAP_EXTENT_* flags for this extent */ + __u32 fe_device; /* device number for this extent */ ++ __u32 fe_reserved[2]; +}; + +struct fiemap { @@ -469,31 +473,30 @@ Index: linux-2.6.22.14/fs/ext3/fiemap.h +/* ldiskfs only supports FLAG_SYNC flag currently */ +#define FIEMAP_FLAGS_COMPAT (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR) + -+ +#define FIEMAP_EXTENT_LAST 0x00000001 /* Last extent in file. */ +#define FIEMAP_EXTENT_UNKNOWN 0x00000002 /* Data location unknown. */ +#define FIEMAP_EXTENT_DELALLOC 0x00000004 /* Location still pending. -+ * Sets EXTENT_UNKNOWN. */ -+#define FIEMAP_EXTENT_NO_DIRECT 0x00000008 /* Data mapping undefined */ -+#define FIEMAP_EXTENT_SECONDARY 0x00000010 /* Data copied offline. May -+ * set EXTENT_NO_DIRECT. */ -+#define FIEMAP_EXTENT_NET 0x00000020 /* Data stored remotely. -+ * Sets EXTENT_NO_DIRECT. */ -+#define FIEMAP_EXTENT_DATA_COMPRESSED 0x00000040 /* Data is compressed by fs. -+ * Sets EXTENT_NO_DIRECT. */ ++ * Sets EXTENT_UNKNOWN. */ ++#define FIEMAP_EXTENT_ENCODED 0x00000008 /* Data can not be read ++ * while fs is unmounted */ +#define FIEMAP_EXTENT_DATA_ENCRYPTED 0x00000080 /* Data is encrypted by fs. -+ * Sets EXTENT_NO_DIRECT. */ ++ * Sets EXTENT_NO_DIRECT. */ +#define FIEMAP_EXTENT_NOT_ALIGNED 0x00000100 /* Extent offsets may not be -+ * block aligned. */ ++ * block aligned. */ +#define FIEMAP_EXTENT_DATA_INLINE 0x00000200 /* Data mixed with metadata. -+ * Sets EXTENT_NOT_ALIGNED.*/ ++ * Sets EXTENT_NOT_ALIGNED.*/ +#define FIEMAP_EXTENT_DATA_TAIL 0x00000400 /* Multiple files in block. -+ * Sets EXTENT_NOT_ALIGNED.*/ ++ * Sets EXTENT_NOT_ALIGNED.*/ +#define FIEMAP_EXTENT_UNWRITTEN 0x00000800 /* Space allocated, but -+ * no data (i.e. zero). */ ++ * no data (i.e. zero). */ +#define FIEMAP_EXTENT_MERGED 0x00001000 /* File does not natively -+ * support extents. Result -+ * merged for efficiency. */ ++ * support extents. Result ++ * merged for efficiency. */ ++ ++/* Lustre specific flags - use a high bit, don't conflict with upstream flag */ ++#define FIEMAP_EXTENT_NO_DIRECT 0x40000000 /* Data mapping undefined */ ++#define FIEMAP_EXTENT_NET 0x80000000 /* Data stored remotely. ++ * Sets NO_DIRECT flag */ + +#endif /* _LINUX_EXT3_FIEMAP_H */ +