diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_file.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_file.c | 104 |
1 files changed, 4 insertions, 100 deletions
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c index 257a56b127c..ba8ad422a16 100644 --- a/fs/xfs/linux-2.6/xfs_file.c +++ b/fs/xfs/linux-2.6/xfs_file.c | |||
@@ -22,23 +22,15 @@ | |||
22 | #include "xfs_inum.h" | 22 | #include "xfs_inum.h" |
23 | #include "xfs_sb.h" | 23 | #include "xfs_sb.h" |
24 | #include "xfs_ag.h" | 24 | #include "xfs_ag.h" |
25 | #include "xfs_dir2.h" | ||
26 | #include "xfs_trans.h" | 25 | #include "xfs_trans.h" |
27 | #include "xfs_dmapi.h" | ||
28 | #include "xfs_mount.h" | 26 | #include "xfs_mount.h" |
29 | #include "xfs_bmap_btree.h" | 27 | #include "xfs_bmap_btree.h" |
30 | #include "xfs_alloc_btree.h" | ||
31 | #include "xfs_ialloc_btree.h" | ||
32 | #include "xfs_alloc.h" | 28 | #include "xfs_alloc.h" |
33 | #include "xfs_btree.h" | ||
34 | #include "xfs_attr_sf.h" | ||
35 | #include "xfs_dir2_sf.h" | ||
36 | #include "xfs_dinode.h" | 29 | #include "xfs_dinode.h" |
37 | #include "xfs_inode.h" | 30 | #include "xfs_inode.h" |
38 | #include "xfs_inode_item.h" | 31 | #include "xfs_inode_item.h" |
39 | #include "xfs_bmap.h" | 32 | #include "xfs_bmap.h" |
40 | #include "xfs_error.h" | 33 | #include "xfs_error.h" |
41 | #include "xfs_rw.h" | ||
42 | #include "xfs_vnodeops.h" | 34 | #include "xfs_vnodeops.h" |
43 | #include "xfs_da_btree.h" | 35 | #include "xfs_da_btree.h" |
44 | #include "xfs_ioctl.h" | 36 | #include "xfs_ioctl.h" |
@@ -108,7 +100,7 @@ xfs_file_fsync( | |||
108 | int error = 0; | 100 | int error = 0; |
109 | int log_flushed = 0; | 101 | int log_flushed = 0; |
110 | 102 | ||
111 | xfs_itrace_entry(ip); | 103 | trace_xfs_file_fsync(ip); |
112 | 104 | ||
113 | if (XFS_FORCED_SHUTDOWN(ip->i_mount)) | 105 | if (XFS_FORCED_SHUTDOWN(ip->i_mount)) |
114 | return -XFS_ERROR(EIO); | 106 | return -XFS_ERROR(EIO); |
@@ -166,8 +158,7 @@ xfs_file_fsync( | |||
166 | * transaction. So we play it safe and fire off the | 158 | * transaction. So we play it safe and fire off the |
167 | * transaction anyway. | 159 | * transaction anyway. |
168 | */ | 160 | */ |
169 | xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); | 161 | xfs_trans_ijoin(tp, ip); |
170 | xfs_trans_ihold(tp, ip); | ||
171 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); | 162 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); |
172 | xfs_trans_set_sync(tp); | 163 | xfs_trans_set_sync(tp); |
173 | error = _xfs_trans_commit(tp, 0, &log_flushed); | 164 | error = _xfs_trans_commit(tp, 0, &log_flushed); |
@@ -275,20 +266,6 @@ xfs_file_aio_read( | |||
275 | mutex_lock(&inode->i_mutex); | 266 | mutex_lock(&inode->i_mutex); |
276 | xfs_ilock(ip, XFS_IOLOCK_SHARED); | 267 | xfs_ilock(ip, XFS_IOLOCK_SHARED); |
277 | 268 | ||
278 | if (DM_EVENT_ENABLED(ip, DM_EVENT_READ) && !(ioflags & IO_INVIS)) { | ||
279 | int dmflags = FILP_DELAY_FLAG(file) | DM_SEM_FLAG_RD(ioflags); | ||
280 | int iolock = XFS_IOLOCK_SHARED; | ||
281 | |||
282 | ret = -XFS_SEND_DATA(mp, DM_EVENT_READ, ip, iocb->ki_pos, size, | ||
283 | dmflags, &iolock); | ||
284 | if (ret) { | ||
285 | xfs_iunlock(ip, XFS_IOLOCK_SHARED); | ||
286 | if (unlikely(ioflags & IO_ISDIRECT)) | ||
287 | mutex_unlock(&inode->i_mutex); | ||
288 | return ret; | ||
289 | } | ||
290 | } | ||
291 | |||
292 | if (unlikely(ioflags & IO_ISDIRECT)) { | 269 | if (unlikely(ioflags & IO_ISDIRECT)) { |
293 | if (inode->i_mapping->nrpages) { | 270 | if (inode->i_mapping->nrpages) { |
294 | ret = -xfs_flushinval_pages(ip, | 271 | ret = -xfs_flushinval_pages(ip, |
@@ -321,7 +298,6 @@ xfs_file_splice_read( | |||
321 | unsigned int flags) | 298 | unsigned int flags) |
322 | { | 299 | { |
323 | struct xfs_inode *ip = XFS_I(infilp->f_mapping->host); | 300 | struct xfs_inode *ip = XFS_I(infilp->f_mapping->host); |
324 | struct xfs_mount *mp = ip->i_mount; | ||
325 | int ioflags = 0; | 301 | int ioflags = 0; |
326 | ssize_t ret; | 302 | ssize_t ret; |
327 | 303 | ||
@@ -335,18 +311,6 @@ xfs_file_splice_read( | |||
335 | 311 | ||
336 | xfs_ilock(ip, XFS_IOLOCK_SHARED); | 312 | xfs_ilock(ip, XFS_IOLOCK_SHARED); |
337 | 313 | ||
338 | if (DM_EVENT_ENABLED(ip, DM_EVENT_READ) && !(ioflags & IO_INVIS)) { | ||
339 | int iolock = XFS_IOLOCK_SHARED; | ||
340 | int error; | ||
341 | |||
342 | error = XFS_SEND_DATA(mp, DM_EVENT_READ, ip, *ppos, count, | ||
343 | FILP_DELAY_FLAG(infilp), &iolock); | ||
344 | if (error) { | ||
345 | xfs_iunlock(ip, XFS_IOLOCK_SHARED); | ||
346 | return -error; | ||
347 | } | ||
348 | } | ||
349 | |||
350 | trace_xfs_file_splice_read(ip, count, *ppos, ioflags); | 314 | trace_xfs_file_splice_read(ip, count, *ppos, ioflags); |
351 | 315 | ||
352 | ret = generic_file_splice_read(infilp, ppos, pipe, count, flags); | 316 | ret = generic_file_splice_read(infilp, ppos, pipe, count, flags); |
@@ -367,7 +331,6 @@ xfs_file_splice_write( | |||
367 | { | 331 | { |
368 | struct inode *inode = outfilp->f_mapping->host; | 332 | struct inode *inode = outfilp->f_mapping->host; |
369 | struct xfs_inode *ip = XFS_I(inode); | 333 | struct xfs_inode *ip = XFS_I(inode); |
370 | struct xfs_mount *mp = ip->i_mount; | ||
371 | xfs_fsize_t isize, new_size; | 334 | xfs_fsize_t isize, new_size; |
372 | int ioflags = 0; | 335 | int ioflags = 0; |
373 | ssize_t ret; | 336 | ssize_t ret; |
@@ -382,18 +345,6 @@ xfs_file_splice_write( | |||
382 | 345 | ||
383 | xfs_ilock(ip, XFS_IOLOCK_EXCL); | 346 | xfs_ilock(ip, XFS_IOLOCK_EXCL); |
384 | 347 | ||
385 | if (DM_EVENT_ENABLED(ip, DM_EVENT_WRITE) && !(ioflags & IO_INVIS)) { | ||
386 | int iolock = XFS_IOLOCK_EXCL; | ||
387 | int error; | ||
388 | |||
389 | error = XFS_SEND_DATA(mp, DM_EVENT_WRITE, ip, *ppos, count, | ||
390 | FILP_DELAY_FLAG(outfilp), &iolock); | ||
391 | if (error) { | ||
392 | xfs_iunlock(ip, XFS_IOLOCK_EXCL); | ||
393 | return -error; | ||
394 | } | ||
395 | } | ||
396 | |||
397 | new_size = *ppos + count; | 348 | new_size = *ppos + count; |
398 | 349 | ||
399 | xfs_ilock(ip, XFS_ILOCK_EXCL); | 350 | xfs_ilock(ip, XFS_ILOCK_EXCL); |
@@ -463,7 +414,7 @@ xfs_zero_last_block( | |||
463 | last_fsb = XFS_B_TO_FSBT(mp, isize); | 414 | last_fsb = XFS_B_TO_FSBT(mp, isize); |
464 | nimaps = 1; | 415 | nimaps = 1; |
465 | error = xfs_bmapi(NULL, ip, last_fsb, 1, 0, NULL, 0, &imap, | 416 | error = xfs_bmapi(NULL, ip, last_fsb, 1, 0, NULL, 0, &imap, |
466 | &nimaps, NULL, NULL); | 417 | &nimaps, NULL); |
467 | if (error) { | 418 | if (error) { |
468 | return error; | 419 | return error; |
469 | } | 420 | } |
@@ -558,7 +509,7 @@ xfs_zero_eof( | |||
558 | nimaps = 1; | 509 | nimaps = 1; |
559 | zero_count_fsb = end_zero_fsb - start_zero_fsb + 1; | 510 | zero_count_fsb = end_zero_fsb - start_zero_fsb + 1; |
560 | error = xfs_bmapi(NULL, ip, start_zero_fsb, zero_count_fsb, | 511 | error = xfs_bmapi(NULL, ip, start_zero_fsb, zero_count_fsb, |
561 | 0, NULL, 0, &imap, &nimaps, NULL, NULL); | 512 | 0, NULL, 0, &imap, &nimaps, NULL); |
562 | if (error) { | 513 | if (error) { |
563 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); | 514 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); |
564 | return error; | 515 | return error; |
@@ -627,7 +578,6 @@ xfs_file_aio_write( | |||
627 | int ioflags = 0; | 578 | int ioflags = 0; |
628 | xfs_fsize_t isize, new_size; | 579 | xfs_fsize_t isize, new_size; |
629 | int iolock; | 580 | int iolock; |
630 | int eventsent = 0; | ||
631 | size_t ocount = 0, count; | 581 | size_t ocount = 0, count; |
632 | int need_i_mutex; | 582 | int need_i_mutex; |
633 | 583 | ||
@@ -673,33 +623,6 @@ start: | |||
673 | goto out_unlock_mutex; | 623 | goto out_unlock_mutex; |
674 | } | 624 | } |
675 | 625 | ||
676 | if ((DM_EVENT_ENABLED(ip, DM_EVENT_WRITE) && | ||
677 | !(ioflags & IO_INVIS) && !eventsent)) { | ||
678 | int dmflags = FILP_DELAY_FLAG(file); | ||
679 | |||
680 | if (need_i_mutex) | ||
681 | dmflags |= DM_FLAGS_IMUX; | ||
682 | |||
683 | xfs_iunlock(ip, XFS_ILOCK_EXCL); | ||
684 | error = XFS_SEND_DATA(ip->i_mount, DM_EVENT_WRITE, ip, | ||
685 | pos, count, dmflags, &iolock); | ||
686 | if (error) { | ||
687 | goto out_unlock_internal; | ||
688 | } | ||
689 | xfs_ilock(ip, XFS_ILOCK_EXCL); | ||
690 | eventsent = 1; | ||
691 | |||
692 | /* | ||
693 | * The iolock was dropped and reacquired in XFS_SEND_DATA | ||
694 | * so we have to recheck the size when appending. | ||
695 | * We will only "goto start;" once, since having sent the | ||
696 | * event prevents another call to XFS_SEND_DATA, which is | ||
697 | * what allows the size to change in the first place. | ||
698 | */ | ||
699 | if ((file->f_flags & O_APPEND) && pos != ip->i_size) | ||
700 | goto start; | ||
701 | } | ||
702 | |||
703 | if (ioflags & IO_ISDIRECT) { | 626 | if (ioflags & IO_ISDIRECT) { |
704 | xfs_buftarg_t *target = | 627 | xfs_buftarg_t *target = |
705 | XFS_IS_REALTIME_INODE(ip) ? | 628 | XFS_IS_REALTIME_INODE(ip) ? |
@@ -830,22 +753,6 @@ write_retry: | |||
830 | xfs_iunlock(ip, XFS_ILOCK_EXCL); | 753 | xfs_iunlock(ip, XFS_ILOCK_EXCL); |
831 | } | 754 | } |
832 | 755 | ||
833 | if (ret == -ENOSPC && | ||
834 | DM_EVENT_ENABLED(ip, DM_EVENT_NOSPACE) && !(ioflags & IO_INVIS)) { | ||
835 | xfs_iunlock(ip, iolock); | ||
836 | if (need_i_mutex) | ||
837 | mutex_unlock(&inode->i_mutex); | ||
838 | error = XFS_SEND_NAMESP(ip->i_mount, DM_EVENT_NOSPACE, ip, | ||
839 | DM_RIGHT_NULL, ip, DM_RIGHT_NULL, NULL, NULL, | ||
840 | 0, 0, 0); /* Delay flag intentionally unused */ | ||
841 | if (need_i_mutex) | ||
842 | mutex_lock(&inode->i_mutex); | ||
843 | xfs_ilock(ip, iolock); | ||
844 | if (error) | ||
845 | goto out_unlock_internal; | ||
846 | goto start; | ||
847 | } | ||
848 | |||
849 | error = -ret; | 756 | error = -ret; |
850 | if (ret <= 0) | 757 | if (ret <= 0) |
851 | goto out_unlock_internal; | 758 | goto out_unlock_internal; |
@@ -1014,9 +921,6 @@ const struct file_operations xfs_file_operations = { | |||
1014 | .open = xfs_file_open, | 921 | .open = xfs_file_open, |
1015 | .release = xfs_file_release, | 922 | .release = xfs_file_release, |
1016 | .fsync = xfs_file_fsync, | 923 | .fsync = xfs_file_fsync, |
1017 | #ifdef HAVE_FOP_OPEN_EXEC | ||
1018 | .open_exec = xfs_file_open_exec, | ||
1019 | #endif | ||
1020 | }; | 924 | }; |
1021 | 925 | ||
1022 | const struct file_operations xfs_dir_file_operations = { | 926 | const struct file_operations xfs_dir_file_operations = { |