|
Lines 100-106
Link Here
|
| 100 |
if (file->f_op && file->f_op->llseek) |
100 |
if (file->f_op && file->f_op->llseek) |
| 101 |
fn = file->f_op->llseek; |
101 |
fn = file->f_op->llseek; |
| 102 |
lock_kernel(); |
102 |
lock_kernel(); |
|
|
103 |
down(&file->f_pos_lock); |
| 103 |
retval = fn(file, offset, origin); |
104 |
retval = fn(file, offset, origin); |
|
|
105 |
up(&file->f_pos_lock); |
| 104 |
unlock_kernel(); |
106 |
unlock_kernel(); |
| 105 |
return retval; |
107 |
return retval; |
| 106 |
} |
108 |
} |
|
Lines 173-180
Link Here
|
| 173 |
if (!ret) { |
175 |
if (!ret) { |
| 174 |
ssize_t (*read)(struct file *, char *, size_t, loff_t *); |
176 |
ssize_t (*read)(struct file *, char *, size_t, loff_t *); |
| 175 |
ret = -EINVAL; |
177 |
ret = -EINVAL; |
| 176 |
if (file->f_op && (read = file->f_op->read) != NULL) |
178 |
if (file->f_op && (read = file->f_op->read) != NULL) { |
|
|
179 |
down(&file->f_pos_lock); |
| 177 |
ret = read(file, buf, count, &file->f_pos); |
180 |
ret = read(file, buf, count, &file->f_pos); |
|
|
181 |
up(&file->f_pos_lock); |
| 182 |
} |
| 178 |
} |
183 |
} |
| 179 |
} |
184 |
} |
| 180 |
if (ret > 0) |
185 |
if (ret > 0) |
|
Lines 199-206
Link Here
|
| 199 |
if (!ret) { |
204 |
if (!ret) { |
| 200 |
ssize_t (*write)(struct file *, const char *, size_t, loff_t *); |
205 |
ssize_t (*write)(struct file *, const char *, size_t, loff_t *); |
| 201 |
ret = -EINVAL; |
206 |
ret = -EINVAL; |
| 202 |
if (file->f_op && (write = file->f_op->write) != NULL) |
207 |
if (file->f_op && (write = file->f_op->write) != NULL) { |
|
|
208 |
down(&file->f_pos_lock); |
| 203 |
ret = write(file, buf, count, &file->f_pos); |
209 |
ret = write(file, buf, count, &file->f_pos); |
|
|
210 |
up(&file->f_pos_lock); |
| 211 |
} |
| 204 |
} |
212 |
} |
| 205 |
} |
213 |
} |
| 206 |
if (ret > 0) |
214 |
if (ret > 0) |
|
Lines 338-345
Link Here
|
| 338 |
if (!file) |
346 |
if (!file) |
| 339 |
goto bad_file; |
347 |
goto bad_file; |
| 340 |
if (file->f_op && (file->f_mode & FMODE_READ) && |
348 |
if (file->f_op && (file->f_mode & FMODE_READ) && |
| 341 |
(file->f_op->readv || file->f_op->read)) |
349 |
(file->f_op->readv || file->f_op->read)) { |
|
|
350 |
down(&file->f_pos_lock); |
| 342 |
ret = do_readv_writev(VERIFY_WRITE, file, vector, count); |
351 |
ret = do_readv_writev(VERIFY_WRITE, file, vector, count); |
|
|
352 |
up(&file->f_pos_lock); |
| 353 |
} |
| 343 |
fput(file); |
354 |
fput(file); |
| 344 |
|
355 |
|
| 345 |
bad_file: |
356 |
bad_file: |
|
Lines 358-365
Link Here
|
| 358 |
if (!file) |
369 |
if (!file) |
| 359 |
goto bad_file; |
370 |
goto bad_file; |
| 360 |
if (file->f_op && (file->f_mode & FMODE_WRITE) && |
371 |
if (file->f_op && (file->f_mode & FMODE_WRITE) && |
| 361 |
(file->f_op->writev || file->f_op->write)) |
372 |
(file->f_op->writev || file->f_op->write)) { |
|
|
373 |
down(&file->f_pos_lock); |
| 362 |
ret = do_readv_writev(VERIFY_READ, file, vector, count); |
374 |
ret = do_readv_writev(VERIFY_READ, file, vector, count); |
|
|
375 |
up(&file->f_pos_lock); |
| 376 |
} |
| 363 |
fput(file); |
377 |
fput(file); |
| 364 |
|
378 |
|
| 365 |
bad_file: |
379 |
bad_file: |
|
Lines 392-398
Link Here
|
| 392 |
goto out; |
406 |
goto out; |
| 393 |
if (pos < 0) |
407 |
if (pos < 0) |
| 394 |
goto out; |
408 |
goto out; |
|
|
409 |
down(&file->f_pos_lock); |
| 395 |
ret = read(file, buf, count, &pos); |
410 |
ret = read(file, buf, count, &pos); |
|
|
411 |
up(&file->f_pos_lock); |
| 396 |
if (ret > 0) |
412 |
if (ret > 0) |
| 397 |
dnotify_parent(file->f_dentry, DN_ACCESS); |
413 |
dnotify_parent(file->f_dentry, DN_ACCESS); |
| 398 |
out: |
414 |
out: |
|
Lines 424-430
Link Here
|
| 424 |
if (pos < 0) |
440 |
if (pos < 0) |
| 425 |
goto out; |
441 |
goto out; |
| 426 |
|
442 |
|
|
|
443 |
down(&file->f_pos_lock); |
| 427 |
ret = write(file, buf, count, &pos); |
444 |
ret = write(file, buf, count, &pos); |
|
|
445 |
up(&file->f_pos_lock); |
| 428 |
if (ret > 0) |
446 |
if (ret > 0) |
| 429 |
dnotify_parent(file->f_dentry, DN_MODIFY); |
447 |
dnotify_parent(file->f_dentry, DN_MODIFY); |
| 430 |
out: |
448 |
out: |