[01/11] ocfs2: fix ocfs2_sync_file() if filesystem is readonly
diff mbox

Message ID 20140124143204.03ee21c5d6e9eabda00f9628@linux-foundation.org
State New, archived
Headers show

Commit Message

Andrew Morton Jan. 24, 2014, 10:32 p.m. UTC
On Fri, 24 Jan 2014 14:21:19 -0800 Mark Fasheh <mfasheh@suse.de> wrote:

> On Fri, Jan 24, 2014 at 04:02:09PM -0600, Goldwyn Rodrigues wrote:
> > 
> > 
> > On 01/24/2014 02:46 PM, akpm@linux-foundation.org wrote:
> > > From: Younger Liu <younger.liucn@gmail.com>
> > > Subject: ocfs2: fix ocfs2_sync_file() if filesystem is readonly
> > >
> > > If filesystem is readonly, there is no need to flush drive's caches or
> > > force any uncommitted transactions.
> > 
> > An ocfs2 filesystem can be set to read-only because of an error, in 
> > which case, you should return -EROFS.
> > 
> > Nak.
> 
> Goldwyn's right actually - disregard my sign off for the last one.
> 
> Basically the patch does this:
> 
>     if  (we're in some readonly state)
> 	return 0;
> 
> What we want, at the top of ocfs2_sync_file() is a return of -EROFS. This
> will satisfy Goldwyn's requirement that we bubble -EROFS up the stack but at
> the same time avoiding the extra work of trying to sync on a RO fs.
> 
> So the new version of the patch would be:
> 
>     if  (we're in some readonly state)
> 	return -EROFS;
> 

So it's this?

Comments

Younger Liu Jan. 26, 2014, 12:51 a.m. UTC | #1
On 2014/1/25 6:32, Andrew Morton wrote:
> On Fri, 24 Jan 2014 14:21:19 -0800 Mark Fasheh <mfasheh@suse.de> wrote:
> 
>> On Fri, Jan 24, 2014 at 04:02:09PM -0600, Goldwyn Rodrigues wrote:
>>>
>>>
>>> On 01/24/2014 02:46 PM, akpm@linux-foundation.org wrote:
>>>> From: Younger Liu <younger.liucn@gmail.com>
>>>> Subject: ocfs2: fix ocfs2_sync_file() if filesystem is readonly
>>>>
>>>> If filesystem is readonly, there is no need to flush drive's caches or
>>>> force any uncommitted transactions.
>>>
>>> An ocfs2 filesystem can be set to read-only because of an error, in 
>>> which case, you should return -EROFS.
>>>
>>> Nak.
>>
>> Goldwyn's right actually - disregard my sign off for the last one.
>>
>> Basically the patch does this:
>>
>>     if  (we're in some readonly state)
>> 	return 0;
>>
>> What we want, at the top of ocfs2_sync_file() is a return of -EROFS. This
>> will satisfy Goldwyn's requirement that we bubble -EROFS up the stack but at
>> the same time avoiding the extra work of trying to sync on a RO fs.
>>
>> So the new version of the patch would be:
>>
>>     if  (we're in some readonly state)
>> 	return -EROFS;
>>
> 
> So it's this?
> 
> --- a/fs/ocfs2/file.c~ocfs2-fix-ocfs2_sync_file-if-filesystem-is-readonly
> +++ a/fs/ocfs2/file.c
> @@ -185,6 +185,9 @@ static int ocfs2_sync_file(struct file *
>  			      file->f_path.dentry->d_name.name,
>  			      (unsigned long long)datasync);
>  
> +	if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb))
> +		return -EROFS;
> +
fine, -EROFS shows the status of filesystem.

    --Younger
>  	err = filemap_write_and_wait_range(inode->i_mapping, start, end);
>  	if (err)
>  		return err;
> _
> 
>
Goldwyn Rodrigues Jan. 26, 2014, 1:18 a.m. UTC | #2
On 01/24/2014 04:32 PM, Andrew Morton wrote:
> On Fri, 24 Jan 2014 14:21:19 -0800 Mark Fasheh <mfasheh@suse.de> wrote:
>
>> On Fri, Jan 24, 2014 at 04:02:09PM -0600, Goldwyn Rodrigues wrote:
>>>
>>>
>>> On 01/24/2014 02:46 PM, akpm@linux-foundation.org wrote:
>>>> From: Younger Liu <younger.liucn@gmail.com>
>>>> Subject: ocfs2: fix ocfs2_sync_file() if filesystem is readonly
>>>>
>>>> If filesystem is readonly, there is no need to flush drive's caches or
>>>> force any uncommitted transactions.
>>>
>>> An ocfs2 filesystem can be set to read-only because of an error, in
>>> which case, you should return -EROFS.
>>>
>>> Nak.
>>
>> Goldwyn's right actually - disregard my sign off for the last one.
>>
>> Basically the patch does this:
>>
>>      if  (we're in some readonly state)
>> 	return 0;
>>
>> What we want, at the top of ocfs2_sync_file() is a return of -EROFS. This
>> will satisfy Goldwyn's requirement that we bubble -EROFS up the stack but at
>> the same time avoiding the extra work of trying to sync on a RO fs.
>>
>> So the new version of the patch would be:
>>
>>      if  (we're in some readonly state)
>> 	return -EROFS;
>>
>
> So it's this?
>

Yes.

Acked-by: Goldwyn Rodrigues <rgoldwyn@suse.de>


> --- a/fs/ocfs2/file.c~ocfs2-fix-ocfs2_sync_file-if-filesystem-is-readonly
> +++ a/fs/ocfs2/file.c
> @@ -185,6 +185,9 @@ static int ocfs2_sync_file(struct file *
>   			      file->f_path.dentry->d_name.name,
>   			      (unsigned long long)datasync);
>
> +	if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb))
> +		return -EROFS;
> +
>   	err = filemap_write_and_wait_range(inode->i_mapping, start, end);
>   	if (err)
>   		return err;
> _
>
Mark Fasheh Jan. 27, 2014, 5:22 p.m. UTC | #3
On Fri, Jan 24, 2014 at 02:32:04PM -0800, Andrew Morton wrote:
> On Fri, 24 Jan 2014 14:21:19 -0800 Mark Fasheh <mfasheh@suse.de> wrote:
> 
> > On Fri, Jan 24, 2014 at 04:02:09PM -0600, Goldwyn Rodrigues wrote:
> > > 
> > > 
> > > On 01/24/2014 02:46 PM, akpm@linux-foundation.org wrote:
> > > > From: Younger Liu <younger.liucn@gmail.com>
> > > > Subject: ocfs2: fix ocfs2_sync_file() if filesystem is readonly
> > > >
> > > > If filesystem is readonly, there is no need to flush drive's caches or
> > > > force any uncommitted transactions.
> > > 
> > > An ocfs2 filesystem can be set to read-only because of an error, in 
> > > which case, you should return -EROFS.
> > > 
> > > Nak.
> > 
> > Goldwyn's right actually - disregard my sign off for the last one.
> > 
> > Basically the patch does this:
> > 
> >     if  (we're in some readonly state)
> > 	return 0;
> > 
> > What we want, at the top of ocfs2_sync_file() is a return of -EROFS. This
> > will satisfy Goldwyn's requirement that we bubble -EROFS up the stack but at
> > the same time avoiding the extra work of trying to sync on a RO fs.
> > 
> > So the new version of the patch would be:
> > 
> >     if  (we're in some readonly state)
> > 	return -EROFS;
> > 
> 
> So it's this?

Yes, that's exactly what I was thinking the patch should look like. If you
want to change it and include my signoff that's fine with me. Thanks,
	--Mark


> --- a/fs/ocfs2/file.c~ocfs2-fix-ocfs2_sync_file-if-filesystem-is-readonly
> +++ a/fs/ocfs2/file.c
> @@ -185,6 +185,9 @@ static int ocfs2_sync_file(struct file *
>  			      file->f_path.dentry->d_name.name,
>  			      (unsigned long long)datasync);
>  
> +	if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb))
> +		return -EROFS;
> +
>  	err = filemap_write_and_wait_range(inode->i_mapping, start, end);
>  	if (err)
>  		return err;
> _
> 
> 
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel@oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/ocfs2-devel
--
Mark Fasheh

Patch
diff mbox

--- a/fs/ocfs2/file.c~ocfs2-fix-ocfs2_sync_file-if-filesystem-is-readonly
+++ a/fs/ocfs2/file.c
@@ -185,6 +185,9 @@  static int ocfs2_sync_file(struct file *
 			      file->f_path.dentry->d_name.name,
 			      (unsigned long long)datasync);
 
+	if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb))
+		return -EROFS;
+
 	err = filemap_write_and_wait_range(inode->i_mapping, start, end);
 	if (err)
 		return err;