On Tue, 2009-10-20 at 11:44 -0600, Terry Loftin wrote: > Actually pass the NFS_FILE_SYNC option to the server to avoid a > Panic in nfs_direct_write_complete() when a commit fails. > > At the end of an nfs write, if the nfs commit fails, all the writes > will be rescheduled. They are supposed to be rescheduled as NFS_FILE_SYNC > writes, but the rpc_task structure is not completely intialized and so > the option is not passed. When the rescheduled writes complete, the > return indicates that they are NFS_UNSTABLE and we try to do another > commit. This leads to a Panic because the commit data structure pointer > was set to null in the initial (failed) commit attempt. > > Signed-off-by: Terry Loftin <terry.loftin@xxxxxx> > --- > > diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c > index e4e089a..1af78ff 100644 > --- a/fs/nfs/direct.c > +++ b/fs/nfs/direct.c > @@ -457,6 +457,7 @@ static void nfs_direct_write_reschedule(struct nfs_direct_req *dreq) > }; > struct rpc_task_setup task_setup_data = { > .rpc_client = NFS_CLIENT(inode), > + .rpc_message = &msg, > .callback_ops = &nfs_write_direct_ops, > .workqueue = nfsiod_workqueue, > .flags = RPC_TASK_ASYNC, Doh! Well spotted. I'll pass this along into mainline+stable. Cheers Trond -- 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