aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ncpfs
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2015-04-09 12:55:47 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2015-04-11 22:30:21 -0400
commit3309dd04cbcd2cdad168485af5cf3576b5051e49 (patch)
tree3e01f865306dee01b31f34c9e7e819a5f42a4087 /fs/ncpfs
parent90320251db0fe3d05f2b10686ec936c7d6ecd99a (diff)
switch generic_write_checks() to iocb and iter
... returning -E... upon error and amount of data left in iter after (possible) truncation upon success. Note, that normal case gives a non-zero (positive) return value, so any tests for != 0 _must_ be updated. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Conflicts: fs/ext4/file.c
Diffstat (limited to 'fs/ncpfs')
-rw-r--r--fs/ncpfs/file.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/fs/ncpfs/file.c b/fs/ncpfs/file.c
index ab6363b16556..011324ce9df2 100644
--- a/fs/ncpfs/file.c
+++ b/fs/ncpfs/file.c
@@ -170,20 +170,15 @@ ncp_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
170 struct file *file = iocb->ki_filp; 170 struct file *file = iocb->ki_filp;
171 struct inode *inode = file_inode(file); 171 struct inode *inode = file_inode(file);
172 size_t already_written = 0; 172 size_t already_written = 0;
173 loff_t pos = iocb->ki_pos;
174 size_t count = iov_iter_count(from);
175 size_t bufsize; 173 size_t bufsize;
176 int errno; 174 int errno;
177 void *bouncebuffer; 175 void *bouncebuffer;
176 off_t pos;
178 177
179 ncp_dbg(1, "enter %pD2\n", file); 178 ncp_dbg(1, "enter %pD2\n", file);
180 errno = generic_write_checks(file, &pos, &count); 179 errno = generic_write_checks(iocb, from);
181 if (errno) 180 if (errno <= 0)
182 return errno; 181 return errno;
183 iov_iter_truncate(from, count);
184
185 if (!count)
186 return 0;
187 182
188 errno = ncp_make_open(inode, O_WRONLY); 183 errno = ncp_make_open(inode, O_WRONLY);
189 if (errno) { 184 if (errno) {
@@ -201,10 +196,11 @@ ncp_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
201 errno = -EIO; /* -ENOMEM */ 196 errno = -EIO; /* -ENOMEM */
202 goto outrel; 197 goto outrel;
203 } 198 }
199 pos = iocb->ki_pos;
204 while (iov_iter_count(from)) { 200 while (iov_iter_count(from)) {
205 int written_this_time; 201 int written_this_time;
206 size_t to_write = min_t(size_t, 202 size_t to_write = min_t(size_t,
207 bufsize - ((off_t)pos % bufsize), 203 bufsize - (pos % bufsize),
208 iov_iter_count(from)); 204 iov_iter_count(from));
209 205
210 if (copy_from_iter(bouncebuffer, to_write, from) != to_write) { 206 if (copy_from_iter(bouncebuffer, to_write, from) != to_write) {