diff options
Diffstat (limited to 'fs/ncpfs/file.c')
| -rw-r--r-- | fs/ncpfs/file.c | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/fs/ncpfs/file.c b/fs/ncpfs/file.c index 3639cc5cbdae..6c754f70c529 100644 --- a/fs/ncpfs/file.c +++ b/fs/ncpfs/file.c | |||
| @@ -113,9 +113,6 @@ ncp_file_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) | |||
| 113 | DPRINTK("ncp_file_read: enter %s/%s\n", | 113 | DPRINTK("ncp_file_read: enter %s/%s\n", |
| 114 | dentry->d_parent->d_name.name, dentry->d_name.name); | 114 | dentry->d_parent->d_name.name, dentry->d_name.name); |
| 115 | 115 | ||
| 116 | if (!ncp_conn_valid(NCP_SERVER(inode))) | ||
| 117 | return -EIO; | ||
| 118 | |||
| 119 | pos = *ppos; | 116 | pos = *ppos; |
| 120 | 117 | ||
| 121 | if ((ssize_t) count < 0) { | 118 | if ((ssize_t) count < 0) { |
| @@ -192,13 +189,11 @@ ncp_file_write(struct file *file, const char __user *buf, size_t count, loff_t * | |||
| 192 | 189 | ||
| 193 | DPRINTK("ncp_file_write: enter %s/%s\n", | 190 | DPRINTK("ncp_file_write: enter %s/%s\n", |
| 194 | dentry->d_parent->d_name.name, dentry->d_name.name); | 191 | dentry->d_parent->d_name.name, dentry->d_name.name); |
| 195 | if (!ncp_conn_valid(NCP_SERVER(inode))) | ||
| 196 | return -EIO; | ||
| 197 | if ((ssize_t) count < 0) | 192 | if ((ssize_t) count < 0) |
| 198 | return -EINVAL; | 193 | return -EINVAL; |
| 199 | pos = *ppos; | 194 | pos = *ppos; |
| 200 | if (file->f_flags & O_APPEND) { | 195 | if (file->f_flags & O_APPEND) { |
| 201 | pos = inode->i_size; | 196 | pos = i_size_read(inode); |
| 202 | } | 197 | } |
| 203 | 198 | ||
| 204 | if (pos + count > MAX_NON_LFS && !(file->f_flags&O_LARGEFILE)) { | 199 | if (pos + count > MAX_NON_LFS && !(file->f_flags&O_LARGEFILE)) { |
| @@ -264,8 +259,11 @@ ncp_file_write(struct file *file, const char __user *buf, size_t count, loff_t * | |||
| 264 | 259 | ||
| 265 | *ppos = pos; | 260 | *ppos = pos; |
| 266 | 261 | ||
| 267 | if (pos > inode->i_size) { | 262 | if (pos > i_size_read(inode)) { |
| 268 | inode->i_size = pos; | 263 | mutex_lock(&inode->i_mutex); |
| 264 | if (pos > i_size_read(inode)) | ||
| 265 | i_size_write(inode, pos); | ||
| 266 | mutex_unlock(&inode->i_mutex); | ||
| 269 | } | 267 | } |
| 270 | DPRINTK("ncp_file_write: exit %s/%s\n", | 268 | DPRINTK("ncp_file_write: exit %s/%s\n", |
| 271 | dentry->d_parent->d_name.name, dentry->d_name.name); | 269 | dentry->d_parent->d_name.name, dentry->d_name.name); |
| @@ -281,18 +279,9 @@ static int ncp_release(struct inode *inode, struct file *file) { | |||
| 281 | return 0; | 279 | return 0; |
| 282 | } | 280 | } |
| 283 | 281 | ||
| 284 | static loff_t ncp_remote_llseek(struct file *file, loff_t offset, int origin) | ||
| 285 | { | ||
| 286 | loff_t ret; | ||
| 287 | lock_kernel(); | ||
| 288 | ret = generic_file_llseek_unlocked(file, offset, origin); | ||
| 289 | unlock_kernel(); | ||
| 290 | return ret; | ||
| 291 | } | ||
| 292 | |||
| 293 | const struct file_operations ncp_file_operations = | 282 | const struct file_operations ncp_file_operations = |
| 294 | { | 283 | { |
| 295 | .llseek = ncp_remote_llseek, | 284 | .llseek = generic_file_llseek, |
| 296 | .read = ncp_file_read, | 285 | .read = ncp_file_read, |
| 297 | .write = ncp_file_write, | 286 | .write = ncp_file_write, |
| 298 | .unlocked_ioctl = ncp_ioctl, | 287 | .unlocked_ioctl = ncp_ioctl, |
