1 /* 2 * linux/fs/ext4/file.c 3 * 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) 8 * 9 * from 10 * 11 * linux/fs/minix/file.c 12 * 13 * Copyright (C) 1991, 1992 Linus Torvalds 14 * 15 * ext4 fs regular file handling primitives 16 * 17 * 64-bit file support on 64-bit platforms by Jakub Jelinek 18 * (jj@sunsite.ms.mff.cuni.cz) 19 */ 20 21 #include <linux/time.h> 22 #include <linux/fs.h> 23 #include <linux/jbd2.h> 24 #include "ext4.h" 25 #include "ext4_jbd2.h" 26 #include "xattr.h" 27 #include "acl.h" 28 29 /* 30 * Called when an inode is released. Note that this is different 31 * from ext4_file_open: open gets called at every open, but release 32 * gets called only when /all/ the files are closed. 33 */ 34 static int ext4_release_file(struct inode *inode, struct file *filp) 35 { 36 if (EXT4_I(inode)->i_state & EXT4_STATE_DA_ALLOC_CLOSE) { 37 ext4_alloc_da_blocks(inode); 38 EXT4_I(inode)->i_state &= ~EXT4_STATE_DA_ALLOC_CLOSE; 39 } 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) && 43 !EXT4_I(inode)->i_reserved_data_blocks) 44 { 45 down_write(&EXT4_I(inode)->i_data_sem); 46 ext4_discard_preallocations(inode); 47 up_write(&EXT4_I(inode)->i_data_sem); 48 } 49 if (is_dx(inode) && filp->private_data) 50 ext4_htree_free_dir_info(filp->private_data); 51 52 return 0; 53 } 54 55 static ssize_t 56 ext4_file_write(struct kiocb *iocb, const struct iovec *iov, 57 unsigned long nr_segs, loff_t pos) 58 { 59 struct file *file = iocb->ki_filp; 60 struct inode *inode = file->f_path.dentry->d_inode; 61 ssize_t ret; 62 int err; 63 64 /* 65 * If we have encountered a bitmap-format file, the size limit 66 * is smaller than s_maxbytes, which is for extent-mapped files. 67 */ 68 69 if (!(EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL)) { 70 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); 71 size_t length = iov_length(iov, nr_segs); 72 73 if (pos > sbi->s_bitmap_maxbytes) 74 return -EFBIG; 75 76 if (pos + length > sbi->s_bitmap_maxbytes) { 77 nr_segs = iov_shorten((struct iovec *)iov, nr_segs, 78 sbi->s_bitmap_maxbytes - pos); 79 } 80 } 81 82 ret = generic_file_aio_write(iocb, iov, nr_segs, pos); 83 /* 84 * Skip flushing if there was an error, or if nothing was written. 85 */ 86 if (ret <= 0) 87 return ret; 88 89 /* 90 * If the inode is IS_SYNC, or is O_SYNC and we are doing data 91 * journalling then we need to make sure that we force the transaction 92 * to disk to keep all metadata uptodate synchronously. 93 */ 94 if (file->f_flags & O_SYNC) { 95 /* 96 * If we are non-data-journaled, then the dirty data has 97 * already been flushed to backing store by generic_osync_inode, 98 * and the inode has been flushed too if there have been any 99 * modifications other than mere timestamp updates. 100 * 101 * Open question --- do we care about flushing timestamps too 102 * if the inode is IS_SYNC? 103 */ 104 if (!ext4_should_journal_data(inode)) 105 return ret; 106 107 goto force_commit; 108 } 109 110 /* 111 * So we know that there has been no forced data flush. If the inode 112 * is marked IS_SYNC, we need to force one ourselves. 113 */ 114 if (!IS_SYNC(inode)) 115 return ret; 116 117 /* 118 * Open question #2 --- should we force data to disk here too? If we 119 * don't, the only impact is that data=writeback filesystems won't 120 * flush data to disk automatically on IS_SYNC, only metadata (but 121 * historically, that is what ext2 has done.) 122 */ 123 124 force_commit: 125 err = ext4_force_commit(inode->i_sb); 126 if (err) 127 return err; 128 return ret; 129 } 130 131 static struct vm_operations_struct ext4_file_vm_ops = { 132 .fault = filemap_fault, 133 .page_mkwrite = ext4_page_mkwrite, 134 }; 135 136 static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma) 137 { 138 struct address_space *mapping = file->f_mapping; 139 140 if (!mapping->a_ops->readpage) 141 return -ENOEXEC; 142 file_accessed(file); 143 vma->vm_ops = &ext4_file_vm_ops; 144 vma->vm_flags |= VM_CAN_NONLINEAR; 145 return 0; 146 } 147 148 const struct file_operations ext4_file_operations = { 149 .llseek = generic_file_llseek, 150 .read = do_sync_read, 151 .write = do_sync_write, 152 .aio_read = generic_file_aio_read, 153 .aio_write = ext4_file_write, 154 .unlocked_ioctl = ext4_ioctl, 155 #ifdef CONFIG_COMPAT 156 .compat_ioctl = ext4_compat_ioctl, 157 #endif 158 .mmap = ext4_file_mmap, 159 .open = generic_file_open, 160 .release = ext4_release_file, 161 .fsync = ext4_sync_file, 162 .splice_read = generic_file_splice_read, 163 .splice_write = generic_file_splice_write, 164 }; 165 166 const struct inode_operations ext4_file_inode_operations = { 167 .truncate = ext4_truncate, 168 .setattr = ext4_setattr, 169 .getattr = ext4_getattr, 170 #ifdef CONFIG_EXT4_FS_XATTR 171 .setxattr = generic_setxattr, 172 .getxattr = generic_getxattr, 173 .listxattr = ext4_listxattr, 174 .removexattr = generic_removexattr, 175 #endif 176 .permission = ext4_permission, 177 .fallocate = ext4_fallocate, 178 .fiemap = ext4_fiemap, 179 }; 180 181