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 ---