diff mbox

[34/34] NFS41: do not update isize if inode needs layoutcommit

Message ID e2fb9618168391b74186ebc670b7741bacc1f835.1307921138.git.rees@umich.edu (mailing list archive)
State New, archived
Headers show

Commit Message

Jim Rees June 12, 2011, 11:45 p.m. UTC
From: Peng Tao <bergwolf@gmail.com>

Layout commit is supposed to set server file size similiar to nfs pages.
We should not update client file size for the same reason.
Otherwise we will lose what we have at hand.

Signed-off-by: Peng Tao <peng_tao@emc.com>
---
 fs/nfs/inode.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

Comments

Benny Halevy June 14, 2011, 4:15 p.m. UTC | #1
reminder: this is a generic patch that should be pushed upstream
separately.

Benny

On 2011-06-12 19:45, Jim Rees wrote:
> From: Peng Tao <bergwolf@gmail.com>
> 
> Layout commit is supposed to set server file size similiar to nfs pages.
> We should not update client file size for the same reason.
> Otherwise we will lose what we have at hand.
> 
> Signed-off-by: Peng Tao <peng_tao@emc.com>
> ---
>  fs/nfs/inode.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
> 
> diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
> index 144f2a3..3f1eb81 100644
> --- a/fs/nfs/inode.c
> +++ b/fs/nfs/inode.c
> @@ -1294,7 +1294,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
>  		if (new_isize != cur_isize) {
>  			/* Do we perhaps have any outstanding writes, or has
>  			 * the file grown beyond our last write? */
> -			if (nfsi->npages == 0 || new_isize > cur_isize) {
> +			if ((nfsi->npages == 0 && !test_bit(NFS_INO_LAYOUTCOMMIT, &nfsi->flags)) ||
> +			     new_isize > cur_isize) {
>  				i_size_write(inode, new_isize);
>  				invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
>  			}
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Fred Isaman June 14, 2011, 4:22 p.m. UTC | #2
On Tue, Jun 14, 2011 at 12:15 PM, Benny Halevy <bhalevy.lists@gmail.com> wrote:
> reminder: this is a generic patch that should be pushed upstream
> separately.
>
> Benny
>

And which in fact is currently in Trond's  bugfixes branch

Fred

> On 2011-06-12 19:45, Jim Rees wrote:
>> From: Peng Tao <bergwolf@gmail.com>
>>
>> Layout commit is supposed to set server file size similiar to nfs pages.
>> We should not update client file size for the same reason.
>> Otherwise we will lose what we have at hand.
>>
>> Signed-off-by: Peng Tao <peng_tao@emc.com>
>> ---
>>  fs/nfs/inode.c |    3 ++-
>>  1 files changed, 2 insertions(+), 1 deletions(-)
>>
>> diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
>> index 144f2a3..3f1eb81 100644
>> --- a/fs/nfs/inode.c
>> +++ b/fs/nfs/inode.c
>> @@ -1294,7 +1294,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
>>               if (new_isize != cur_isize) {
>>                       /* Do we perhaps have any outstanding writes, or has
>>                        * the file grown beyond our last write? */
>> -                     if (nfsi->npages == 0 || new_isize > cur_isize) {
>> +                     if ((nfsi->npages == 0 && !test_bit(NFS_INO_LAYOUTCOMMIT, &nfsi->flags)) ||
>> +                          new_isize > cur_isize) {
>>                               i_size_write(inode, new_isize);
>>                               invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
>>                       }
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" 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-nfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 144f2a3..3f1eb81 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -1294,7 +1294,8 @@  static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
 		if (new_isize != cur_isize) {
 			/* Do we perhaps have any outstanding writes, or has
 			 * the file grown beyond our last write? */
-			if (nfsi->npages == 0 || new_isize > cur_isize) {
+			if ((nfsi->npages == 0 && !test_bit(NFS_INO_LAYOUTCOMMIT, &nfsi->flags)) ||
+			     new_isize > cur_isize) {
 				i_size_write(inode, new_isize);
 				invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
 			}