Re: [RFC][PATCH 0/3] ext4: online defrag (ver 1.0)

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

 



Hi Greg,

Greg Freemyer wrote:
On Fri, Jan 30, 2009 at 1:11 AM, Akira Fujita <a-fujita@xxxxxxxxxxxxx> wrote:
Hi,

I have rewritten ext4 online defrag patches based on the comments from Ted.
In the new defrag, create donor inode in the user space instead of kernel space,
and then allocate contiguous blocks to it with fallocate().
In kernel space, exchange the blocks between target inode and donor inode,
and then copy the file data of target inode to donor inode every 64MB.
The EXT4_IOC_DEFRAG ioctl becomes simpler than the old one,
so it may be useful for other purposes.

#define EXT4_IOC_DEFRAG                 _IOW('f', 15, struct move_extent)



I see.  Does EXT4_IOC_MOVE_EXT sound better for you?

#define EXT4_IOC_MOVE_EXT             _IOW('f', 15, struct move_extent)

Do we want the ioctl name to be specific to defrag?  I thought Ted's
goal was to make it more generic?  I can also envision this same ioctl
being implemented by other file systems so EXT4 seems an inappropriate
prefix.

Other filesystems (e.g. xfs, btrfs) have their own defrag ioctl,
and ext2/3 can not use this ioctl because they do not handle
extent file, though.
What kind of advantage do you think by moving this ioctl
to vfs layer?


Thoughts?

struct move_extent {
       int org_fd;             /* original file descriptor */
       int dest_fd;            /* destination file descriptor */
       ext4_lblk_t start;      /* logical offset of org_fd and dest_fd */
       ext4_lblk_t len;        /* exchange block length */
};

I would also like to see .dest_fd changed to .donor_fd.

I would like to see the ABI be more flexible and have .start be broken
into 2 fields:

.start_orig
.start_donor

And I don't think they should be of type ext4_lblk_t.  Something more
generic seems appropriate.

OK, I broke .start into .orig_start and .donor_start
and changed the entry type from ext4_lblk_t to __u64.
The new move_extent structure is as follows:

struct move_extent {
         int orig_fd;            /* original file descriptor */
         int donor_fd;           /* donor file descriptor */
         __u64 orig_start;       /* logical start offset in block for orig */
         __u64 donor_start;      /* logical start offset in block for donor */
         __u64 len;              /* exchange block length */
};

Any comments?

Regards,
Akira Fujita
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[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