inode.c (447a8b858e4bda41c394b1bc7fdbc9dc0bdf44f6) inode.c (88b88a66797159949cec32eaab12b4968f6fae2d)
1/*
2 * fs/f2fs/inode.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

--- 55 unchanged lines hidden (view full) ---

64 cpu_to_le32(new_encode_dev(inode->i_rdev));
65 ri->i_addr[2] = 0;
66 }
67 }
68}
69
70static int do_read_inode(struct inode *inode)
71{
1/*
2 * fs/f2fs/inode.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

--- 55 unchanged lines hidden (view full) ---

64 cpu_to_le32(new_encode_dev(inode->i_rdev));
65 ri->i_addr[2] = 0;
66 }
67 }
68}
69
70static int do_read_inode(struct inode *inode)
71{
72 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
72 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
73 struct f2fs_inode_info *fi = F2FS_I(inode);
74 struct page *node_page;
75 struct f2fs_inode *ri;
76
77 /* Check if ino is within scope */
78 if (check_nid_range(sbi, inode->i_ino)) {
79 f2fs_msg(inode->i_sb, KERN_ERR, "bad inode number: %lu",
80 (unsigned long) inode->i_ino);

--- 132 unchanged lines hidden (view full) ---

213 set_cold_node(inode, node_page);
214 set_page_dirty(node_page);
215
216 clear_inode_flag(F2FS_I(inode), FI_DIRTY_INODE);
217}
218
219void update_inode_page(struct inode *inode)
220{
73 struct f2fs_inode_info *fi = F2FS_I(inode);
74 struct page *node_page;
75 struct f2fs_inode *ri;
76
77 /* Check if ino is within scope */
78 if (check_nid_range(sbi, inode->i_ino)) {
79 f2fs_msg(inode->i_sb, KERN_ERR, "bad inode number: %lu",
80 (unsigned long) inode->i_ino);

--- 132 unchanged lines hidden (view full) ---

213 set_cold_node(inode, node_page);
214 set_page_dirty(node_page);
215
216 clear_inode_flag(F2FS_I(inode), FI_DIRTY_INODE);
217}
218
219void update_inode_page(struct inode *inode)
220{
221 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
221 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
222 struct page *node_page;
223retry:
224 node_page = get_node_page(sbi, inode->i_ino);
225 if (IS_ERR(node_page)) {
226 int err = PTR_ERR(node_page);
227 if (err == -ENOMEM) {
228 cond_resched();
229 goto retry;
230 } else if (err != -ENOENT) {
231 f2fs_stop_checkpoint(sbi);
232 }
233 return;
234 }
235 update_inode(inode, node_page);
236 f2fs_put_page(node_page, 1);
237}
238
239int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc)
240{
222 struct page *node_page;
223retry:
224 node_page = get_node_page(sbi, inode->i_ino);
225 if (IS_ERR(node_page)) {
226 int err = PTR_ERR(node_page);
227 if (err == -ENOMEM) {
228 cond_resched();
229 goto retry;
230 } else if (err != -ENOENT) {
231 f2fs_stop_checkpoint(sbi);
232 }
233 return;
234 }
235 update_inode(inode, node_page);
236 f2fs_put_page(node_page, 1);
237}
238
239int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc)
240{
241 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
241 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
242
243 if (inode->i_ino == F2FS_NODE_INO(sbi) ||
244 inode->i_ino == F2FS_META_INO(sbi))
245 return 0;
246
247 if (!is_inode_flag_set(F2FS_I(inode), FI_DIRTY_INODE))
248 return 0;
249

--- 11 unchanged lines hidden (view full) ---

261 return 0;
262}
263
264/*
265 * Called at the last iput() if i_nlink is zero
266 */
267void f2fs_evict_inode(struct inode *inode)
268{
242
243 if (inode->i_ino == F2FS_NODE_INO(sbi) ||
244 inode->i_ino == F2FS_META_INO(sbi))
245 return 0;
246
247 if (!is_inode_flag_set(F2FS_I(inode), FI_DIRTY_INODE))
248 return 0;
249

--- 11 unchanged lines hidden (view full) ---

261 return 0;
262}
263
264/*
265 * Called at the last iput() if i_nlink is zero
266 */
267void f2fs_evict_inode(struct inode *inode)
268{
269 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
269 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
270 nid_t xnid = F2FS_I(inode)->i_xattr_nid;
271
270 nid_t xnid = F2FS_I(inode)->i_xattr_nid;
271
272 /* some remained atomic pages should discarded */
273 if (f2fs_is_atomic_file(inode))
274 commit_inmem_pages(inode, true);
275
272 trace_f2fs_evict_inode(inode);
273 truncate_inode_pages_final(&inode->i_data);
274
275 if (inode->i_ino == F2FS_NODE_INO(sbi) ||
276 inode->i_ino == F2FS_META_INO(sbi))
277 goto out_clear;
278
276 trace_f2fs_evict_inode(inode);
277 truncate_inode_pages_final(&inode->i_data);
278
279 if (inode->i_ino == F2FS_NODE_INO(sbi) ||
280 inode->i_ino == F2FS_META_INO(sbi))
281 goto out_clear;
282
279 f2fs_bug_on(get_dirty_dents(inode));
283 f2fs_bug_on(sbi, get_dirty_pages(inode));
280 remove_dirty_dir_inode(inode);
281
282 if (inode->i_nlink || is_bad_inode(inode))
283 goto no_delete;
284
285 sb_start_intwrite(inode->i_sb);
286 set_inode_flag(F2FS_I(inode), FI_NO_ALLOC);
287 i_size_write(inode, 0);

--- 13 unchanged lines hidden (view full) ---

301 invalidate_mapping_pages(NODE_MAPPING(sbi), xnid, xnid);
302 if (is_inode_flag_set(F2FS_I(inode), FI_APPEND_WRITE))
303 add_dirty_inode(sbi, inode->i_ino, APPEND_INO);
304 if (is_inode_flag_set(F2FS_I(inode), FI_UPDATE_WRITE))
305 add_dirty_inode(sbi, inode->i_ino, UPDATE_INO);
306out_clear:
307 clear_inode(inode);
308}
284 remove_dirty_dir_inode(inode);
285
286 if (inode->i_nlink || is_bad_inode(inode))
287 goto no_delete;
288
289 sb_start_intwrite(inode->i_sb);
290 set_inode_flag(F2FS_I(inode), FI_NO_ALLOC);
291 i_size_write(inode, 0);

--- 13 unchanged lines hidden (view full) ---

305 invalidate_mapping_pages(NODE_MAPPING(sbi), xnid, xnid);
306 if (is_inode_flag_set(F2FS_I(inode), FI_APPEND_WRITE))
307 add_dirty_inode(sbi, inode->i_ino, APPEND_INO);
308 if (is_inode_flag_set(F2FS_I(inode), FI_UPDATE_WRITE))
309 add_dirty_inode(sbi, inode->i_ino, UPDATE_INO);
310out_clear:
311 clear_inode(inode);
312}
313
314/* caller should call f2fs_lock_op() */
315void handle_failed_inode(struct inode *inode)
316{
317 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
318
319 clear_nlink(inode);
320 make_bad_inode(inode);
321 unlock_new_inode(inode);
322
323 i_size_write(inode, 0);
324 if (F2FS_HAS_BLOCKS(inode))
325 f2fs_truncate(inode);
326
327 remove_inode_page(inode);
328 stat_dec_inline_inode(inode);
329
330 alloc_nid_failed(sbi, inode->i_ino);
331 f2fs_unlock_op(sbi);
332
333 /* iput will drop the inode object */
334 iput(inode);
335}