]> err.no Git - linux-2.6/commitdiff
ext4: Don't set EXTENTS_FL flag for fast symlinks
authorValerie Clement <valerie.clement@bull.net>
Tue, 5 Feb 2008 15:56:37 +0000 (10:56 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 5 Feb 2008 15:56:37 +0000 (10:56 -0500)
For fast symbolic links, the file content is stored in the i_block[]
array, which is not compatible with the new file extents format.
e2fsck reports error on such files because EXTENTS_FL is set.
Don't set the EXTENTS_FL flag when creating fast symlinks.

In the case of file migration, skip fast symbolic links.

Signed-off-by: Valerie Clement <valerie.clement@bull.net>
Signed-off-by: Mingming Cao <cmm@us.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/migrate.c
fs/ext4/namei.c

index 3ebc2332f52ec072da353ef1466dfaaea3cd2baf..9ee1f7cfb2c541b9908fe8821a43e708efaea87d 100644 (file)
@@ -414,6 +414,12 @@ int ext4_ext_migrate(struct inode *inode, struct file *filp,
        if ((EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL))
                return -EINVAL;
 
+       if (S_ISLNK(inode->i_mode) && inode->i_blocks == 0)
+               /*
+                * don't migrate fast symlink
+                */
+               return retval;
+
        down_write(&EXT4_I(inode)->i_data_sem);
        handle = ext4_journal_start(inode,
                                        EXT4_DATA_TRANS_BLOCKS(inode->i_sb) +
index d153bb5922fc1dc79021e5ad84d5108d81702e74..a9347fb43bcca34dde35173aa1eb1dcccbc50d27 100644 (file)
@@ -2223,6 +2223,7 @@ retry:
                inode->i_op = &ext4_fast_symlink_inode_operations;
                memcpy((char*)&EXT4_I(inode)->i_data,symname,l);
                inode->i_size = l-1;
+               EXT4_I(inode)->i_flags &= ~EXT4_EXTENTS_FL;
        }
        EXT4_I(inode)->i_disksize = inode->i_size;
        err = ext4_add_nondir(handle, dentry, inode);