resize.c (4d68c05ce11f4cdf6a6392f3a18dc6a985b4d0c4) | resize.c (a0ade1deb86d2325aecc36272bb4505a6eec9235) |
---|---|
1/* 2 * linux/fs/ext4/resize.c 3 * 4 * Support for resizing an ext4 filesystem while it is mounted. 5 * 6 * Copyright (C) 2001, 2002 Andreas Dilger <adilger@clusterfs.com> 7 * 8 * This could probably be made into a module, because it is not often in use. --- 1568 unchanged lines hidden (view full) --- 1577 struct ext4_new_flex_group_data *flex_gd = NULL; 1578 struct ext4_sb_info *sbi = EXT4_SB(sb); 1579 struct ext4_super_block *es = sbi->s_es; 1580 struct buffer_head *bh; 1581 struct inode *resize_inode; 1582 ext4_fsblk_t o_blocks_count; 1583 ext4_group_t o_group; 1584 ext4_group_t n_group; | 1/* 2 * linux/fs/ext4/resize.c 3 * 4 * Support for resizing an ext4 filesystem while it is mounted. 5 * 6 * Copyright (C) 2001, 2002 Andreas Dilger <adilger@clusterfs.com> 7 * 8 * This could probably be made into a module, because it is not often in use. --- 1568 unchanged lines hidden (view full) --- 1577 struct ext4_new_flex_group_data *flex_gd = NULL; 1578 struct ext4_sb_info *sbi = EXT4_SB(sb); 1579 struct ext4_super_block *es = sbi->s_es; 1580 struct buffer_head *bh; 1581 struct inode *resize_inode; 1582 ext4_fsblk_t o_blocks_count; 1583 ext4_group_t o_group; 1584 ext4_group_t n_group; |
1585 ext4_grpblk_t offset; | 1585 ext4_grpblk_t offset, add; |
1586 unsigned long n_desc_blocks; 1587 unsigned long o_desc_blocks; 1588 unsigned long desc_blocks; 1589 int err = 0, flexbg_size = 1; 1590 1591 o_blocks_count = ext4_blocks_count(es); 1592 1593 if (test_opt(sb, DEBUG)) --- 6 unchanged lines hidden (view full) --- 1600 return -EINVAL; 1601 } 1602 1603 if (n_blocks_count == o_blocks_count) 1604 /* Nothing need to do */ 1605 return 0; 1606 1607 ext4_get_group_no_and_offset(sb, n_blocks_count - 1, &n_group, &offset); | 1586 unsigned long n_desc_blocks; 1587 unsigned long o_desc_blocks; 1588 unsigned long desc_blocks; 1589 int err = 0, flexbg_size = 1; 1590 1591 o_blocks_count = ext4_blocks_count(es); 1592 1593 if (test_opt(sb, DEBUG)) --- 6 unchanged lines hidden (view full) --- 1600 return -EINVAL; 1601 } 1602 1603 if (n_blocks_count == o_blocks_count) 1604 /* Nothing need to do */ 1605 return 0; 1606 1607 ext4_get_group_no_and_offset(sb, n_blocks_count - 1, &n_group, &offset); |
1608 ext4_get_group_no_and_offset(sb, o_blocks_count, &o_group, &offset); | 1608 ext4_get_group_no_and_offset(sb, o_blocks_count - 1, &o_group, &offset); |
1609 1610 n_desc_blocks = (n_group + EXT4_DESC_PER_BLOCK(sb)) / 1611 EXT4_DESC_PER_BLOCK(sb); 1612 o_desc_blocks = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) / 1613 EXT4_DESC_PER_BLOCK(sb); 1614 desc_blocks = n_desc_blocks - o_desc_blocks; 1615 1616 if (desc_blocks && --- 12 unchanged lines hidden (view full) --- 1629 /* See if the device is actually as big as what was requested */ 1630 bh = sb_bread(sb, n_blocks_count - 1); 1631 if (!bh) { 1632 ext4_warning(sb, "can't read last block, resize aborted"); 1633 return -ENOSPC; 1634 } 1635 brelse(bh); 1636 | 1609 1610 n_desc_blocks = (n_group + EXT4_DESC_PER_BLOCK(sb)) / 1611 EXT4_DESC_PER_BLOCK(sb); 1612 o_desc_blocks = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) / 1613 EXT4_DESC_PER_BLOCK(sb); 1614 desc_blocks = n_desc_blocks - o_desc_blocks; 1615 1616 if (desc_blocks && --- 12 unchanged lines hidden (view full) --- 1629 /* See if the device is actually as big as what was requested */ 1630 bh = sb_bread(sb, n_blocks_count - 1); 1631 if (!bh) { 1632 ext4_warning(sb, "can't read last block, resize aborted"); 1633 return -ENOSPC; 1634 } 1635 brelse(bh); 1636 |
1637 if (offset != 0) { 1638 /* extend the last group */ 1639 ext4_grpblk_t add; 1640 add = EXT4_BLOCKS_PER_GROUP(sb) - offset; | 1637 /* extend the last group */ 1638 if (n_group == o_group) 1639 add = n_blocks_count - o_blocks_count; 1640 else 1641 add = EXT4_BLOCKS_PER_GROUP(sb) - (offset + 1); 1642 if (add > 0) { |
1641 err = ext4_group_extend_no_check(sb, o_blocks_count, add); 1642 if (err) 1643 goto out; 1644 } 1645 1646 if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FLEX_BG) && 1647 es->s_log_groups_per_flex) 1648 flexbg_size = 1 << es->s_log_groups_per_flex; --- 32 unchanged lines hidden --- | 1643 err = ext4_group_extend_no_check(sb, o_blocks_count, add); 1644 if (err) 1645 goto out; 1646 } 1647 1648 if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FLEX_BG) && 1649 es->s_log_groups_per_flex) 1650 flexbg_size = 1 << es->s_log_groups_per_flex; --- 32 unchanged lines hidden --- |