Re: [PATCHv3 5/6] ext4: Move ext4_fiemap to use iomap framework.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 2/26/20 6:57 PM, Jan Kara wrote:
On Wed 26-02-20 15:27:07, Ritesh Harjani wrote:
This patch moves ext4_fiemap to use iomap framework.
For xattr a new 'ext4_iomap_xattr_ops' is added.

Signed-off-by: Ritesh Harjani <riteshh@xxxxxxxxxxxxx>

...

-static int ext4_xattr_fiemap(struct inode *inode,
-				struct fiemap_extent_info *fieinfo)
+static int ext4_iomap_xattr_fiemap(struct inode *inode, struct iomap *iomap)
  {
  	__u64 physical = 0;
  	__u64 length;
-	__u32 flags = FIEMAP_EXTENT_LAST;
  	int blockbits = inode->i_sb->s_blocksize_bits;
  	int error = 0;
+	u16 iomap_type;
/* in-inode? */
  	if (ext4_test_inode_state(inode, EXT4_STATE_XATTR)) {
@@ -5130,40 +4928,44 @@ static int ext4_xattr_fiemap(struct inode *inode,
  				EXT4_I(inode)->i_extra_isize;
  		physical += offset;
  		length = EXT4_SB(inode->i_sb)->s_inode_size - offset;
-		flags |= FIEMAP_EXTENT_DATA_INLINE;
  		brelse(iloc.bh);
+		iomap_type = IOMAP_INLINE;
  	} else { /* external block */
  		physical = (__u64)EXT4_I(inode)->i_file_acl << blockbits;
  		length = inode->i_sb->s_blocksize;
+		iomap_type = IOMAP_MAPPED;
  	}

If i_file_acl is 0 (i.e., no external xattr block), then I think returned
iomap should be different...

Yes, my bad. Let me fix this please.



+static int ext4_iomap_xattr_begin(struct inode *inode, loff_t offset,
+				  loff_t length, unsigned flags,
+				  struct iomap *iomap, struct iomap *srcmap)
  {
-	ext4_lblk_t start_blk;
-	u32 ext4_fiemap_flags = FIEMAP_FLAG_SYNC|FIEMAP_FLAG_XATTR;
+	int error;
- int error = 0;
-
-	if (ext4_has_inline_data(inode)) {
-		int has_inline = 1;
+	error = ext4_iomap_xattr_fiemap(inode, iomap);
+	if (error == 0 && (offset >= iomap->length))
+		error = -ENOENT;

Is ENOENT really correct here? It seems strange to me...


Yes, -ENOENT means that there is no mapping beyond this and so iomap
core will stop querying further in iomap_fiemap.
I see that we do the same in case of inline mapping too in
ext4_iomap_begin_report().

-ritesh




[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux