4 * Copyright (C) 1992, 1993, 1994, 1995
5 * Remy Card (card@masi.ibp.fr)
6 * Laboratoire MASI - Institut Blaise Pascal
7 * Universite Pierre et Marie Curie (Paris VI)
11 * linux/fs/minix/file.c
13 * Copyright (C) 1991, 1992 Linus Torvalds
15 * ext3 fs regular file handling primitives
17 * 64-bit file support on 64-bit platforms by Jakub Jelinek
18 * (jj@sunsite.ms.mff.cuni.cz)
21 #include <linux/time.h>
23 #include <linux/jbd.h>
24 #include <linux/ext3_fs.h>
25 #include <linux/ext3_jbd.h>
30 * Called when an inode is released. Note that this is different
31 * from ext3_file_open: open gets called at every open, but release
32 * gets called only when /all/ the files are closed.
34 static int ext3_release_file (struct inode
* inode
, struct file
* filp
)
36 if (EXT3_I(inode
)->i_state
& EXT3_STATE_FLUSH_ON_CLOSE
) {
37 filemap_flush(inode
->i_mapping
);
38 EXT3_I(inode
)->i_state
&= ~EXT3_STATE_FLUSH_ON_CLOSE
;
40 /* if we are the last writer on the inode, drop the block reservation */
41 if ((filp
->f_mode
& FMODE_WRITE
) &&
42 (atomic_read(&inode
->i_writecount
) == 1))
44 mutex_lock(&EXT3_I(inode
)->truncate_mutex
);
45 ext3_discard_reservation(inode
);
46 mutex_unlock(&EXT3_I(inode
)->truncate_mutex
);
48 if (is_dx(inode
) && filp
->private_data
)
49 ext3_htree_free_dir_info(filp
->private_data
);
55 ext3_file_write(struct kiocb
*iocb
, const struct iovec
*iov
,
56 unsigned long nr_segs
, loff_t pos
)
58 struct file
*file
= iocb
->ki_filp
;
59 struct inode
*inode
= file
->f_path
.dentry
->d_inode
;
63 ret
= generic_file_aio_write(iocb
, iov
, nr_segs
, pos
);
66 * Skip flushing if there was an error, or if nothing was written.
72 * If the inode is IS_SYNC, or is O_SYNC and we are doing data
73 * journalling then we need to make sure that we force the transaction
74 * to disk to keep all metadata uptodate synchronously.
76 if (file
->f_flags
& O_SYNC
) {
78 * If we are non-data-journaled, then the dirty data has
79 * already been flushed to backing store by generic_osync_inode,
80 * and the inode has been flushed too if there have been any
81 * modifications other than mere timestamp updates.
83 * Open question --- do we care about flushing timestamps too
84 * if the inode is IS_SYNC?
86 if (!ext3_should_journal_data(inode
))
93 * So we know that there has been no forced data flush. If the inode
94 * is marked IS_SYNC, we need to force one ourselves.
100 * Open question #2 --- should we force data to disk here too? If we
101 * don't, the only impact is that data=writeback filesystems won't
102 * flush data to disk automatically on IS_SYNC, only metadata (but
103 * historically, that is what ext2 has done.)
107 err
= ext3_force_commit(inode
->i_sb
);
113 const struct file_operations ext3_file_operations
= {
114 .llseek
= generic_file_llseek
,
115 .read
= do_sync_read
,
116 .write
= do_sync_write
,
117 .aio_read
= generic_file_aio_read
,
118 .aio_write
= ext3_file_write
,
119 .unlocked_ioctl
= ext3_ioctl
,
121 .compat_ioctl
= ext3_compat_ioctl
,
123 .mmap
= generic_file_mmap
,
124 .open
= generic_file_open
,
125 .release
= ext3_release_file
,
126 .fsync
= ext3_sync_file
,
127 .splice_read
= generic_file_splice_read
,
128 .splice_write
= generic_file_splice_write
,
131 const struct inode_operations ext3_file_inode_operations
= {
132 .truncate
= ext3_truncate
,
133 .setattr
= ext3_setattr
,
134 #ifdef CONFIG_EXT3_FS_XATTR
135 .setxattr
= generic_setxattr
,
136 .getxattr
= generic_getxattr
,
137 .listxattr
= ext3_listxattr
,
138 .removexattr
= generic_removexattr
,
140 .check_acl
= ext3_check_acl
,
141 .fiemap
= ext3_fiemap
,