NFSv4.1: pnfs filelayout driver write
[linux-2.6-block.git] / fs / nfs / nfs4proc.c
index da902123ec53df31d7c72e7985823a4c3e68a837..7b4b9f3e98422d3d11f26519ec7663086eb8c89d 100644 (file)
@@ -3145,6 +3145,23 @@ static int nfs4_write_done(struct rpc_task *task, struct nfs_write_data *data)
        return data->write_done_cb(task, data);
 }
 
+/* Reset the the nfs_write_data to send the write to the MDS. */
+void nfs4_reset_write(struct rpc_task *task, struct nfs_write_data *data)
+{
+       dprintk("%s Reset task for i/o through\n", __func__);
+       put_lseg(data->lseg);
+       data->lseg          = NULL;
+       data->ds_clp        = NULL;
+       data->write_done_cb = nfs4_write_done_cb;
+       data->args.fh       = NFS_FH(data->inode);
+       data->args.bitmask  = data->res.server->cache_consistency_bitmask;
+       data->args.offset   = data->mds_offset;
+       data->res.fattr     = &data->fattr;
+       task->tk_ops        = data->mds_ops;
+       rpc_task_reset_client(task, NFS_CLIENT(data->inode));
+}
+EXPORT_SYMBOL_GPL(nfs4_reset_write);
+
 static void nfs4_proc_write_setup(struct nfs_write_data *data, struct rpc_message *msg)
 {
        struct nfs_server *server = NFS_SERVER(data->inode);