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); 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; -- 1.6.6.1 -- 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