write.c (bdc7f021f3a1fade77adf3c2d7f65690566fddfe) write.c (0773769191d943358a8392fa86abd756d004c4b6)
1/*
2 * linux/fs/nfs/write.c
3 *
4 * Write file data over NFS.
5 *
6 * Copyright (C) 1996, 1997, Olaf Kirch <okir@monad.swb.de>
7 */
8

--- 750 unchanged lines hidden (view full) ---

759 case FLUSH_HIGHPRI:
760 return RPC_PRIORITY_HIGH;
761 case FLUSH_LOWPRI:
762 return RPC_PRIORITY_LOW;
763 }
764 return RPC_PRIORITY_NORMAL;
765}
766
1/*
2 * linux/fs/nfs/write.c
3 *
4 * Write file data over NFS.
5 *
6 * Copyright (C) 1996, 1997, Olaf Kirch <okir@monad.swb.de>
7 */
8

--- 750 unchanged lines hidden (view full) ---

759 case FLUSH_HIGHPRI:
760 return RPC_PRIORITY_HIGH;
761 case FLUSH_LOWPRI:
762 return RPC_PRIORITY_LOW;
763 }
764 return RPC_PRIORITY_NORMAL;
765}
766
767static void nfs_execute_write(struct nfs_write_data *data)
768{
769 struct rpc_clnt *clnt = NFS_CLIENT(data->inode);
770 sigset_t oldset;
771
772 rpc_clnt_sigmask(clnt, &oldset);
773 rpc_execute(&data->task);
774 rpc_clnt_sigunmask(clnt, &oldset);
775}
776
777/*
778 * Set up the argument/result storage required for the RPC call.
779 */
780static void nfs_write_rpcsetup(struct nfs_page *req,
781 struct nfs_write_data *data,
782 const struct rpc_call_ops *call_ops,
783 unsigned int count, unsigned int offset,
784 int how)
785{
786 struct inode *inode = req->wb_context->path.dentry->d_inode;
787 int flags = (how & FLUSH_SYNC) ? 0 : RPC_TASK_ASYNC;
788 int priority = flush_task_priority(how);
767/*
768 * Set up the argument/result storage required for the RPC call.
769 */
770static void nfs_write_rpcsetup(struct nfs_page *req,
771 struct nfs_write_data *data,
772 const struct rpc_call_ops *call_ops,
773 unsigned int count, unsigned int offset,
774 int how)
775{
776 struct inode *inode = req->wb_context->path.dentry->d_inode;
777 int flags = (how & FLUSH_SYNC) ? 0 : RPC_TASK_ASYNC;
778 int priority = flush_task_priority(how);
779 struct rpc_task *task;
789 struct rpc_message msg = {
790 .rpc_argp = &data->args,
791 .rpc_resp = &data->res,
792 .rpc_cred = req->wb_context->cred,
793 };
794 struct rpc_task_setup task_setup_data = {
795 .rpc_client = NFS_CLIENT(inode),
780 struct rpc_message msg = {
781 .rpc_argp = &data->args,
782 .rpc_resp = &data->res,
783 .rpc_cred = req->wb_context->cred,
784 };
785 struct rpc_task_setup task_setup_data = {
786 .rpc_client = NFS_CLIENT(inode),
787 .task = &data->task,
796 .rpc_message = &msg,
797 .callback_ops = call_ops,
798 .callback_data = data,
799 .flags = flags,
800 .priority = priority,
801 };
802
803 /* Set up the RPC argument and reply structs

--- 18 unchanged lines hidden (view full) ---

822
823 data->res.fattr = &data->fattr;
824 data->res.count = count;
825 data->res.verf = &data->verf;
826 nfs_fattr_init(&data->fattr);
827
828 /* Set up the initial task struct. */
829 NFS_PROTO(inode)->write_setup(data, &msg);
788 .rpc_message = &msg,
789 .callback_ops = call_ops,
790 .callback_data = data,
791 .flags = flags,
792 .priority = priority,
793 };
794
795 /* Set up the RPC argument and reply structs

--- 18 unchanged lines hidden (view full) ---

814
815 data->res.fattr = &data->fattr;
816 data->res.count = count;
817 data->res.verf = &data->verf;
818 nfs_fattr_init(&data->fattr);
819
820 /* Set up the initial task struct. */
821 NFS_PROTO(inode)->write_setup(data, &msg);
830 rpc_init_task(&data->task, &task_setup_data);
831
832 dprintk("NFS: %5u initiated write call "
833 "(req %s/%Ld, %u bytes @ offset %Lu)\n",
834 data->task.tk_pid,
835 inode->i_sb->s_id,
836 (long long)NFS_FILEID(inode),
837 count,
838 (unsigned long long)data->args.offset);
839
822
823 dprintk("NFS: %5u initiated write call "
824 "(req %s/%Ld, %u bytes @ offset %Lu)\n",
825 data->task.tk_pid,
826 inode->i_sb->s_id,
827 (long long)NFS_FILEID(inode),
828 count,
829 (unsigned long long)data->args.offset);
830
840 nfs_execute_write(data);
831 task = rpc_run_task(&task_setup_data);
832 if (!IS_ERR(task))
833 rpc_put_task(task);
841}
842
843/*
844 * Generate multiple small requests to write out a single
845 * contiguous dirty area on one page.
846 */
847static int nfs_flush_multi(struct inode *inode, struct list_head *head, unsigned int npages, size_t count, int how)
848{

--- 310 unchanged lines hidden (view full) ---

1159static void nfs_commit_rpcsetup(struct list_head *head,
1160 struct nfs_write_data *data,
1161 int how)
1162{
1163 struct nfs_page *first = nfs_list_entry(head->next);
1164 struct inode *inode = first->wb_context->path.dentry->d_inode;
1165 int flags = (how & FLUSH_SYNC) ? 0 : RPC_TASK_ASYNC;
1166 int priority = flush_task_priority(how);
834}
835
836/*
837 * Generate multiple small requests to write out a single
838 * contiguous dirty area on one page.
839 */
840static int nfs_flush_multi(struct inode *inode, struct list_head *head, unsigned int npages, size_t count, int how)
841{

--- 310 unchanged lines hidden (view full) ---

1152static void nfs_commit_rpcsetup(struct list_head *head,
1153 struct nfs_write_data *data,
1154 int how)
1155{
1156 struct nfs_page *first = nfs_list_entry(head->next);
1157 struct inode *inode = first->wb_context->path.dentry->d_inode;
1158 int flags = (how & FLUSH_SYNC) ? 0 : RPC_TASK_ASYNC;
1159 int priority = flush_task_priority(how);
1160 struct rpc_task *task;
1167 struct rpc_message msg = {
1168 .rpc_argp = &data->args,
1169 .rpc_resp = &data->res,
1170 .rpc_cred = first->wb_context->cred,
1171 };
1172 struct rpc_task_setup task_setup_data = {
1161 struct rpc_message msg = {
1162 .rpc_argp = &data->args,
1163 .rpc_resp = &data->res,
1164 .rpc_cred = first->wb_context->cred,
1165 };
1166 struct rpc_task_setup task_setup_data = {
1167 .task = &data->task,
1173 .rpc_client = NFS_CLIENT(inode),
1174 .rpc_message = &msg,
1175 .callback_ops = &nfs_commit_ops,
1176 .callback_data = data,
1177 .flags = flags,
1178 .priority = priority,
1179 };
1180

--- 11 unchanged lines hidden (view full) ---

1192 data->args.count = 0;
1193 data->res.count = 0;
1194 data->res.fattr = &data->fattr;
1195 data->res.verf = &data->verf;
1196 nfs_fattr_init(&data->fattr);
1197
1198 /* Set up the initial task struct. */
1199 NFS_PROTO(inode)->commit_setup(data, &msg);
1168 .rpc_client = NFS_CLIENT(inode),
1169 .rpc_message = &msg,
1170 .callback_ops = &nfs_commit_ops,
1171 .callback_data = data,
1172 .flags = flags,
1173 .priority = priority,
1174 };
1175

--- 11 unchanged lines hidden (view full) ---

1187 data->args.count = 0;
1188 data->res.count = 0;
1189 data->res.fattr = &data->fattr;
1190 data->res.verf = &data->verf;
1191 nfs_fattr_init(&data->fattr);
1192
1193 /* Set up the initial task struct. */
1194 NFS_PROTO(inode)->commit_setup(data, &msg);
1200 rpc_init_task(&data->task, &task_setup_data);
1201
1202 dprintk("NFS: %5u initiated commit call\n", data->task.tk_pid);
1203
1195
1196 dprintk("NFS: %5u initiated commit call\n", data->task.tk_pid);
1197
1204 nfs_execute_write(data);
1198 task = rpc_run_task(&task_setup_data);
1199 if (!IS_ERR(task))
1200 rpc_put_task(task);
1205}
1206
1207/*
1208 * Commit dirty pages
1209 */
1210static int
1211nfs_commit_list(struct inode *inode, struct list_head *head, int how)
1212{

--- 336 unchanged lines hidden ---
1201}
1202
1203/*
1204 * Commit dirty pages
1205 */
1206static int
1207nfs_commit_list(struct inode *inode, struct list_head *head, int how)
1208{

--- 336 unchanged lines hidden ---