|
@@ -1178,6 +1178,15 @@ void pnfs_ld_write_done(struct nfs_write_data *data)
|
|
put_lseg(data->lseg);
|
|
put_lseg(data->lseg);
|
|
data->lseg = NULL;
|
|
data->lseg = NULL;
|
|
dprintk("pnfs write error = %d\n", data->pnfs_error);
|
|
dprintk("pnfs write error = %d\n", data->pnfs_error);
|
|
|
|
+ if (NFS_SERVER(data->inode)->pnfs_curr_ld->flags &
|
|
|
|
+ PNFS_LAYOUTRET_ON_ERROR) {
|
|
|
|
+ /* Don't lo_commit on error, Server will needs to
|
|
|
|
+ * preform a file recovery.
|
|
|
|
+ */
|
|
|
|
+ clear_bit(NFS_INO_LAYOUTCOMMIT,
|
|
|
|
+ &NFS_I(data->inode)->flags);
|
|
|
|
+ pnfs_return_layout(data->inode);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
data->mds_ops->rpc_release(data);
|
|
data->mds_ops->rpc_release(data);
|
|
}
|
|
}
|
|
@@ -1267,6 +1276,9 @@ static void pnfs_ld_handle_read_error(struct nfs_read_data *data)
|
|
put_lseg(data->lseg);
|
|
put_lseg(data->lseg);
|
|
data->lseg = NULL;
|
|
data->lseg = NULL;
|
|
dprintk("pnfs write error = %d\n", data->pnfs_error);
|
|
dprintk("pnfs write error = %d\n", data->pnfs_error);
|
|
|
|
+ if (NFS_SERVER(data->inode)->pnfs_curr_ld->flags &
|
|
|
|
+ PNFS_LAYOUTRET_ON_ERROR)
|
|
|
|
+ pnfs_return_layout(data->inode);
|
|
|
|
|
|
nfs_pageio_init_read_mds(&pgio, data->inode);
|
|
nfs_pageio_init_read_mds(&pgio, data->inode);
|
|
|
|
|