Re: [PATCH 14/24] pnfs_submit: use fsdata to pass lseg

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/08/2010 07:19 AM, Fred Isaman wrote:
> Preparing for LAYUTGET invocation in nfs_write_begin to be the
> only invocation in the write path.
> 
> It isn't used at all yet, but it should be properly referenced/dereferenced
> 
> Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx>
> ---
>  fs/nfs/file.c |   16 +++++++++++++---
>  1 files changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/nfs/file.c b/fs/nfs/file.c
> index 03601d2..fde6cb5 100644
> --- a/fs/nfs/file.c
> +++ b/fs/nfs/file.c
> @@ -420,6 +420,8 @@ static int nfs_write_begin(struct file *file, struct address_space *mapping,
>  		file->f_path.dentry->d_name.name,
>  		mapping->host->i_ino, len, (long long) pos);
>  
> +	pnfs_update_layout(mapping->host, NULL, NFS4_MAX_UINT64, 0, IOMODE_RW,
> +			   (struct pnfs_layout_segment **) fsdata);

All files write layout?

Please lets separate this in two parts.
A) Something we can all test and should be clean and better then today.
B) B to A revert patch.

I'd say ask for the pages index. Server can set policy, just fine.

What if I write to an hole at 4Gb you still want offset zero?

(BTW the order of params to pnfs_update_layout is all wrong)

Boaz

>  start:
>  	/*
>  	 * Prevent starvation issues if someone is doing a consistency
> @@ -428,11 +430,13 @@ start:
>  	ret = wait_on_bit(&NFS_I(mapping->host)->flags, NFS_INO_FLUSHING,
>  			nfs_wait_bit_killable, TASK_KILLABLE);
>  	if (ret)
> -		return ret;
> +		goto out;
>  
>  	page = grab_cache_page_write_begin(mapping, index, flags);
> -	if (!page)
> -		return -ENOMEM;
> +	if (!page) {
> +		ret = -ENOMEM;
> +		goto out;
> +	}
>  	*pagep = page;
>  
>  	ret = nfs_flush_incompatible(file, page);
> @@ -447,6 +451,11 @@ start:
>  		if (!ret)
>  			goto start;
>  	}
> + out:
> +	if (ret) {
> +		put_lseg(*fsdata);
> +		*fsdata = NULL;
> +	}
>  	return ret;
>  }
>  
> @@ -486,6 +495,7 @@ static int nfs_write_end(struct file *file, struct address_space *mapping,
>  
>  	unlock_page(page);
>  	page_cache_release(page);
> +	put_lseg(fsdata);
>  
>  	if (status < 0)
>  		return status;

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


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux