[Ocfs2-tools-devel] [PATCH 1/1] libocfs2: Truncate should handle fast symlinks

Sunil Mushran sunil.mushran at oracle.com
Mon Mar 22 18:49:25 PDT 2010


Joel Becker wrote:
> On Mon, Mar 22, 2010 at 05:19:38PM -0700, Sunil Mushran wrote:
>> Fast symlinks have no extents. This patch teaches ocfs2_truncate() to
>> skip such inodes.
>>
>> Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
>> ---
>>  libocfs2/truncate.c |    4 ++++
>>  1 files changed, 4 insertions(+), 0 deletions(-)
>>
>> diff --git a/libocfs2/truncate.c b/libocfs2/truncate.c
>> index d4f198c..be48ad3 100644
>> --- a/libocfs2/truncate.c
>> +++ b/libocfs2/truncate.c
>> @@ -304,6 +304,10 @@ errcode_t ocfs2_truncate_full(ocfs2_filesys *fs, uint64_t ino,
>>  	if (ci->ci_inode->i_size == new_i_size)
>>  		goto out;
>>  
>> +	/* Skip for fast symlinks */
>> +	if (S_ISLNK(ci->ci_inode->i_mode) && !ci->ci_inode->i_clusters)
>> +		goto out;
>> +
>>  	if (ci->ci_inode->i_size < new_i_size)
>>  		ret = ocfs2_extend_file(fs, ino, new_i_size);
>>  	else {
>
> 	What about setting i_size?  With this change, a fast symlink
> will be left unmodified (i_size stays the same as before) but a non-fast
> symlink has its storage removed and its i_size changed.
> 	Given that we use ocfs2_truncate_full() to delete the storage of
> all types of inodes, I think it should be setting i_size for fast
> symlinks to 0.

Good point.

The other thing I noticed was that ocfs2_delete_inode() in libocfs2
is not setting dtime. Do we care?




More information about the Ocfs2-tools-devel mailing list