diff options
author | Kalpak Shah <kalpak@clusterfs.com> | 2007-07-18 09:19:57 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2007-07-18 09:19:57 -0400 |
commit | 6dd4ee7cab7e3a17c571aebd444f4344c8c4946e (patch) | |
tree | ee7b36d3a83ea843746ed3c906a9ad778838b9c6 /init/do_mounts.h | |
parent | ef7f38359ea8b3e9c7f2cae9a4d4935f55ca9e80 (diff) | |
download | op-kernel-dev-6dd4ee7cab7e3a17c571aebd444f4344c8c4946e.zip op-kernel-dev-6dd4ee7cab7e3a17c571aebd444f4344c8c4946e.tar.gz |
ext4: Expand extra_inodes space per the s_{want,min}_extra_isize fields
We need to make sure that existing ext3 filesystems can also avail the
new fields that have been added to the ext4 inode. We use
s_want_extra_isize and s_min_extra_isize to decide by how much we should
expand the inode. If EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE feature is set
then we expand the inode by max(s_want_extra_isize, s_min_extra_isize ,
sizeof(ext4_inode) - EXT4_GOOD_OLD_INODE_SIZE) bytes. Actually it is
still an open question about whether users should be able to set
s_*_extra_isize smaller than the known fields or not.
This patch also adds the functionality to expand inodes to include the
newly added fields. We start by trying to expand by s_want_extra_isize
bytes and if its fails we try to expand by s_min_extra_isize bytes. This
is done by changing the i_extra_isize if enough space is available in
the inode and no EAs are present. If EAs are present and there is enough
space in the inode then the EAs in the inode are shifted to make space.
If enough space is not available in the inode due to the EAs then 1 or
more EAs are shifted to the external EA block. In the worst case when
even the external EA block does not have enough space we inform the user
that some EA would need to be deleted or s_min_extra_isize would have to
be reduced.
Signed-off-by: Andreas Dilger <adilger@clusterfs.com>
Signed-off-by: Kalpak Shah <kalpak@clusterfs.com>
Signed-off-by: Mingming Cao <cmm@us.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'init/do_mounts.h')
0 files changed, 0 insertions, 0 deletions