Patchwork ext4: Ensure writecache to disk in no journal mode

login
register
mail settings
Submitter Surbhi Palande
Date March 26, 2010, 4:21 p.m.
Message ID <1269620462-25906-1-git-send-email-surbhi.palande@canonical.com>
Download mbox | patch
Permalink /patch/48657/
State New
Headers show

Comments

Surbhi Palande - March 26, 2010, 4:21 p.m.
Ensure that in the no journal mode the write cache is flushed to the disk by
calling a blkdev_issue_flush() which issues a WRITE_BARRIER if necessary.

Signed-off-by: Surbhi Palande <surbhi.palande@canonical.com>
---
 fs/ext4/fsync.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)
Dmitri Monakho - March 26, 2010, 4:37 p.m.
Surbhi Palande <surbhi.palande@canonical.com> writes:

> Ensure that in the no journal mode the write cache is flushed to the disk by
> calling a blkdev_issue_flush() which issues a WRITE_BARRIER if necessary.
As soon as i understand, nojournal mode is assumed to be used for
fail-free block devices(raid + UPS). So we don't have to worry about
blkdev's wcache vs persistent storage correctness.
>
> Signed-off-by: Surbhi Palande <surbhi.palande@canonical.com>
> ---
>  fs/ext4/fsync.c |    8 ++++++--
>  1 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
> index d6049e4..1d73a50 100644
> --- a/fs/ext4/fsync.c
> +++ b/fs/ext4/fsync.c
> @@ -67,8 +67,12 @@ int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync)
>  	if (ret < 0)
>  		return ret;
>  
> -	if (!journal)
> -		return simple_fsync(file, dentry, datasync);
> +	if (!journal) {
> +		ret = simple_fsync(file, dentry, datasync);
> +		if (test_opt(inode->i_sb, BARRIER))
> +			blkdev_issue_flush(inode->i_sb->s_bdev, NULL);
> +		return ret;
> +	}
>  
>  	/*
>  	 * data=writeback,ordered:
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ric Wheeler - March 26, 2010, 5:16 p.m.
On 03/26/2010 12:37 PM, Dmitry Monakhov wrote:
> Surbhi Palande<surbhi.palande@canonical.com>  writes:
>
>    
>> Ensure that in the no journal mode the write cache is flushed to the disk by
>> calling a blkdev_issue_flush() which issues a WRITE_BARRIER if necessary.
>>      
> As soon as i understand, nojournal mode is assumed to be used for
> fail-free block devices(raid + UPS). So we don't have to worry about
> blkdev's wcache vs persistent storage correctness.
>    

I don't think that is a safe assumption. If users want that behavior, 
they can mount with fs without barriers...

ric

>> Signed-off-by: Surbhi Palande<surbhi.palande@canonical.com>
>> ---
>>   fs/ext4/fsync.c |    8 ++++++--
>>   1 files changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
>> index d6049e4..1d73a50 100644
>> --- a/fs/ext4/fsync.c
>> +++ b/fs/ext4/fsync.c
>> @@ -67,8 +67,12 @@ int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync)
>>   	if (ret<  0)
>>   		return ret;
>>
>> -	if (!journal)
>> -		return simple_fsync(file, dentry, datasync);
>> +	if (!journal) {
>> +		ret = simple_fsync(file, dentry, datasync);
>> +		if (test_opt(inode->i_sb, BARRIER))
>> +			blkdev_issue_flush(inode->i_sb->s_bdev, NULL);
>> +		return ret;
>> +	}
>>
>>   	/*
>>   	 * data=writeback,ordered:
>>      
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>    

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Eric Sandeen - March 26, 2010, 5:40 p.m.
On 03/26/2010 12:16 PM, Ric Wheeler wrote:
> On 03/26/2010 12:37 PM, Dmitry Monakhov wrote:
>> Surbhi Palande<surbhi.palande@canonical.com>  writes:
>>
>>    
>>> Ensure that in the no journal mode the write cache is flushed to the disk by
>>> calling a blkdev_issue_flush() which issues a WRITE_BARRIER if necessary.
>>>      
>> As soon as i understand, nojournal mode is assumed to be used for
>> fail-free block devices(raid + UPS). So we don't have to worry about
>> blkdev's wcache vs persistent storage correctness.

No, I don't think so - even with "fail-free" storage, a system crash
still results in an inconsistent filesystem; with nojournalling you've
made the decision to either fsck or re-mkfs after that event.

> I don't think that is a safe assumption. If users want that behavior, 
> they can mount with fs without barriers...

yes, I agree with Ric - even if you don't have journalling, the proper
sequence of sync calls should still result in data permanently on disk
by default.  (though I think using mount -o nobarrier for this purpose,
in absence of journalling, overloads the option a little...)

-Eric
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
index d6049e4..1d73a50 100644
--- a/fs/ext4/fsync.c
+++ b/fs/ext4/fsync.c
@@ -67,8 +67,12 @@  int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync)
 	if (ret < 0)
 		return ret;
 
-	if (!journal)
-		return simple_fsync(file, dentry, datasync);
+	if (!journal) {
+		ret = simple_fsync(file, dentry, datasync);
+		if (test_opt(inode->i_sb, BARRIER))
+			blkdev_issue_flush(inode->i_sb->s_bdev, NULL);
+		return ret;
+	}
 
 	/*
 	 * data=writeback,ordered: