aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
authorLukas Czerner <lczerner@redhat.com>2013-04-10 23:32:52 -0400
committerTheodore Ts'o <tytso@mit.edu>2013-04-10 23:32:52 -0400
commit0d14b098ce05c067e06eea5ed63d9b5c14656bdb (patch)
tree251da1c2ba46926a1fc2297f0303b97372cd8326 /fs/ext4
parentd6a771056b32146da1280f7872f6936b0c7770ea (diff)
ext4: move ext4_ind_migrate() into migrate.c
Move ext4_ind_migrate() into migrate.c file since it makes much more sense and ext4_ext_migrate() is there as well. Also fix tiny style problem - add spaces around "=" in "i=0". Signed-off-by: Lukas Czerner <lczerner@redhat.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/ext4.h2
-rw-r--r--fs/ext4/extents.c57
-rw-r--r--fs/ext4/migrate.c58
3 files changed, 58 insertions, 59 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 12b560435aba..75b2326b04c6 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -2136,6 +2136,7 @@ extern long ext4_compat_ioctl(struct file *, unsigned int, unsigned long);
2136 2136
2137/* migrate.c */ 2137/* migrate.c */
2138extern int ext4_ext_migrate(struct inode *); 2138extern int ext4_ext_migrate(struct inode *);
2139extern int ext4_ind_migrate(struct inode *inode);
2139 2140
2140/* namei.c */ 2141/* namei.c */
2141extern int ext4_dirent_csum_verify(struct inode *inode, 2142extern int ext4_dirent_csum_verify(struct inode *inode,
@@ -2625,7 +2626,6 @@ extern int ext4_find_delalloc_range(struct inode *inode,
2625extern int ext4_find_delalloc_cluster(struct inode *inode, ext4_lblk_t lblk); 2626extern int ext4_find_delalloc_cluster(struct inode *inode, ext4_lblk_t lblk);
2626extern int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, 2627extern int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
2627 __u64 start, __u64 len); 2628 __u64 start, __u64 len);
2628extern int ext4_ind_migrate(struct inode *inode);
2629 2629
2630 2630
2631/* move_extent.c */ 2631/* move_extent.c */
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 34ba222f32fa..6fcb375c8fde 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -4724,60 +4724,3 @@ int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
4724 4724
4725 return error; 4725 return error;
4726} 4726}
4727
4728/*
4729 * Migrate a simple extent-based inode to use the i_blocks[] array
4730 */
4731int ext4_ind_migrate(struct inode *inode)
4732{
4733 struct ext4_extent_header *eh;
4734 struct ext4_super_block *es = EXT4_SB(inode->i_sb)->s_es;
4735 struct ext4_inode_info *ei = EXT4_I(inode);
4736 struct ext4_extent *ex;
4737 unsigned int i, len;
4738 ext4_fsblk_t blk;
4739 handle_t *handle;
4740 int ret;
4741
4742 if (!EXT4_HAS_INCOMPAT_FEATURE(inode->i_sb,
4743 EXT4_FEATURE_INCOMPAT_EXTENTS) ||
4744 (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)))
4745 return -EINVAL;
4746
4747 handle = ext4_journal_start(inode, EXT4_HT_MIGRATE, 1);
4748 if (IS_ERR(handle))
4749 return PTR_ERR(handle);
4750
4751 down_write(&EXT4_I(inode)->i_data_sem);
4752 ret = ext4_ext_check_inode(inode);
4753 if (ret)
4754 goto errout;
4755
4756 eh = ext_inode_hdr(inode);
4757 ex = EXT_FIRST_EXTENT(eh);
4758 if (ext4_blocks_count(es) > EXT4_MAX_BLOCK_FILE_PHYS ||
4759 eh->eh_depth != 0 || le16_to_cpu(eh->eh_entries) > 1) {
4760 ret = -EOPNOTSUPP;
4761 goto errout;
4762 }
4763 if (eh->eh_entries == 0)
4764 blk = len = 0;
4765 else {
4766 len = le16_to_cpu(ex->ee_len);
4767 blk = ext4_ext_pblock(ex);
4768 if (len > EXT4_NDIR_BLOCKS) {
4769 ret = -EOPNOTSUPP;
4770 goto errout;
4771 }
4772 }
4773
4774 ext4_clear_inode_flag(inode, EXT4_INODE_EXTENTS);
4775 memset(ei->i_data, 0, sizeof(ei->i_data));
4776 for (i=0; i < len; i++)
4777 ei->i_data[i] = cpu_to_le32(blk++);
4778 ext4_mark_inode_dirty(handle, inode);
4779errout:
4780 ext4_journal_stop(handle);
4781 up_write(&EXT4_I(inode)->i_data_sem);
4782 return ret;
4783}
diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c
index 480acf4a085f..d129a4dc16a7 100644
--- a/fs/ext4/migrate.c
+++ b/fs/ext4/migrate.c
@@ -426,7 +426,6 @@ static int free_ext_block(handle_t *handle, struct inode *inode)
426 return retval; 426 return retval;
427 } 427 }
428 return retval; 428 return retval;
429
430} 429}
431 430
432int ext4_ext_migrate(struct inode *inode) 431int ext4_ext_migrate(struct inode *inode)
@@ -606,3 +605,60 @@ out:
606 605
607 return retval; 606 return retval;
608} 607}
608
609/*
610 * Migrate a simple extent-based inode to use the i_blocks[] array
611 */
612int ext4_ind_migrate(struct inode *inode)
613{
614 struct ext4_extent_header *eh;
615 struct ext4_super_block *es = EXT4_SB(inode->i_sb)->s_es;
616 struct ext4_inode_info *ei = EXT4_I(inode);
617 struct ext4_extent *ex;
618 unsigned int i, len;
619 ext4_fsblk_t blk;
620 handle_t *handle;
621 int ret;
622
623 if (!EXT4_HAS_INCOMPAT_FEATURE(inode->i_sb,
624 EXT4_FEATURE_INCOMPAT_EXTENTS) ||
625 (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)))
626 return -EINVAL;
627
628 handle = ext4_journal_start(inode, EXT4_HT_MIGRATE, 1);
629 if (IS_ERR(handle))
630 return PTR_ERR(handle);
631
632 down_write(&EXT4_I(inode)->i_data_sem);
633 ret = ext4_ext_check_inode(inode);
634 if (ret)
635 goto errout;
636
637 eh = ext_inode_hdr(inode);
638 ex = EXT_FIRST_EXTENT(eh);
639 if (ext4_blocks_count(es) > EXT4_MAX_BLOCK_FILE_PHYS ||
640 eh->eh_depth != 0 || le16_to_cpu(eh->eh_entries) > 1) {
641 ret = -EOPNOTSUPP;
642 goto errout;
643 }
644 if (eh->eh_entries == 0)
645 blk = len = 0;
646 else {
647 len = le16_to_cpu(ex->ee_len);
648 blk = ext4_ext_pblock(ex);
649 if (len > EXT4_NDIR_BLOCKS) {
650 ret = -EOPNOTSUPP;
651 goto errout;
652 }
653 }
654
655 ext4_clear_inode_flag(inode, EXT4_INODE_EXTENTS);
656 memset(ei->i_data, 0, sizeof(ei->i_data));
657 for (i=0; i < len; i++)
658 ei->i_data[i] = cpu_to_le32(blk++);
659 ext4_mark_inode_dirty(handle, inode);
660errout:
661 ext4_journal_stop(handle);
662 up_write(&EXT4_I(inode)->i_data_sem);
663 return ret;
664}