file.c (6e9041c6ddd6cbdc61d87bcaca8ca7bb17c28377) | file.c (2d4d9fb591fe83d9f0559afaa9736ebc8edad0aa) |
---|---|
1/* 2 * fs/f2fs/file.c 3 * 4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 5 * http://www.samsung.com/ 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 49 unchanged lines hidden (view full) --- 58 f2fs_put_dnode(&dn); 59 mutex_unlock_op(sbi, ilock); 60 goto out; 61 } 62 } 63 f2fs_put_dnode(&dn); 64 mutex_unlock_op(sbi, ilock); 65 | 1/* 2 * fs/f2fs/file.c 3 * 4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 5 * http://www.samsung.com/ 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 49 unchanged lines hidden (view full) --- 58 f2fs_put_dnode(&dn); 59 mutex_unlock_op(sbi, ilock); 60 goto out; 61 } 62 } 63 f2fs_put_dnode(&dn); 64 mutex_unlock_op(sbi, ilock); 65 |
66 file_update_time(vma->vm_file); |
|
66 lock_page(page); 67 if (page->mapping != inode->i_mapping || | 67 lock_page(page); 68 if (page->mapping != inode->i_mapping || |
68 page_offset(page) >= i_size_read(inode) || | 69 page_offset(page) > i_size_read(inode) || |
69 !PageUptodate(page)) { 70 unlock_page(page); 71 err = -EFAULT; 72 goto out; 73 } 74 75 /* 76 * check to see if the page is mapped already (no holes) 77 */ 78 if (PageMappedToDisk(page)) | 70 !PageUptodate(page)) { 71 unlock_page(page); 72 err = -EFAULT; 73 goto out; 74 } 75 76 /* 77 * check to see if the page is mapped already (no holes) 78 */ 79 if (PageMappedToDisk(page)) |
79 goto out; | 80 goto mapped; |
80 | 81 |
81 /* fill the page */ 82 wait_on_page_writeback(page); 83 | |
84 /* page is wholly or partially inside EOF */ 85 if (((page->index + 1) << PAGE_CACHE_SHIFT) > i_size_read(inode)) { 86 unsigned offset; 87 offset = i_size_read(inode) & ~PAGE_CACHE_MASK; 88 zero_user_segment(page, offset, PAGE_CACHE_SIZE); 89 } 90 set_page_dirty(page); 91 SetPageUptodate(page); 92 | 82 /* page is wholly or partially inside EOF */ 83 if (((page->index + 1) << PAGE_CACHE_SHIFT) > i_size_read(inode)) { 84 unsigned offset; 85 offset = i_size_read(inode) & ~PAGE_CACHE_MASK; 86 zero_user_segment(page, offset, PAGE_CACHE_SIZE); 87 } 88 set_page_dirty(page); 89 SetPageUptodate(page); 90 |
93 file_update_time(vma->vm_file); | 91mapped: 92 /* fill the page */ 93 wait_on_page_writeback(page); |
94out: 95 sb_end_pagefault(inode->i_sb); 96 return block_page_mkwrite_return(err); 97} 98 99static const struct vm_operations_struct f2fs_file_vm_ops = { 100 .fault = filemap_fault, 101 .page_mkwrite = f2fs_vm_page_mkwrite, --- 7 unchanged lines hidden (view full) --- 109 int ret = 0; 110 bool need_cp = false; 111 struct writeback_control wbc = { 112 .sync_mode = WB_SYNC_ALL, 113 .nr_to_write = LONG_MAX, 114 .for_reclaim = 0, 115 }; 116 | 94out: 95 sb_end_pagefault(inode->i_sb); 96 return block_page_mkwrite_return(err); 97} 98 99static const struct vm_operations_struct f2fs_file_vm_ops = { 100 .fault = filemap_fault, 101 .page_mkwrite = f2fs_vm_page_mkwrite, --- 7 unchanged lines hidden (view full) --- 109 int ret = 0; 110 bool need_cp = false; 111 struct writeback_control wbc = { 112 .sync_mode = WB_SYNC_ALL, 113 .nr_to_write = LONG_MAX, 114 .for_reclaim = 0, 115 }; 116 |
117 if (inode->i_sb->s_flags & MS_RDONLY) | 117 if (f2fs_readonly(inode->i_sb)) |
118 return 0; 119 120 trace_f2fs_sync_file_enter(inode); 121 ret = filemap_write_and_wait_range(inode->i_mapping, start, end); 122 if (ret) { 123 trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret); 124 return ret; 125 } --- 37 unchanged lines hidden (view full) --- 163 164static int f2fs_file_mmap(struct file *file, struct vm_area_struct *vma) 165{ 166 file_accessed(file); 167 vma->vm_ops = &f2fs_file_vm_ops; 168 return 0; 169} 170 | 118 return 0; 119 120 trace_f2fs_sync_file_enter(inode); 121 ret = filemap_write_and_wait_range(inode->i_mapping, start, end); 122 if (ret) { 123 trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret); 124 return ret; 125 } --- 37 unchanged lines hidden (view full) --- 163 164static int f2fs_file_mmap(struct file *file, struct vm_area_struct *vma) 165{ 166 file_accessed(file); 167 vma->vm_ops = &f2fs_file_vm_ops; 168 return 0; 169} 170 |
171static int truncate_data_blocks_range(struct dnode_of_data *dn, int count) | 171int truncate_data_blocks_range(struct dnode_of_data *dn, int count) |
172{ 173 int nr_free = 0, ofs = dn->ofs_in_node; 174 struct f2fs_sb_info *sbi = F2FS_SB(dn->inode->i_sb); 175 struct f2fs_node *raw_node; 176 __le32 *addr; 177 178 raw_node = page_address(dn->node_page); 179 addr = blkaddr_in_node(raw_node) + ofs; --- 106 unchanged lines hidden (view full) --- 286 trace_f2fs_truncate(inode); 287 288 if (!truncate_blocks(inode, i_size_read(inode))) { 289 inode->i_mtime = inode->i_ctime = CURRENT_TIME; 290 mark_inode_dirty(inode); 291 } 292} 293 | 172{ 173 int nr_free = 0, ofs = dn->ofs_in_node; 174 struct f2fs_sb_info *sbi = F2FS_SB(dn->inode->i_sb); 175 struct f2fs_node *raw_node; 176 __le32 *addr; 177 178 raw_node = page_address(dn->node_page); 179 addr = blkaddr_in_node(raw_node) + ofs; --- 106 unchanged lines hidden (view full) --- 286 trace_f2fs_truncate(inode); 287 288 if (!truncate_blocks(inode, i_size_read(inode))) { 289 inode->i_mtime = inode->i_ctime = CURRENT_TIME; 290 mark_inode_dirty(inode); 291 } 292} 293 |
294static int f2fs_getattr(struct vfsmount *mnt, | 294int f2fs_getattr(struct vfsmount *mnt, |
295 struct dentry *dentry, struct kstat *stat) 296{ 297 struct inode *inode = dentry->d_inode; 298 generic_fillattr(inode, stat); 299 stat->blocks <<= 3; 300 return 0; 301} 302 --- 79 unchanged lines hidden (view full) --- 382 int ilock; 383 384 if (!len) 385 return; 386 387 f2fs_balance_fs(sbi); 388 389 ilock = mutex_lock_op(sbi); | 295 struct dentry *dentry, struct kstat *stat) 296{ 297 struct inode *inode = dentry->d_inode; 298 generic_fillattr(inode, stat); 299 stat->blocks <<= 3; 300 return 0; 301} 302 --- 79 unchanged lines hidden (view full) --- 382 int ilock; 383 384 if (!len) 385 return; 386 387 f2fs_balance_fs(sbi); 388 389 ilock = mutex_lock_op(sbi); |
390 page = get_new_data_page(inode, index, false); | 390 page = get_new_data_page(inode, NULL, index, false); |
391 mutex_unlock_op(sbi, ilock); 392 393 if (!IS_ERR(page)) { 394 wait_on_page_writeback(page); 395 zero_user(page, start, len); 396 set_page_dirty(page); 397 f2fs_put_page(page, 1); 398 } --- 265 unchanged lines hidden --- | 391 mutex_unlock_op(sbi, ilock); 392 393 if (!IS_ERR(page)) { 394 wait_on_page_writeback(page); 395 zero_user(page, start, len); 396 set_page_dirty(page); 397 f2fs_put_page(page, 1); 398 } --- 265 unchanged lines hidden --- |