4 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * http://www.samsung.com/
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
9 * published by the Free Software Foundation.
12 #include <linux/f2fs_fs.h>
13 #include <linux/stat.h>
14 #include <linux/buffer_head.h>
15 #include <linux/writeback.h>
16 #include <linux/blkdev.h>
17 #include <linux/falloc.h>
18 #include <linux/types.h>
19 #include <linux/compat.h>
20 #include <linux/uaccess.h>
21 #include <linux/mount.h>
22 #include <linux/pagevec.h>
23 #include <linux/uio.h>
24 #include <linux/uuid.h>
25 #include <linux/file.h>
34 #include <trace/events/f2fs.h>
36 static vm_fault_t
f2fs_filemap_fault(struct vm_fault
*vmf
)
38 struct inode
*inode
= file_inode(vmf
->vma
->vm_file
);
41 down_read(&F2FS_I(inode
)->i_mmap_sem
);
42 ret
= filemap_fault(vmf
);
43 up_read(&F2FS_I(inode
)->i_mmap_sem
);
48 static vm_fault_t
f2fs_vm_page_mkwrite(struct vm_fault
*vmf
)
50 struct page
*page
= vmf
->page
;
51 struct inode
*inode
= file_inode(vmf
->vma
->vm_file
);
52 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
53 struct dnode_of_data dn
;
56 if (unlikely(f2fs_cp_error(sbi
))) {
61 sb_start_pagefault(inode
->i_sb
);
63 f2fs_bug_on(sbi
, f2fs_has_inline_data(inode
));
65 /* block allocation */
67 set_new_dnode(&dn
, inode
, NULL
, NULL
, 0);
68 err
= f2fs_reserve_block(&dn
, page
->index
);
76 f2fs_balance_fs(sbi
, dn
.node_changed
);
78 file_update_time(vmf
->vma
->vm_file
);
79 down_read(&F2FS_I(inode
)->i_mmap_sem
);
81 if (unlikely(page
->mapping
!= inode
->i_mapping
||
82 page_offset(page
) > i_size_read(inode
) ||
83 !PageUptodate(page
))) {
90 * check to see if the page is mapped already (no holes)
92 if (PageMappedToDisk(page
))
95 /* page is wholly or partially inside EOF */
96 if (((loff_t
)(page
->index
+ 1) << PAGE_SHIFT
) >
100 offset
= i_size_read(inode
) & ~PAGE_MASK
;
101 zero_user_segment(page
, offset
, PAGE_SIZE
);
103 set_page_dirty(page
);
104 if (!PageUptodate(page
))
105 SetPageUptodate(page
);
107 f2fs_update_iostat(sbi
, APP_MAPPED_IO
, F2FS_BLKSIZE
);
109 trace_f2fs_vm_page_mkwrite(page
, DATA
);
112 f2fs_wait_on_page_writeback(page
, DATA
, false);
114 /* wait for GCed page writeback via META_MAPPING */
115 if (f2fs_post_read_required(inode
))
116 f2fs_wait_on_block_writeback(sbi
, dn
.data_blkaddr
);
119 up_read(&F2FS_I(inode
)->i_mmap_sem
);
121 sb_end_pagefault(inode
->i_sb
);
122 f2fs_update_time(sbi
, REQ_TIME
);
124 return block_page_mkwrite_return(err
);
127 static const struct vm_operations_struct f2fs_file_vm_ops
= {
128 .fault
= f2fs_filemap_fault
,
129 .map_pages
= filemap_map_pages
,
130 .page_mkwrite
= f2fs_vm_page_mkwrite
,
133 static int get_parent_ino(struct inode
*inode
, nid_t
*pino
)
135 struct dentry
*dentry
;
137 inode
= igrab(inode
);
138 dentry
= d_find_any_alias(inode
);
143 *pino
= parent_ino(dentry
);
148 static inline enum cp_reason_type
need_do_checkpoint(struct inode
*inode
)
150 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
151 enum cp_reason_type cp_reason
= CP_NO_NEEDED
;
153 if (!S_ISREG(inode
->i_mode
))
154 cp_reason
= CP_NON_REGULAR
;
155 else if (inode
->i_nlink
!= 1)
156 cp_reason
= CP_HARDLINK
;
157 else if (is_sbi_flag_set(sbi
, SBI_NEED_CP
))
158 cp_reason
= CP_SB_NEED_CP
;
159 else if (file_wrong_pino(inode
))
160 cp_reason
= CP_WRONG_PINO
;
161 else if (!f2fs_space_for_roll_forward(sbi
))
162 cp_reason
= CP_NO_SPC_ROLL
;
163 else if (!f2fs_is_checkpointed_node(sbi
, F2FS_I(inode
)->i_pino
))
164 cp_reason
= CP_NODE_NEED_CP
;
165 else if (test_opt(sbi
, FASTBOOT
))
166 cp_reason
= CP_FASTBOOT_MODE
;
167 else if (F2FS_OPTION(sbi
).active_logs
== 2)
168 cp_reason
= CP_SPEC_LOG_NUM
;
169 else if (F2FS_OPTION(sbi
).fsync_mode
== FSYNC_MODE_STRICT
&&
170 f2fs_need_dentry_mark(sbi
, inode
->i_ino
) &&
171 f2fs_exist_written_data(sbi
, F2FS_I(inode
)->i_pino
,
173 cp_reason
= CP_RECOVER_DIR
;
178 static bool need_inode_page_update(struct f2fs_sb_info
*sbi
, nid_t ino
)
180 struct page
*i
= find_get_page(NODE_MAPPING(sbi
), ino
);
182 /* But we need to avoid that there are some inode updates */
183 if ((i
&& PageDirty(i
)) || f2fs_need_inode_block_update(sbi
, ino
))
189 static void try_to_fix_pino(struct inode
*inode
)
191 struct f2fs_inode_info
*fi
= F2FS_I(inode
);
194 down_write(&fi
->i_sem
);
195 if (file_wrong_pino(inode
) && inode
->i_nlink
== 1 &&
196 get_parent_ino(inode
, &pino
)) {
197 f2fs_i_pino_write(inode
, pino
);
198 file_got_pino(inode
);
200 up_write(&fi
->i_sem
);
203 static int f2fs_do_sync_file(struct file
*file
, loff_t start
, loff_t end
,
204 int datasync
, bool atomic
)
206 struct inode
*inode
= file
->f_mapping
->host
;
207 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
208 nid_t ino
= inode
->i_ino
;
210 enum cp_reason_type cp_reason
= 0;
211 struct writeback_control wbc
= {
212 .sync_mode
= WB_SYNC_ALL
,
213 .nr_to_write
= LONG_MAX
,
216 unsigned int seq_id
= 0;
218 if (unlikely(f2fs_readonly(inode
->i_sb
)))
221 trace_f2fs_sync_file_enter(inode
);
223 /* if fdatasync is triggered, let's do in-place-update */
224 if (datasync
|| get_dirty_pages(inode
) <= SM_I(sbi
)->min_fsync_blocks
)
225 set_inode_flag(inode
, FI_NEED_IPU
);
226 ret
= file_write_and_wait_range(file
, start
, end
);
227 clear_inode_flag(inode
, FI_NEED_IPU
);
230 trace_f2fs_sync_file_exit(inode
, cp_reason
, datasync
, ret
);
234 /* if the inode is dirty, let's recover all the time */
235 if (!f2fs_skip_inode_update(inode
, datasync
)) {
236 f2fs_write_inode(inode
, NULL
);
241 * if there is no written data, don't waste time to write recovery info.
243 if (!is_inode_flag_set(inode
, FI_APPEND_WRITE
) &&
244 !f2fs_exist_written_data(sbi
, ino
, APPEND_INO
)) {
246 /* it may call write_inode just prior to fsync */
247 if (need_inode_page_update(sbi
, ino
))
250 if (is_inode_flag_set(inode
, FI_UPDATE_WRITE
) ||
251 f2fs_exist_written_data(sbi
, ino
, UPDATE_INO
))
257 * Both of fdatasync() and fsync() are able to be recovered from
260 down_read(&F2FS_I(inode
)->i_sem
);
261 cp_reason
= need_do_checkpoint(inode
);
262 up_read(&F2FS_I(inode
)->i_sem
);
265 /* all the dirty node pages should be flushed for POR */
266 ret
= f2fs_sync_fs(inode
->i_sb
, 1);
269 * We've secured consistency through sync_fs. Following pino
270 * will be used only for fsynced inodes after checkpoint.
272 try_to_fix_pino(inode
);
273 clear_inode_flag(inode
, FI_APPEND_WRITE
);
274 clear_inode_flag(inode
, FI_UPDATE_WRITE
);
278 atomic_inc(&sbi
->wb_sync_req
[NODE
]);
279 ret
= f2fs_fsync_node_pages(sbi
, inode
, &wbc
, atomic
, &seq_id
);
280 atomic_dec(&sbi
->wb_sync_req
[NODE
]);
284 /* if cp_error was enabled, we should avoid infinite loop */
285 if (unlikely(f2fs_cp_error(sbi
))) {
290 if (f2fs_need_inode_block_update(sbi
, ino
)) {
291 f2fs_mark_inode_dirty_sync(inode
, true);
292 f2fs_write_inode(inode
, NULL
);
297 * If it's atomic_write, it's just fine to keep write ordering. So
298 * here we don't need to wait for node write completion, since we use
299 * node chain which serializes node blocks. If one of node writes are
300 * reordered, we can see simply broken chain, resulting in stopping
301 * roll-forward recovery. It means we'll recover all or none node blocks
305 ret
= f2fs_wait_on_node_pages_writeback(sbi
, seq_id
);
310 /* once recovery info is written, don't need to tack this */
311 f2fs_remove_ino_entry(sbi
, ino
, APPEND_INO
);
312 clear_inode_flag(inode
, FI_APPEND_WRITE
);
314 if (!atomic
&& F2FS_OPTION(sbi
).fsync_mode
!= FSYNC_MODE_NOBARRIER
)
315 ret
= f2fs_issue_flush(sbi
, inode
->i_ino
);
317 f2fs_remove_ino_entry(sbi
, ino
, UPDATE_INO
);
318 clear_inode_flag(inode
, FI_UPDATE_WRITE
);
319 f2fs_remove_ino_entry(sbi
, ino
, FLUSH_INO
);
321 f2fs_update_time(sbi
, REQ_TIME
);
323 trace_f2fs_sync_file_exit(inode
, cp_reason
, datasync
, ret
);
324 f2fs_trace_ios(NULL
, 1);
328 int f2fs_sync_file(struct file
*file
, loff_t start
, loff_t end
, int datasync
)
330 if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(file
)))))
332 return f2fs_do_sync_file(file
, start
, end
, datasync
, false);
335 static pgoff_t
__get_first_dirty_index(struct address_space
*mapping
,
336 pgoff_t pgofs
, int whence
)
341 if (whence
!= SEEK_DATA
)
344 /* find first dirty page index */
345 nr_pages
= find_get_pages_tag(mapping
, &pgofs
, PAGECACHE_TAG_DIRTY
,
354 static bool __found_offset(struct f2fs_sb_info
*sbi
, block_t blkaddr
,
355 pgoff_t dirty
, pgoff_t pgofs
, int whence
)
359 if ((blkaddr
== NEW_ADDR
&& dirty
== pgofs
) ||
360 is_valid_data_blkaddr(sbi
, blkaddr
))
364 if (blkaddr
== NULL_ADDR
)
371 static loff_t
f2fs_seek_block(struct file
*file
, loff_t offset
, int whence
)
373 struct inode
*inode
= file
->f_mapping
->host
;
374 loff_t maxbytes
= inode
->i_sb
->s_maxbytes
;
375 struct dnode_of_data dn
;
376 pgoff_t pgofs
, end_offset
, dirty
;
377 loff_t data_ofs
= offset
;
383 isize
= i_size_read(inode
);
387 /* handle inline data case */
388 if (f2fs_has_inline_data(inode
) || f2fs_has_inline_dentry(inode
)) {
389 if (whence
== SEEK_HOLE
)
394 pgofs
= (pgoff_t
)(offset
>> PAGE_SHIFT
);
396 dirty
= __get_first_dirty_index(inode
->i_mapping
, pgofs
, whence
);
398 for (; data_ofs
< isize
; data_ofs
= (loff_t
)pgofs
<< PAGE_SHIFT
) {
399 set_new_dnode(&dn
, inode
, NULL
, NULL
, 0);
400 err
= f2fs_get_dnode_of_data(&dn
, pgofs
, LOOKUP_NODE
);
401 if (err
&& err
!= -ENOENT
) {
403 } else if (err
== -ENOENT
) {
404 /* direct node does not exists */
405 if (whence
== SEEK_DATA
) {
406 pgofs
= f2fs_get_next_page_offset(&dn
, pgofs
);
413 end_offset
= ADDRS_PER_PAGE(dn
.node_page
, inode
);
415 /* find data/hole in dnode block */
416 for (; dn
.ofs_in_node
< end_offset
;
417 dn
.ofs_in_node
++, pgofs
++,
418 data_ofs
= (loff_t
)pgofs
<< PAGE_SHIFT
) {
421 blkaddr
= datablock_addr(dn
.inode
,
422 dn
.node_page
, dn
.ofs_in_node
);
424 if (__is_valid_data_blkaddr(blkaddr
) &&
425 !f2fs_is_valid_blkaddr(F2FS_I_SB(inode
),
426 blkaddr
, DATA_GENERIC
)) {
431 if (__found_offset(F2FS_I_SB(inode
), blkaddr
, dirty
,
440 if (whence
== SEEK_DATA
)
443 if (whence
== SEEK_HOLE
&& data_ofs
> isize
)
446 return vfs_setpos(file
, data_ofs
, maxbytes
);
452 static loff_t
f2fs_llseek(struct file
*file
, loff_t offset
, int whence
)
454 struct inode
*inode
= file
->f_mapping
->host
;
455 loff_t maxbytes
= inode
->i_sb
->s_maxbytes
;
461 return generic_file_llseek_size(file
, offset
, whence
,
462 maxbytes
, i_size_read(inode
));
467 return f2fs_seek_block(file
, offset
, whence
);
473 static int f2fs_file_mmap(struct file
*file
, struct vm_area_struct
*vma
)
475 struct inode
*inode
= file_inode(file
);
478 if (unlikely(f2fs_cp_error(F2FS_I_SB(inode
))))
481 /* we don't need to use inline_data strictly */
482 err
= f2fs_convert_inline_inode(inode
);
487 vma
->vm_ops
= &f2fs_file_vm_ops
;
491 static int f2fs_file_open(struct inode
*inode
, struct file
*filp
)
493 int err
= fscrypt_file_open(inode
, filp
);
498 filp
->f_mode
|= FMODE_NOWAIT
;
500 return dquot_file_open(inode
, filp
);
503 void f2fs_truncate_data_blocks_range(struct dnode_of_data
*dn
, int count
)
505 struct f2fs_sb_info
*sbi
= F2FS_I_SB(dn
->inode
);
506 struct f2fs_node
*raw_node
;
507 int nr_free
= 0, ofs
= dn
->ofs_in_node
, len
= count
;
511 if (IS_INODE(dn
->node_page
) && f2fs_has_extra_attr(dn
->inode
))
512 base
= get_extra_isize(dn
->inode
);
514 raw_node
= F2FS_NODE(dn
->node_page
);
515 addr
= blkaddr_in_node(raw_node
) + base
+ ofs
;
517 for (; count
> 0; count
--, addr
++, dn
->ofs_in_node
++) {
518 block_t blkaddr
= le32_to_cpu(*addr
);
520 if (blkaddr
== NULL_ADDR
)
523 dn
->data_blkaddr
= NULL_ADDR
;
524 f2fs_set_data_blkaddr(dn
);
526 if (__is_valid_data_blkaddr(blkaddr
) &&
527 !f2fs_is_valid_blkaddr(sbi
, blkaddr
, DATA_GENERIC
))
530 f2fs_invalidate_blocks(sbi
, blkaddr
);
531 if (dn
->ofs_in_node
== 0 && IS_INODE(dn
->node_page
))
532 clear_inode_flag(dn
->inode
, FI_FIRST_BLOCK_WRITTEN
);
539 * once we invalidate valid blkaddr in range [ofs, ofs + count],
540 * we will invalidate all blkaddr in the whole range.
542 fofs
= f2fs_start_bidx_of_node(ofs_of_node(dn
->node_page
),
544 f2fs_update_extent_cache_range(dn
, fofs
, 0, len
);
545 dec_valid_block_count(sbi
, dn
->inode
, nr_free
);
547 dn
->ofs_in_node
= ofs
;
549 f2fs_update_time(sbi
, REQ_TIME
);
550 trace_f2fs_truncate_data_blocks_range(dn
->inode
, dn
->nid
,
551 dn
->ofs_in_node
, nr_free
);
554 void f2fs_truncate_data_blocks(struct dnode_of_data
*dn
)
556 f2fs_truncate_data_blocks_range(dn
, ADDRS_PER_BLOCK
);
559 static int truncate_partial_data_page(struct inode
*inode
, u64 from
,
562 loff_t offset
= from
& (PAGE_SIZE
- 1);
563 pgoff_t index
= from
>> PAGE_SHIFT
;
564 struct address_space
*mapping
= inode
->i_mapping
;
567 if (!offset
&& !cache_only
)
571 page
= find_lock_page(mapping
, index
);
572 if (page
&& PageUptodate(page
))
574 f2fs_put_page(page
, 1);
578 page
= f2fs_get_lock_data_page(inode
, index
, true);
580 return PTR_ERR(page
) == -ENOENT
? 0 : PTR_ERR(page
);
582 f2fs_wait_on_page_writeback(page
, DATA
, true);
583 zero_user(page
, offset
, PAGE_SIZE
- offset
);
585 /* An encrypted inode should have a key and truncate the last page. */
586 f2fs_bug_on(F2FS_I_SB(inode
), cache_only
&& f2fs_encrypted_inode(inode
));
588 set_page_dirty(page
);
589 f2fs_put_page(page
, 1);
593 int f2fs_truncate_blocks(struct inode
*inode
, u64 from
, bool lock
)
595 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
596 struct dnode_of_data dn
;
598 int count
= 0, err
= 0;
600 bool truncate_page
= false;
602 trace_f2fs_truncate_blocks_enter(inode
, from
);
604 free_from
= (pgoff_t
)F2FS_BLK_ALIGN(from
);
606 if (free_from
>= sbi
->max_file_blocks
)
612 ipage
= f2fs_get_node_page(sbi
, inode
->i_ino
);
614 err
= PTR_ERR(ipage
);
618 if (f2fs_has_inline_data(inode
)) {
619 f2fs_truncate_inline_inode(inode
, ipage
, from
);
620 f2fs_put_page(ipage
, 1);
621 truncate_page
= true;
625 set_new_dnode(&dn
, inode
, ipage
, NULL
, 0);
626 err
= f2fs_get_dnode_of_data(&dn
, free_from
, LOOKUP_NODE_RA
);
633 count
= ADDRS_PER_PAGE(dn
.node_page
, inode
);
635 count
-= dn
.ofs_in_node
;
636 f2fs_bug_on(sbi
, count
< 0);
638 if (dn
.ofs_in_node
|| IS_INODE(dn
.node_page
)) {
639 f2fs_truncate_data_blocks_range(&dn
, count
);
645 err
= f2fs_truncate_inode_blocks(inode
, free_from
);
650 /* lastly zero out the first data page */
652 err
= truncate_partial_data_page(inode
, from
, truncate_page
);
654 trace_f2fs_truncate_blocks_exit(inode
, err
);
658 int f2fs_truncate(struct inode
*inode
)
662 if (unlikely(f2fs_cp_error(F2FS_I_SB(inode
))))
665 if (!(S_ISREG(inode
->i_mode
) || S_ISDIR(inode
->i_mode
) ||
666 S_ISLNK(inode
->i_mode
)))
669 trace_f2fs_truncate(inode
);
671 if (time_to_inject(F2FS_I_SB(inode
), FAULT_TRUNCATE
)) {
672 f2fs_show_injection_info(FAULT_TRUNCATE
);
676 /* we should check inline_data size */
677 if (!f2fs_may_inline_data(inode
)) {
678 err
= f2fs_convert_inline_inode(inode
);
683 err
= f2fs_truncate_blocks(inode
, i_size_read(inode
), true);
687 inode
->i_mtime
= inode
->i_ctime
= current_time(inode
);
688 f2fs_mark_inode_dirty_sync(inode
, false);
692 int f2fs_getattr(const struct path
*path
, struct kstat
*stat
,
693 u32 request_mask
, unsigned int query_flags
)
695 struct inode
*inode
= d_inode(path
->dentry
);
696 struct f2fs_inode_info
*fi
= F2FS_I(inode
);
697 struct f2fs_inode
*ri
;
700 if (f2fs_has_extra_attr(inode
) &&
701 f2fs_sb_has_inode_crtime(inode
->i_sb
) &&
702 F2FS_FITS_IN_INODE(ri
, fi
->i_extra_isize
, i_crtime
)) {
703 stat
->result_mask
|= STATX_BTIME
;
704 stat
->btime
.tv_sec
= fi
->i_crtime
.tv_sec
;
705 stat
->btime
.tv_nsec
= fi
->i_crtime
.tv_nsec
;
708 flags
= fi
->i_flags
& F2FS_FL_USER_VISIBLE
;
709 if (flags
& F2FS_APPEND_FL
)
710 stat
->attributes
|= STATX_ATTR_APPEND
;
711 if (flags
& F2FS_COMPR_FL
)
712 stat
->attributes
|= STATX_ATTR_COMPRESSED
;
713 if (f2fs_encrypted_inode(inode
))
714 stat
->attributes
|= STATX_ATTR_ENCRYPTED
;
715 if (flags
& F2FS_IMMUTABLE_FL
)
716 stat
->attributes
|= STATX_ATTR_IMMUTABLE
;
717 if (flags
& F2FS_NODUMP_FL
)
718 stat
->attributes
|= STATX_ATTR_NODUMP
;
720 stat
->attributes_mask
|= (STATX_ATTR_APPEND
|
721 STATX_ATTR_COMPRESSED
|
722 STATX_ATTR_ENCRYPTED
|
723 STATX_ATTR_IMMUTABLE
|
726 generic_fillattr(inode
, stat
);
728 /* we need to show initial sectors used for inline_data/dentries */
729 if ((S_ISREG(inode
->i_mode
) && f2fs_has_inline_data(inode
)) ||
730 f2fs_has_inline_dentry(inode
))
731 stat
->blocks
+= (stat
->size
+ 511) >> 9;
736 #ifdef CONFIG_F2FS_FS_POSIX_ACL
737 static void __setattr_copy(struct inode
*inode
, const struct iattr
*attr
)
739 unsigned int ia_valid
= attr
->ia_valid
;
741 if (ia_valid
& ATTR_UID
)
742 inode
->i_uid
= attr
->ia_uid
;
743 if (ia_valid
& ATTR_GID
)
744 inode
->i_gid
= attr
->ia_gid
;
745 if (ia_valid
& ATTR_ATIME
)
746 inode
->i_atime
= timespec64_trunc(attr
->ia_atime
,
747 inode
->i_sb
->s_time_gran
);
748 if (ia_valid
& ATTR_MTIME
)
749 inode
->i_mtime
= timespec64_trunc(attr
->ia_mtime
,
750 inode
->i_sb
->s_time_gran
);
751 if (ia_valid
& ATTR_CTIME
)
752 inode
->i_ctime
= timespec64_trunc(attr
->ia_ctime
,
753 inode
->i_sb
->s_time_gran
);
754 if (ia_valid
& ATTR_MODE
) {
755 umode_t mode
= attr
->ia_mode
;
757 if (!in_group_p(inode
->i_gid
) && !capable(CAP_FSETID
))
759 set_acl_inode(inode
, mode
);
763 #define __setattr_copy setattr_copy
766 int f2fs_setattr(struct dentry
*dentry
, struct iattr
*attr
)
768 struct inode
*inode
= d_inode(dentry
);
770 bool size_changed
= false;
772 if (unlikely(f2fs_cp_error(F2FS_I_SB(inode
))))
775 err
= setattr_prepare(dentry
, attr
);
779 err
= fscrypt_prepare_setattr(dentry
, attr
);
783 if (is_quota_modification(inode
, attr
)) {
784 err
= dquot_initialize(inode
);
788 if ((attr
->ia_valid
& ATTR_UID
&&
789 !uid_eq(attr
->ia_uid
, inode
->i_uid
)) ||
790 (attr
->ia_valid
& ATTR_GID
&&
791 !gid_eq(attr
->ia_gid
, inode
->i_gid
))) {
792 err
= dquot_transfer(inode
, attr
);
797 if (attr
->ia_valid
& ATTR_SIZE
) {
798 bool to_smaller
= (attr
->ia_size
<= i_size_read(inode
));
800 down_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
801 down_write(&F2FS_I(inode
)->i_mmap_sem
);
803 truncate_setsize(inode
, attr
->ia_size
);
806 err
= f2fs_truncate(inode
);
808 * do not trim all blocks after i_size if target size is
809 * larger than i_size.
811 up_write(&F2FS_I(inode
)->i_mmap_sem
);
812 up_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
818 /* should convert inline inode here */
819 if (!f2fs_may_inline_data(inode
)) {
820 err
= f2fs_convert_inline_inode(inode
);
824 inode
->i_mtime
= inode
->i_ctime
= current_time(inode
);
827 down_write(&F2FS_I(inode
)->i_sem
);
828 F2FS_I(inode
)->last_disk_size
= i_size_read(inode
);
829 up_write(&F2FS_I(inode
)->i_sem
);
834 __setattr_copy(inode
, attr
);
836 if (attr
->ia_valid
& ATTR_MODE
) {
837 err
= posix_acl_chmod(inode
, f2fs_get_inode_mode(inode
));
838 if (err
|| is_inode_flag_set(inode
, FI_ACL_MODE
)) {
839 inode
->i_mode
= F2FS_I(inode
)->i_acl_mode
;
840 clear_inode_flag(inode
, FI_ACL_MODE
);
844 /* file size may changed here */
845 f2fs_mark_inode_dirty_sync(inode
, size_changed
);
847 /* inode change will produce dirty node pages flushed by checkpoint */
848 f2fs_balance_fs(F2FS_I_SB(inode
), true);
853 const struct inode_operations f2fs_file_inode_operations
= {
854 .getattr
= f2fs_getattr
,
855 .setattr
= f2fs_setattr
,
856 .get_acl
= f2fs_get_acl
,
857 .set_acl
= f2fs_set_acl
,
858 #ifdef CONFIG_F2FS_FS_XATTR
859 .listxattr
= f2fs_listxattr
,
861 .fiemap
= f2fs_fiemap
,
864 static int fill_zero(struct inode
*inode
, pgoff_t index
,
865 loff_t start
, loff_t len
)
867 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
873 f2fs_balance_fs(sbi
, true);
876 page
= f2fs_get_new_data_page(inode
, NULL
, index
, false);
880 return PTR_ERR(page
);
882 f2fs_wait_on_page_writeback(page
, DATA
, true);
883 zero_user(page
, start
, len
);
884 set_page_dirty(page
);
885 f2fs_put_page(page
, 1);
889 int f2fs_truncate_hole(struct inode
*inode
, pgoff_t pg_start
, pgoff_t pg_end
)
893 while (pg_start
< pg_end
) {
894 struct dnode_of_data dn
;
895 pgoff_t end_offset
, count
;
897 set_new_dnode(&dn
, inode
, NULL
, NULL
, 0);
898 err
= f2fs_get_dnode_of_data(&dn
, pg_start
, LOOKUP_NODE
);
900 if (err
== -ENOENT
) {
901 pg_start
= f2fs_get_next_page_offset(&dn
,
908 end_offset
= ADDRS_PER_PAGE(dn
.node_page
, inode
);
909 count
= min(end_offset
- dn
.ofs_in_node
, pg_end
- pg_start
);
911 f2fs_bug_on(F2FS_I_SB(inode
), count
== 0 || count
> end_offset
);
913 f2fs_truncate_data_blocks_range(&dn
, count
);
921 static int punch_hole(struct inode
*inode
, loff_t offset
, loff_t len
)
923 pgoff_t pg_start
, pg_end
;
924 loff_t off_start
, off_end
;
927 ret
= f2fs_convert_inline_inode(inode
);
931 pg_start
= ((unsigned long long) offset
) >> PAGE_SHIFT
;
932 pg_end
= ((unsigned long long) offset
+ len
) >> PAGE_SHIFT
;
934 off_start
= offset
& (PAGE_SIZE
- 1);
935 off_end
= (offset
+ len
) & (PAGE_SIZE
- 1);
937 if (pg_start
== pg_end
) {
938 ret
= fill_zero(inode
, pg_start
, off_start
,
939 off_end
- off_start
);
944 ret
= fill_zero(inode
, pg_start
++, off_start
,
945 PAGE_SIZE
- off_start
);
950 ret
= fill_zero(inode
, pg_end
, 0, off_end
);
955 if (pg_start
< pg_end
) {
956 struct address_space
*mapping
= inode
->i_mapping
;
957 loff_t blk_start
, blk_end
;
958 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
960 f2fs_balance_fs(sbi
, true);
962 blk_start
= (loff_t
)pg_start
<< PAGE_SHIFT
;
963 blk_end
= (loff_t
)pg_end
<< PAGE_SHIFT
;
965 down_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
966 down_write(&F2FS_I(inode
)->i_mmap_sem
);
968 truncate_inode_pages_range(mapping
, blk_start
,
972 ret
= f2fs_truncate_hole(inode
, pg_start
, pg_end
);
975 up_write(&F2FS_I(inode
)->i_mmap_sem
);
976 up_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
983 static int __read_out_blkaddrs(struct inode
*inode
, block_t
*blkaddr
,
984 int *do_replace
, pgoff_t off
, pgoff_t len
)
986 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
987 struct dnode_of_data dn
;
991 set_new_dnode(&dn
, inode
, NULL
, NULL
, 0);
992 ret
= f2fs_get_dnode_of_data(&dn
, off
, LOOKUP_NODE_RA
);
993 if (ret
&& ret
!= -ENOENT
) {
995 } else if (ret
== -ENOENT
) {
996 if (dn
.max_level
== 0)
998 done
= min((pgoff_t
)ADDRS_PER_BLOCK
- dn
.ofs_in_node
, len
);
1004 done
= min((pgoff_t
)ADDRS_PER_PAGE(dn
.node_page
, inode
) -
1005 dn
.ofs_in_node
, len
);
1006 for (i
= 0; i
< done
; i
++, blkaddr
++, do_replace
++, dn
.ofs_in_node
++) {
1007 *blkaddr
= datablock_addr(dn
.inode
,
1008 dn
.node_page
, dn
.ofs_in_node
);
1009 if (!f2fs_is_checkpointed_data(sbi
, *blkaddr
)) {
1011 if (test_opt(sbi
, LFS
)) {
1012 f2fs_put_dnode(&dn
);
1016 /* do not invalidate this block address */
1017 f2fs_update_data_blkaddr(&dn
, NULL_ADDR
);
1021 f2fs_put_dnode(&dn
);
1030 static int __roll_back_blkaddrs(struct inode
*inode
, block_t
*blkaddr
,
1031 int *do_replace
, pgoff_t off
, int len
)
1033 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
1034 struct dnode_of_data dn
;
1037 for (i
= 0; i
< len
; i
++, do_replace
++, blkaddr
++) {
1038 if (*do_replace
== 0)
1041 set_new_dnode(&dn
, inode
, NULL
, NULL
, 0);
1042 ret
= f2fs_get_dnode_of_data(&dn
, off
+ i
, LOOKUP_NODE_RA
);
1044 dec_valid_block_count(sbi
, inode
, 1);
1045 f2fs_invalidate_blocks(sbi
, *blkaddr
);
1047 f2fs_update_data_blkaddr(&dn
, *blkaddr
);
1049 f2fs_put_dnode(&dn
);
1054 static int __clone_blkaddrs(struct inode
*src_inode
, struct inode
*dst_inode
,
1055 block_t
*blkaddr
, int *do_replace
,
1056 pgoff_t src
, pgoff_t dst
, pgoff_t len
, bool full
)
1058 struct f2fs_sb_info
*sbi
= F2FS_I_SB(src_inode
);
1063 if (blkaddr
[i
] == NULL_ADDR
&& !full
) {
1068 if (do_replace
[i
] || blkaddr
[i
] == NULL_ADDR
) {
1069 struct dnode_of_data dn
;
1070 struct node_info ni
;
1074 set_new_dnode(&dn
, dst_inode
, NULL
, NULL
, 0);
1075 ret
= f2fs_get_dnode_of_data(&dn
, dst
+ i
, ALLOC_NODE
);
1079 ret
= f2fs_get_node_info(sbi
, dn
.nid
, &ni
);
1081 f2fs_put_dnode(&dn
);
1085 ilen
= min((pgoff_t
)
1086 ADDRS_PER_PAGE(dn
.node_page
, dst_inode
) -
1087 dn
.ofs_in_node
, len
- i
);
1089 dn
.data_blkaddr
= datablock_addr(dn
.inode
,
1090 dn
.node_page
, dn
.ofs_in_node
);
1091 f2fs_truncate_data_blocks_range(&dn
, 1);
1093 if (do_replace
[i
]) {
1094 f2fs_i_blocks_write(src_inode
,
1096 f2fs_i_blocks_write(dst_inode
,
1098 f2fs_replace_block(sbi
, &dn
, dn
.data_blkaddr
,
1099 blkaddr
[i
], ni
.version
, true, false);
1105 new_size
= (dst
+ i
) << PAGE_SHIFT
;
1106 if (dst_inode
->i_size
< new_size
)
1107 f2fs_i_size_write(dst_inode
, new_size
);
1108 } while (--ilen
&& (do_replace
[i
] || blkaddr
[i
] == NULL_ADDR
));
1110 f2fs_put_dnode(&dn
);
1112 struct page
*psrc
, *pdst
;
1114 psrc
= f2fs_get_lock_data_page(src_inode
,
1117 return PTR_ERR(psrc
);
1118 pdst
= f2fs_get_new_data_page(dst_inode
, NULL
, dst
+ i
,
1121 f2fs_put_page(psrc
, 1);
1122 return PTR_ERR(pdst
);
1124 f2fs_copy_page(psrc
, pdst
);
1125 set_page_dirty(pdst
);
1126 f2fs_put_page(pdst
, 1);
1127 f2fs_put_page(psrc
, 1);
1129 ret
= f2fs_truncate_hole(src_inode
,
1130 src
+ i
, src
+ i
+ 1);
1139 static int __exchange_data_block(struct inode
*src_inode
,
1140 struct inode
*dst_inode
, pgoff_t src
, pgoff_t dst
,
1141 pgoff_t len
, bool full
)
1143 block_t
*src_blkaddr
;
1149 olen
= min((pgoff_t
)4 * ADDRS_PER_BLOCK
, len
);
1151 src_blkaddr
= f2fs_kvzalloc(F2FS_I_SB(src_inode
),
1152 array_size(olen
, sizeof(block_t
)),
1157 do_replace
= f2fs_kvzalloc(F2FS_I_SB(src_inode
),
1158 array_size(olen
, sizeof(int)),
1161 kvfree(src_blkaddr
);
1165 ret
= __read_out_blkaddrs(src_inode
, src_blkaddr
,
1166 do_replace
, src
, olen
);
1170 ret
= __clone_blkaddrs(src_inode
, dst_inode
, src_blkaddr
,
1171 do_replace
, src
, dst
, olen
, full
);
1179 kvfree(src_blkaddr
);
1185 __roll_back_blkaddrs(src_inode
, src_blkaddr
, do_replace
, src
, olen
);
1186 kvfree(src_blkaddr
);
1191 static int f2fs_do_collapse(struct inode
*inode
, loff_t offset
, loff_t len
)
1193 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
1194 pgoff_t nrpages
= (i_size_read(inode
) + PAGE_SIZE
- 1) / PAGE_SIZE
;
1195 pgoff_t start
= offset
>> PAGE_SHIFT
;
1196 pgoff_t end
= (offset
+ len
) >> PAGE_SHIFT
;
1199 f2fs_balance_fs(sbi
, true);
1201 /* avoid gc operation during block exchange */
1202 down_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
1203 down_write(&F2FS_I(inode
)->i_mmap_sem
);
1206 f2fs_drop_extent_tree(inode
);
1207 truncate_pagecache(inode
, offset
);
1208 ret
= __exchange_data_block(inode
, inode
, end
, start
, nrpages
- end
, true);
1209 f2fs_unlock_op(sbi
);
1211 up_write(&F2FS_I(inode
)->i_mmap_sem
);
1212 up_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
1216 static int f2fs_collapse_range(struct inode
*inode
, loff_t offset
, loff_t len
)
1221 if (offset
+ len
>= i_size_read(inode
))
1224 /* collapse range should be aligned to block size of f2fs. */
1225 if (offset
& (F2FS_BLKSIZE
- 1) || len
& (F2FS_BLKSIZE
- 1))
1228 ret
= f2fs_convert_inline_inode(inode
);
1232 /* write out all dirty pages from offset */
1233 ret
= filemap_write_and_wait_range(inode
->i_mapping
, offset
, LLONG_MAX
);
1237 ret
= f2fs_do_collapse(inode
, offset
, len
);
1241 /* write out all moved pages, if possible */
1242 down_write(&F2FS_I(inode
)->i_mmap_sem
);
1243 filemap_write_and_wait_range(inode
->i_mapping
, offset
, LLONG_MAX
);
1244 truncate_pagecache(inode
, offset
);
1246 new_size
= i_size_read(inode
) - len
;
1247 truncate_pagecache(inode
, new_size
);
1249 ret
= f2fs_truncate_blocks(inode
, new_size
, true);
1250 up_write(&F2FS_I(inode
)->i_mmap_sem
);
1252 f2fs_i_size_write(inode
, new_size
);
1256 static int f2fs_do_zero_range(struct dnode_of_data
*dn
, pgoff_t start
,
1259 struct f2fs_sb_info
*sbi
= F2FS_I_SB(dn
->inode
);
1260 pgoff_t index
= start
;
1261 unsigned int ofs_in_node
= dn
->ofs_in_node
;
1265 for (; index
< end
; index
++, dn
->ofs_in_node
++) {
1266 if (datablock_addr(dn
->inode
, dn
->node_page
,
1267 dn
->ofs_in_node
) == NULL_ADDR
)
1271 dn
->ofs_in_node
= ofs_in_node
;
1272 ret
= f2fs_reserve_new_blocks(dn
, count
);
1276 dn
->ofs_in_node
= ofs_in_node
;
1277 for (index
= start
; index
< end
; index
++, dn
->ofs_in_node
++) {
1278 dn
->data_blkaddr
= datablock_addr(dn
->inode
,
1279 dn
->node_page
, dn
->ofs_in_node
);
1281 * f2fs_reserve_new_blocks will not guarantee entire block
1284 if (dn
->data_blkaddr
== NULL_ADDR
) {
1288 if (dn
->data_blkaddr
!= NEW_ADDR
) {
1289 f2fs_invalidate_blocks(sbi
, dn
->data_blkaddr
);
1290 dn
->data_blkaddr
= NEW_ADDR
;
1291 f2fs_set_data_blkaddr(dn
);
1295 f2fs_update_extent_cache_range(dn
, start
, 0, index
- start
);
1300 static int f2fs_zero_range(struct inode
*inode
, loff_t offset
, loff_t len
,
1303 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
1304 struct address_space
*mapping
= inode
->i_mapping
;
1305 pgoff_t index
, pg_start
, pg_end
;
1306 loff_t new_size
= i_size_read(inode
);
1307 loff_t off_start
, off_end
;
1310 ret
= inode_newsize_ok(inode
, (len
+ offset
));
1314 ret
= f2fs_convert_inline_inode(inode
);
1318 ret
= filemap_write_and_wait_range(mapping
, offset
, offset
+ len
- 1);
1322 pg_start
= ((unsigned long long) offset
) >> PAGE_SHIFT
;
1323 pg_end
= ((unsigned long long) offset
+ len
) >> PAGE_SHIFT
;
1325 off_start
= offset
& (PAGE_SIZE
- 1);
1326 off_end
= (offset
+ len
) & (PAGE_SIZE
- 1);
1328 if (pg_start
== pg_end
) {
1329 ret
= fill_zero(inode
, pg_start
, off_start
,
1330 off_end
- off_start
);
1334 new_size
= max_t(loff_t
, new_size
, offset
+ len
);
1337 ret
= fill_zero(inode
, pg_start
++, off_start
,
1338 PAGE_SIZE
- off_start
);
1342 new_size
= max_t(loff_t
, new_size
,
1343 (loff_t
)pg_start
<< PAGE_SHIFT
);
1346 for (index
= pg_start
; index
< pg_end
;) {
1347 struct dnode_of_data dn
;
1348 unsigned int end_offset
;
1351 down_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
1352 down_write(&F2FS_I(inode
)->i_mmap_sem
);
1354 truncate_pagecache_range(inode
,
1355 (loff_t
)index
<< PAGE_SHIFT
,
1356 ((loff_t
)pg_end
<< PAGE_SHIFT
) - 1);
1360 set_new_dnode(&dn
, inode
, NULL
, NULL
, 0);
1361 ret
= f2fs_get_dnode_of_data(&dn
, index
, ALLOC_NODE
);
1363 f2fs_unlock_op(sbi
);
1364 up_write(&F2FS_I(inode
)->i_mmap_sem
);
1365 up_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
1369 end_offset
= ADDRS_PER_PAGE(dn
.node_page
, inode
);
1370 end
= min(pg_end
, end_offset
- dn
.ofs_in_node
+ index
);
1372 ret
= f2fs_do_zero_range(&dn
, index
, end
);
1373 f2fs_put_dnode(&dn
);
1375 f2fs_unlock_op(sbi
);
1376 up_write(&F2FS_I(inode
)->i_mmap_sem
);
1377 up_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
1379 f2fs_balance_fs(sbi
, dn
.node_changed
);
1385 new_size
= max_t(loff_t
, new_size
,
1386 (loff_t
)index
<< PAGE_SHIFT
);
1390 ret
= fill_zero(inode
, pg_end
, 0, off_end
);
1394 new_size
= max_t(loff_t
, new_size
, offset
+ len
);
1399 if (new_size
> i_size_read(inode
)) {
1400 if (mode
& FALLOC_FL_KEEP_SIZE
)
1401 file_set_keep_isize(inode
);
1403 f2fs_i_size_write(inode
, new_size
);
1408 static int f2fs_insert_range(struct inode
*inode
, loff_t offset
, loff_t len
)
1410 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
1411 pgoff_t nr
, pg_start
, pg_end
, delta
, idx
;
1415 new_size
= i_size_read(inode
) + len
;
1416 ret
= inode_newsize_ok(inode
, new_size
);
1420 if (offset
>= i_size_read(inode
))
1423 /* insert range should be aligned to block size of f2fs. */
1424 if (offset
& (F2FS_BLKSIZE
- 1) || len
& (F2FS_BLKSIZE
- 1))
1427 ret
= f2fs_convert_inline_inode(inode
);
1431 f2fs_balance_fs(sbi
, true);
1433 down_write(&F2FS_I(inode
)->i_mmap_sem
);
1434 ret
= f2fs_truncate_blocks(inode
, i_size_read(inode
), true);
1435 up_write(&F2FS_I(inode
)->i_mmap_sem
);
1439 /* write out all dirty pages from offset */
1440 ret
= filemap_write_and_wait_range(inode
->i_mapping
, offset
, LLONG_MAX
);
1444 pg_start
= offset
>> PAGE_SHIFT
;
1445 pg_end
= (offset
+ len
) >> PAGE_SHIFT
;
1446 delta
= pg_end
- pg_start
;
1447 idx
= (i_size_read(inode
) + PAGE_SIZE
- 1) / PAGE_SIZE
;
1449 /* avoid gc operation during block exchange */
1450 down_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
1451 down_write(&F2FS_I(inode
)->i_mmap_sem
);
1452 truncate_pagecache(inode
, offset
);
1454 while (!ret
&& idx
> pg_start
) {
1455 nr
= idx
- pg_start
;
1461 f2fs_drop_extent_tree(inode
);
1463 ret
= __exchange_data_block(inode
, inode
, idx
,
1464 idx
+ delta
, nr
, false);
1465 f2fs_unlock_op(sbi
);
1467 up_write(&F2FS_I(inode
)->i_mmap_sem
);
1468 up_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
1470 /* write out all moved pages, if possible */
1471 down_write(&F2FS_I(inode
)->i_mmap_sem
);
1472 filemap_write_and_wait_range(inode
->i_mapping
, offset
, LLONG_MAX
);
1473 truncate_pagecache(inode
, offset
);
1474 up_write(&F2FS_I(inode
)->i_mmap_sem
);
1477 f2fs_i_size_write(inode
, new_size
);
1481 static int expand_inode_data(struct inode
*inode
, loff_t offset
,
1482 loff_t len
, int mode
)
1484 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
1485 struct f2fs_map_blocks map
= { .m_next_pgofs
= NULL
,
1486 .m_next_extent
= NULL
, .m_seg_type
= NO_CHECK_TYPE
};
1488 loff_t new_size
= i_size_read(inode
);
1492 err
= inode_newsize_ok(inode
, (len
+ offset
));
1496 err
= f2fs_convert_inline_inode(inode
);
1500 f2fs_balance_fs(sbi
, true);
1502 pg_end
= ((unsigned long long)offset
+ len
) >> PAGE_SHIFT
;
1503 off_end
= (offset
+ len
) & (PAGE_SIZE
- 1);
1505 map
.m_lblk
= ((unsigned long long)offset
) >> PAGE_SHIFT
;
1506 map
.m_len
= pg_end
- map
.m_lblk
;
1510 err
= f2fs_map_blocks(inode
, &map
, 1, F2FS_GET_BLOCK_PRE_AIO
);
1517 last_off
= map
.m_lblk
+ map
.m_len
- 1;
1519 /* update new size to the failed position */
1520 new_size
= (last_off
== pg_end
) ? offset
+ len
:
1521 (loff_t
)(last_off
+ 1) << PAGE_SHIFT
;
1523 new_size
= ((loff_t
)pg_end
<< PAGE_SHIFT
) + off_end
;
1526 if (new_size
> i_size_read(inode
)) {
1527 if (mode
& FALLOC_FL_KEEP_SIZE
)
1528 file_set_keep_isize(inode
);
1530 f2fs_i_size_write(inode
, new_size
);
1536 static long f2fs_fallocate(struct file
*file
, int mode
,
1537 loff_t offset
, loff_t len
)
1539 struct inode
*inode
= file_inode(file
);
1542 if (unlikely(f2fs_cp_error(F2FS_I_SB(inode
))))
1545 /* f2fs only support ->fallocate for regular file */
1546 if (!S_ISREG(inode
->i_mode
))
1549 if (f2fs_encrypted_inode(inode
) &&
1550 (mode
& (FALLOC_FL_COLLAPSE_RANGE
| FALLOC_FL_INSERT_RANGE
)))
1553 if (mode
& ~(FALLOC_FL_KEEP_SIZE
| FALLOC_FL_PUNCH_HOLE
|
1554 FALLOC_FL_COLLAPSE_RANGE
| FALLOC_FL_ZERO_RANGE
|
1555 FALLOC_FL_INSERT_RANGE
))
1560 if (mode
& FALLOC_FL_PUNCH_HOLE
) {
1561 if (offset
>= inode
->i_size
)
1564 ret
= punch_hole(inode
, offset
, len
);
1565 } else if (mode
& FALLOC_FL_COLLAPSE_RANGE
) {
1566 ret
= f2fs_collapse_range(inode
, offset
, len
);
1567 } else if (mode
& FALLOC_FL_ZERO_RANGE
) {
1568 ret
= f2fs_zero_range(inode
, offset
, len
, mode
);
1569 } else if (mode
& FALLOC_FL_INSERT_RANGE
) {
1570 ret
= f2fs_insert_range(inode
, offset
, len
);
1572 ret
= expand_inode_data(inode
, offset
, len
, mode
);
1576 inode
->i_mtime
= inode
->i_ctime
= current_time(inode
);
1577 f2fs_mark_inode_dirty_sync(inode
, false);
1578 f2fs_update_time(F2FS_I_SB(inode
), REQ_TIME
);
1582 inode_unlock(inode
);
1584 trace_f2fs_fallocate(inode
, mode
, offset
, len
, ret
);
1588 static int f2fs_release_file(struct inode
*inode
, struct file
*filp
)
1591 * f2fs_relase_file is called at every close calls. So we should
1592 * not drop any inmemory pages by close called by other process.
1594 if (!(filp
->f_mode
& FMODE_WRITE
) ||
1595 atomic_read(&inode
->i_writecount
) != 1)
1598 /* some remained atomic pages should discarded */
1599 if (f2fs_is_atomic_file(inode
))
1600 f2fs_drop_inmem_pages(inode
);
1601 if (f2fs_is_volatile_file(inode
)) {
1602 set_inode_flag(inode
, FI_DROP_CACHE
);
1603 filemap_fdatawrite(inode
->i_mapping
);
1604 clear_inode_flag(inode
, FI_DROP_CACHE
);
1605 clear_inode_flag(inode
, FI_VOLATILE_FILE
);
1606 stat_dec_volatile_write(inode
);
1611 static int f2fs_file_flush(struct file
*file
, fl_owner_t id
)
1613 struct inode
*inode
= file_inode(file
);
1616 * If the process doing a transaction is crashed, we should do
1617 * roll-back. Otherwise, other reader/write can see corrupted database
1618 * until all the writers close its file. Since this should be done
1619 * before dropping file lock, it needs to do in ->flush.
1621 if (f2fs_is_atomic_file(inode
) &&
1622 F2FS_I(inode
)->inmem_task
== current
)
1623 f2fs_drop_inmem_pages(inode
);
1627 static int f2fs_ioc_getflags(struct file
*filp
, unsigned long arg
)
1629 struct inode
*inode
= file_inode(filp
);
1630 struct f2fs_inode_info
*fi
= F2FS_I(inode
);
1631 unsigned int flags
= fi
->i_flags
;
1633 if (f2fs_encrypted_inode(inode
))
1634 flags
|= F2FS_ENCRYPT_FL
;
1635 if (f2fs_has_inline_data(inode
) || f2fs_has_inline_dentry(inode
))
1636 flags
|= F2FS_INLINE_DATA_FL
;
1638 flags
&= F2FS_FL_USER_VISIBLE
;
1640 return put_user(flags
, (int __user
*)arg
);
1643 static int __f2fs_ioc_setflags(struct inode
*inode
, unsigned int flags
)
1645 struct f2fs_inode_info
*fi
= F2FS_I(inode
);
1646 unsigned int oldflags
;
1648 /* Is it quota file? Do not allow user to mess with it */
1649 if (IS_NOQUOTA(inode
))
1652 flags
= f2fs_mask_flags(inode
->i_mode
, flags
);
1654 oldflags
= fi
->i_flags
;
1656 if ((flags
^ oldflags
) & (F2FS_APPEND_FL
| F2FS_IMMUTABLE_FL
))
1657 if (!capable(CAP_LINUX_IMMUTABLE
))
1660 flags
= flags
& F2FS_FL_USER_MODIFIABLE
;
1661 flags
|= oldflags
& ~F2FS_FL_USER_MODIFIABLE
;
1662 fi
->i_flags
= flags
;
1664 if (fi
->i_flags
& F2FS_PROJINHERIT_FL
)
1665 set_inode_flag(inode
, FI_PROJ_INHERIT
);
1667 clear_inode_flag(inode
, FI_PROJ_INHERIT
);
1669 inode
->i_ctime
= current_time(inode
);
1670 f2fs_set_inode_flags(inode
);
1671 f2fs_mark_inode_dirty_sync(inode
, false);
1675 static int f2fs_ioc_setflags(struct file
*filp
, unsigned long arg
)
1677 struct inode
*inode
= file_inode(filp
);
1681 if (!inode_owner_or_capable(inode
))
1684 if (get_user(flags
, (int __user
*)arg
))
1687 ret
= mnt_want_write_file(filp
);
1693 ret
= __f2fs_ioc_setflags(inode
, flags
);
1695 inode_unlock(inode
);
1696 mnt_drop_write_file(filp
);
1700 static int f2fs_ioc_getversion(struct file
*filp
, unsigned long arg
)
1702 struct inode
*inode
= file_inode(filp
);
1704 return put_user(inode
->i_generation
, (int __user
*)arg
);
1707 static int f2fs_ioc_start_atomic_write(struct file
*filp
)
1709 struct inode
*inode
= file_inode(filp
);
1712 if (!inode_owner_or_capable(inode
))
1715 if (!S_ISREG(inode
->i_mode
))
1718 ret
= mnt_want_write_file(filp
);
1724 if (f2fs_is_atomic_file(inode
)) {
1725 if (is_inode_flag_set(inode
, FI_ATOMIC_REVOKE_REQUEST
))
1730 ret
= f2fs_convert_inline_inode(inode
);
1734 down_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
1736 if (!get_dirty_pages(inode
))
1739 f2fs_msg(F2FS_I_SB(inode
)->sb
, KERN_WARNING
,
1740 "Unexpected flush for atomic writes: ino=%lu, npages=%u",
1741 inode
->i_ino
, get_dirty_pages(inode
));
1742 ret
= filemap_write_and_wait_range(inode
->i_mapping
, 0, LLONG_MAX
);
1744 up_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
1748 set_inode_flag(inode
, FI_ATOMIC_FILE
);
1749 clear_inode_flag(inode
, FI_ATOMIC_REVOKE_REQUEST
);
1750 up_write(&F2FS_I(inode
)->i_gc_rwsem
[WRITE
]);
1752 f2fs_update_time(F2FS_I_SB(inode
), REQ_TIME
);
1753 F2FS_I(inode
)->inmem_task
= current
;
1754 stat_inc_atomic_write(inode
);
1755 stat_update_max_atomic_write(inode
);
1757 inode_unlock(inode
);
1758 mnt_drop_write_file(filp
);
1762 static int f2fs_ioc_commit_atomic_write(struct file
*filp
)
1764 struct inode
*inode
= file_inode(filp
);
1767 if (!inode_owner_or_capable(inode
))
1770 ret
= mnt_want_write_file(filp
);
1774 f2fs_balance_fs(F2FS_I_SB(inode
), true);
1778 if (f2fs_is_volatile_file(inode
)) {
1783 if (f2fs_is_atomic_file(inode
)) {
1784 ret
= f2fs_commit_inmem_pages(inode
);
1788 ret
= f2fs_do_sync_file(filp
, 0, LLONG_MAX
, 0, true);
1790 clear_inode_flag(inode
, FI_ATOMIC_FILE
);
1791 F2FS_I(inode
)->i_gc_failures
[GC_FAILURE_ATOMIC
] = 0;
1792 stat_dec_atomic_write(inode
);
1795 ret
= f2fs_do_sync_file(filp
, 0, LLONG_MAX
, 1, false);
1798 if (is_inode_flag_set(inode
, FI_ATOMIC_REVOKE_REQUEST
)) {
1799 clear_inode_flag(inode
, FI_ATOMIC_REVOKE_REQUEST
);
1802 inode_unlock(inode
);
1803 mnt_drop_write_file(filp
);
1807 static int f2fs_ioc_start_volatile_write(struct file
*filp
)
1809 struct inode
*inode
= file_inode(filp
);
1812 if (!inode_owner_or_capable(inode
))
1815 if (!S_ISREG(inode
->i_mode
))
1818 ret
= mnt_want_write_file(filp
);
1824 if (f2fs_is_volatile_file(inode
))
1827 ret
= f2fs_convert_inline_inode(inode
);
1831 stat_inc_volatile_write(inode
);
1832 stat_update_max_volatile_write(inode
);
1834 set_inode_flag(inode
, FI_VOLATILE_FILE
);
1835 f2fs_update_time(F2FS_I_SB(inode
), REQ_TIME
);
1837 inode_unlock(inode
);
1838 mnt_drop_write_file(filp
);
1842 static int f2fs_ioc_release_volatile_write(struct file
*filp
)
1844 struct inode
*inode
= file_inode(filp
);
1847 if (!inode_owner_or_capable(inode
))
1850 ret
= mnt_want_write_file(filp
);
1856 if (!f2fs_is_volatile_file(inode
))
1859 if (!f2fs_is_first_block_written(inode
)) {
1860 ret
= truncate_partial_data_page(inode
, 0, true);
1864 ret
= punch_hole(inode
, 0, F2FS_BLKSIZE
);
1866 inode_unlock(inode
);
1867 mnt_drop_write_file(filp
);
1871 static int f2fs_ioc_abort_volatile_write(struct file
*filp
)
1873 struct inode
*inode
= file_inode(filp
);
1876 if (!inode_owner_or_capable(inode
))
1879 ret
= mnt_want_write_file(filp
);
1885 if (f2fs_is_atomic_file(inode
))
1886 f2fs_drop_inmem_pages(inode
);
1887 if (f2fs_is_volatile_file(inode
)) {
1888 clear_inode_flag(inode
, FI_VOLATILE_FILE
);
1889 stat_dec_volatile_write(inode
);
1890 ret
= f2fs_do_sync_file(filp
, 0, LLONG_MAX
, 0, true);
1893 clear_inode_flag(inode
, FI_ATOMIC_REVOKE_REQUEST
);
1895 inode_unlock(inode
);
1897 mnt_drop_write_file(filp
);
1898 f2fs_update_time(F2FS_I_SB(inode
), REQ_TIME
);
1902 static int f2fs_ioc_shutdown(struct file
*filp
, unsigned long arg
)
1904 struct inode
*inode
= file_inode(filp
);
1905 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
1906 struct super_block
*sb
= sbi
->sb
;
1910 if (!capable(CAP_SYS_ADMIN
))
1913 if (get_user(in
, (__u32 __user
*)arg
))
1916 if (in
!= F2FS_GOING_DOWN_FULLSYNC
) {
1917 ret
= mnt_want_write_file(filp
);
1923 case F2FS_GOING_DOWN_FULLSYNC
:
1924 sb
= freeze_bdev(sb
->s_bdev
);
1930 f2fs_stop_checkpoint(sbi
, false);
1931 set_sbi_flag(sbi
, SBI_IS_SHUTDOWN
);
1932 thaw_bdev(sb
->s_bdev
, sb
);
1935 case F2FS_GOING_DOWN_METASYNC
:
1936 /* do checkpoint only */
1937 ret
= f2fs_sync_fs(sb
, 1);
1940 f2fs_stop_checkpoint(sbi
, false);
1941 set_sbi_flag(sbi
, SBI_IS_SHUTDOWN
);
1943 case F2FS_GOING_DOWN_NOSYNC
:
1944 f2fs_stop_checkpoint(sbi
, false);
1945 set_sbi_flag(sbi
, SBI_IS_SHUTDOWN
);
1947 case F2FS_GOING_DOWN_METAFLUSH
:
1948 f2fs_sync_meta_pages(sbi
, META
, LONG_MAX
, FS_META_IO
);
1949 f2fs_stop_checkpoint(sbi
, false);
1950 set_sbi_flag(sbi
, SBI_IS_SHUTDOWN
);
1957 f2fs_stop_gc_thread(sbi
);
1958 f2fs_stop_discard_thread(sbi
);
1960 f2fs_drop_discard_cmd(sbi
);
1961 clear_opt(sbi
, DISCARD
);
1963 f2fs_update_time(sbi
, REQ_TIME
);
1965 if (in
!= F2FS_GOING_DOWN_FULLSYNC
)
1966 mnt_drop_write_file(filp
);
1970 static int f2fs_ioc_fitrim(struct file
*filp
, unsigned long arg
)
1972 struct inode
*inode
= file_inode(filp
);
1973 struct super_block
*sb
= inode
->i_sb
;
1974 struct request_queue
*q
= bdev_get_queue(sb
->s_bdev
);
1975 struct fstrim_range range
;
1978 if (!capable(CAP_SYS_ADMIN
))
1981 if (!blk_queue_discard(q
))
1984 if (copy_from_user(&range
, (struct fstrim_range __user
*)arg
,
1988 ret
= mnt_want_write_file(filp
);
1992 range
.minlen
= max((unsigned int)range
.minlen
,
1993 q
->limits
.discard_granularity
);
1994 ret
= f2fs_trim_fs(F2FS_SB(sb
), &range
);
1995 mnt_drop_write_file(filp
);
1999 if (copy_to_user((struct fstrim_range __user
*)arg
, &range
,
2002 f2fs_update_time(F2FS_I_SB(inode
), REQ_TIME
);
2006 static bool uuid_is_nonzero(__u8 u
[16])
2010 for (i
= 0; i
< 16; i
++)
2016 static int f2fs_ioc_set_encryption_policy(struct file
*filp
, unsigned long arg
)
2018 struct inode
*inode
= file_inode(filp
);
2020 if (!f2fs_sb_has_encrypt(inode
->i_sb
))
2023 f2fs_update_time(F2FS_I_SB(inode
), REQ_TIME
);
2025 return fscrypt_ioctl_set_policy(filp
, (const void __user
*)arg
);
2028 static int f2fs_ioc_get_encryption_policy(struct file
*filp
, unsigned long arg
)
2030 if (!f2fs_sb_has_encrypt(file_inode(filp
)->i_sb
))
2032 return fscrypt_ioctl_get_policy(filp
, (void __user
*)arg
);
2035 static int f2fs_ioc_get_encryption_pwsalt(struct file
*filp
, unsigned long arg
)
2037 struct inode
*inode
= file_inode(filp
);
2038 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
2041 if (!f2fs_sb_has_encrypt(inode
->i_sb
))
2044 err
= mnt_want_write_file(filp
);
2048 down_write(&sbi
->sb_lock
);
2050 if (uuid_is_nonzero(sbi
->raw_super
->encrypt_pw_salt
))
2053 /* update superblock with uuid */
2054 generate_random_uuid(sbi
->raw_super
->encrypt_pw_salt
);
2056 err
= f2fs_commit_super(sbi
, false);
2059 memset(sbi
->raw_super
->encrypt_pw_salt
, 0, 16);
2063 if (copy_to_user((__u8 __user
*)arg
, sbi
->raw_super
->encrypt_pw_salt
,
2067 up_write(&sbi
->sb_lock
);
2068 mnt_drop_write_file(filp
);
2072 static int f2fs_ioc_gc(struct file
*filp
, unsigned long arg
)
2074 struct inode
*inode
= file_inode(filp
);
2075 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
2079 if (!capable(CAP_SYS_ADMIN
))
2082 if (get_user(sync
, (__u32 __user
*)arg
))
2085 if (f2fs_readonly(sbi
->sb
))
2088 ret
= mnt_want_write_file(filp
);
2093 if (!mutex_trylock(&sbi
->gc_mutex
)) {
2098 mutex_lock(&sbi
->gc_mutex
);
2101 ret
= f2fs_gc(sbi
, sync
, true, NULL_SEGNO
);
2103 mnt_drop_write_file(filp
);
2107 static int f2fs_ioc_gc_range(struct file
*filp
, unsigned long arg
)
2109 struct inode
*inode
= file_inode(filp
);
2110 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
2111 struct f2fs_gc_range range
;
2115 if (!capable(CAP_SYS_ADMIN
))
2118 if (copy_from_user(&range
, (struct f2fs_gc_range __user
*)arg
,
2122 if (f2fs_readonly(sbi
->sb
))
2125 end
= range
.start
+ range
.len
;
2126 if (range
.start
< MAIN_BLKADDR(sbi
) || end
>= MAX_BLKADDR(sbi
)) {
2130 ret
= mnt_want_write_file(filp
);
2136 if (!mutex_trylock(&sbi
->gc_mutex
)) {
2141 mutex_lock(&sbi
->gc_mutex
);
2144 ret
= f2fs_gc(sbi
, range
.sync
, true, GET_SEGNO(sbi
, range
.start
));
2145 range
.start
+= sbi
->blocks_per_seg
;
2146 if (range
.start
<= end
)
2149 mnt_drop_write_file(filp
);
2153 static int f2fs_ioc_write_checkpoint(struct file
*filp
, unsigned long arg
)
2155 struct inode
*inode
= file_inode(filp
);
2156 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
2159 if (!capable(CAP_SYS_ADMIN
))
2162 if (f2fs_readonly(sbi
->sb
))
2165 ret
= mnt_want_write_file(filp
);
2169 ret
= f2fs_sync_fs(sbi
->sb
, 1);
2171 mnt_drop_write_file(filp
);
2175 static int f2fs_defragment_range(struct f2fs_sb_info
*sbi
,
2177 struct f2fs_defragment
*range
)
2179 struct inode
*inode
= file_inode(filp
);
2180 struct f2fs_map_blocks map
= { .m_next_extent
= NULL
,
2181 .m_seg_type
= NO_CHECK_TYPE
};
2182 struct extent_info ei
= {0, 0, 0};
2183 pgoff_t pg_start
, pg_end
, next_pgofs
;
2184 unsigned int blk_per_seg
= sbi
->blocks_per_seg
;
2185 unsigned int total
= 0, sec_num
;
2186 block_t blk_end
= 0;
2187 bool fragmented
= false;
2190 /* if in-place-update policy is enabled, don't waste time here */
2191 if (f2fs_should_update_inplace(inode
, NULL
))
2194 pg_start
= range
->start
>> PAGE_SHIFT
;
2195 pg_end
= (range
->start
+ range
->len
) >> PAGE_SHIFT
;
2197 f2fs_balance_fs(sbi
, true);
2201 /* writeback all dirty pages in the range */
2202 err
= filemap_write_and_wait_range(inode
->i_mapping
, range
->start
,
2203 range
->start
+ range
->len
- 1);
2208 * lookup mapping info in extent cache, skip defragmenting if physical
2209 * block addresses are continuous.
2211 if (f2fs_lookup_extent_cache(inode
, pg_start
, &ei
)) {
2212 if (ei
.fofs
+ ei
.len
>= pg_end
)
2216 map
.m_lblk
= pg_start
;
2217 map
.m_next_pgofs
= &next_pgofs
;
2220 * lookup mapping info in dnode page cache, skip defragmenting if all
2221 * physical block addresses are continuous even if there are hole(s)
2222 * in logical blocks.
2224 while (map
.m_lblk
< pg_end
) {
2225 map
.m_len
= pg_end
- map
.m_lblk
;
2226 err
= f2fs_map_blocks(inode
, &map
, 0, F2FS_GET_BLOCK_DEFAULT
);
2230 if (!(map
.m_flags
& F2FS_MAP_FLAGS
)) {
2231 map
.m_lblk
= next_pgofs
;
2235 if (blk_end
&& blk_end
!= map
.m_pblk
)
2238 /* record total count of block that we're going to move */
2241 blk_end
= map
.m_pblk
+ map
.m_len
;
2243 map
.m_lblk
+= map
.m_len
;
2249 sec_num
= (total
+ BLKS_PER_SEC(sbi
) - 1) / BLKS_PER_SEC(sbi
);
2252 * make sure there are enough free section for LFS allocation, this can
2253 * avoid defragment running in SSR mode when free section are allocated
2256 if (has_not_enough_free_secs(sbi
, 0, sec_num
)) {
2261 map
.m_lblk
= pg_start
;
2262 map
.m_len
= pg_end
- pg_start
;
2265 while (map
.m_lblk
< pg_end
) {
2270 map
.m_len
= pg_end
- map
.m_lblk
;
2271 err
= f2fs_map_blocks(inode
, &map
, 0, F2FS_GET_BLOCK_DEFAULT
);
2275 if (!(map
.m_flags
& F2FS_MAP_FLAGS
)) {
2276 map
.m_lblk
= next_pgofs
;
2280 set_inode_flag(inode
, FI_DO_DEFRAG
);
2283 while (idx
< map
.m_lblk
+ map
.m_len
&& cnt
< blk_per_seg
) {
2286 page
= f2fs_get_lock_data_page(inode
, idx
, true);
2288 err
= PTR_ERR(page
);
2292 set_page_dirty(page
);
2293 f2fs_put_page(page
, 1);
2302 if (idx
< pg_end
&& cnt
< blk_per_seg
)
2305 clear_inode_flag(inode
, FI_DO_DEFRAG
);
2307 err
= filemap_fdatawrite(inode
->i_mapping
);
2312 clear_inode_flag(inode
, FI_DO_DEFRAG
);
2314 inode_unlock(inode
);
2316 range
->len
= (u64
)total
<< PAGE_SHIFT
;
2320 static int f2fs_ioc_defragment(struct file
*filp
, unsigned long arg
)
2322 struct inode
*inode
= file_inode(filp
);
2323 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
2324 struct f2fs_defragment range
;
2327 if (!capable(CAP_SYS_ADMIN
))
2330 if (!S_ISREG(inode
->i_mode
) || f2fs_is_atomic_file(inode
))
2333 if (f2fs_readonly(sbi
->sb
))
2336 if (copy_from_user(&range
, (struct f2fs_defragment __user
*)arg
,
2340 /* verify alignment of offset & size */
2341 if (range
.start
& (F2FS_BLKSIZE
- 1) || range
.len
& (F2FS_BLKSIZE
- 1))
2344 if (unlikely((range
.start
+ range
.len
) >> PAGE_SHIFT
>
2345 sbi
->max_file_blocks
))
2348 err
= mnt_want_write_file(filp
);
2352 err
= f2fs_defragment_range(sbi
, filp
, &range
);
2353 mnt_drop_write_file(filp
);
2355 f2fs_update_time(sbi
, REQ_TIME
);
2359 if (copy_to_user((struct f2fs_defragment __user
*)arg
, &range
,
2366 static int f2fs_move_file_range(struct file
*file_in
, loff_t pos_in
,
2367 struct file
*file_out
, loff_t pos_out
, size_t len
)
2369 struct inode
*src
= file_inode(file_in
);
2370 struct inode
*dst
= file_inode(file_out
);
2371 struct f2fs_sb_info
*sbi
= F2FS_I_SB(src
);
2372 size_t olen
= len
, dst_max_i_size
= 0;
2376 if (file_in
->f_path
.mnt
!= file_out
->f_path
.mnt
||
2377 src
->i_sb
!= dst
->i_sb
)
2380 if (unlikely(f2fs_readonly(src
->i_sb
)))
2383 if (!S_ISREG(src
->i_mode
) || !S_ISREG(dst
->i_mode
))
2386 if (f2fs_encrypted_inode(src
) || f2fs_encrypted_inode(dst
))
2390 if (pos_in
== pos_out
)
2392 if (pos_out
> pos_in
&& pos_out
< pos_in
+ len
)
2399 if (!inode_trylock(dst
))
2404 if (pos_in
+ len
> src
->i_size
|| pos_in
+ len
< pos_in
)
2407 olen
= len
= src
->i_size
- pos_in
;
2408 if (pos_in
+ len
== src
->i_size
)
2409 len
= ALIGN(src
->i_size
, F2FS_BLKSIZE
) - pos_in
;
2415 dst_osize
= dst
->i_size
;
2416 if (pos_out
+ olen
> dst
->i_size
)
2417 dst_max_i_size
= pos_out
+ olen
;
2419 /* verify the end result is block aligned */
2420 if (!IS_ALIGNED(pos_in
, F2FS_BLKSIZE
) ||
2421 !IS_ALIGNED(pos_in
+ len
, F2FS_BLKSIZE
) ||
2422 !IS_ALIGNED(pos_out
, F2FS_BLKSIZE
))
2425 ret
= f2fs_convert_inline_inode(src
);
2429 ret
= f2fs_convert_inline_inode(dst
);
2433 /* write out all dirty pages from offset */
2434 ret
= filemap_write_and_wait_range(src
->i_mapping
,
2435 pos_in
, pos_in
+ len
);
2439 ret
= filemap_write_and_wait_range(dst
->i_mapping
,
2440 pos_out
, pos_out
+ len
);
2444 f2fs_balance_fs(sbi
, true);
2446 down_write(&F2FS_I(src
)->i_gc_rwsem
[WRITE
]);
2449 if (!down_write_trylock(&F2FS_I(dst
)->i_gc_rwsem
[WRITE
]))
2454 ret
= __exchange_data_block(src
, dst
, pos_in
>> F2FS_BLKSIZE_BITS
,
2455 pos_out
>> F2FS_BLKSIZE_BITS
,
2456 len
>> F2FS_BLKSIZE_BITS
, false);
2460 f2fs_i_size_write(dst
, dst_max_i_size
);
2461 else if (dst_osize
!= dst
->i_size
)
2462 f2fs_i_size_write(dst
, dst_osize
);
2464 f2fs_unlock_op(sbi
);
2467 up_write(&F2FS_I(dst
)->i_gc_rwsem
[WRITE
]);
2469 up_write(&F2FS_I(src
)->i_gc_rwsem
[WRITE
]);
2478 static int f2fs_ioc_move_range(struct file
*filp
, unsigned long arg
)
2480 struct f2fs_move_range range
;
2484 if (!(filp
->f_mode
& FMODE_READ
) ||
2485 !(filp
->f_mode
& FMODE_WRITE
))
2488 if (copy_from_user(&range
, (struct f2fs_move_range __user
*)arg
,
2492 dst
= fdget(range
.dst_fd
);
2496 if (!(dst
.file
->f_mode
& FMODE_WRITE
)) {
2501 err
= mnt_want_write_file(filp
);
2505 err
= f2fs_move_file_range(filp
, range
.pos_in
, dst
.file
,
2506 range
.pos_out
, range
.len
);
2508 mnt_drop_write_file(filp
);
2512 if (copy_to_user((struct f2fs_move_range __user
*)arg
,
2513 &range
, sizeof(range
)))
2520 static int f2fs_ioc_flush_device(struct file
*filp
, unsigned long arg
)
2522 struct inode
*inode
= file_inode(filp
);
2523 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
2524 struct sit_info
*sm
= SIT_I(sbi
);
2525 unsigned int start_segno
= 0, end_segno
= 0;
2526 unsigned int dev_start_segno
= 0, dev_end_segno
= 0;
2527 struct f2fs_flush_device range
;
2530 if (!capable(CAP_SYS_ADMIN
))
2533 if (f2fs_readonly(sbi
->sb
))
2536 if (copy_from_user(&range
, (struct f2fs_flush_device __user
*)arg
,
2540 if (sbi
->s_ndevs
<= 1 || sbi
->s_ndevs
- 1 <= range
.dev_num
||
2541 sbi
->segs_per_sec
!= 1) {
2542 f2fs_msg(sbi
->sb
, KERN_WARNING
,
2543 "Can't flush %u in %d for segs_per_sec %u != 1\n",
2544 range
.dev_num
, sbi
->s_ndevs
,
2549 ret
= mnt_want_write_file(filp
);
2553 if (range
.dev_num
!= 0)
2554 dev_start_segno
= GET_SEGNO(sbi
, FDEV(range
.dev_num
).start_blk
);
2555 dev_end_segno
= GET_SEGNO(sbi
, FDEV(range
.dev_num
).end_blk
);
2557 start_segno
= sm
->last_victim
[FLUSH_DEVICE
];
2558 if (start_segno
< dev_start_segno
|| start_segno
>= dev_end_segno
)
2559 start_segno
= dev_start_segno
;
2560 end_segno
= min(start_segno
+ range
.segments
, dev_end_segno
);
2562 while (start_segno
< end_segno
) {
2563 if (!mutex_trylock(&sbi
->gc_mutex
)) {
2567 sm
->last_victim
[GC_CB
] = end_segno
+ 1;
2568 sm
->last_victim
[GC_GREEDY
] = end_segno
+ 1;
2569 sm
->last_victim
[ALLOC_NEXT
] = end_segno
+ 1;
2570 ret
= f2fs_gc(sbi
, true, true, start_segno
);
2578 mnt_drop_write_file(filp
);
2582 static int f2fs_ioc_get_features(struct file
*filp
, unsigned long arg
)
2584 struct inode
*inode
= file_inode(filp
);
2585 u32 sb_feature
= le32_to_cpu(F2FS_I_SB(inode
)->raw_super
->feature
);
2587 /* Must validate to set it with SQLite behavior in Android. */
2588 sb_feature
|= F2FS_FEATURE_ATOMIC_WRITE
;
2590 return put_user(sb_feature
, (u32 __user
*)arg
);
2594 static int f2fs_ioc_setproject(struct file
*filp
, __u32 projid
)
2596 struct inode
*inode
= file_inode(filp
);
2597 struct f2fs_inode_info
*fi
= F2FS_I(inode
);
2598 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
2599 struct super_block
*sb
= sbi
->sb
;
2600 struct dquot
*transfer_to
[MAXQUOTAS
] = {};
2605 if (!f2fs_sb_has_project_quota(sb
)) {
2606 if (projid
!= F2FS_DEF_PROJID
)
2612 if (!f2fs_has_extra_attr(inode
))
2615 kprojid
= make_kprojid(&init_user_ns
, (projid_t
)projid
);
2617 if (projid_eq(kprojid
, F2FS_I(inode
)->i_projid
))
2620 err
= mnt_want_write_file(filp
);
2627 /* Is it quota file? Do not allow user to mess with it */
2628 if (IS_NOQUOTA(inode
))
2631 ipage
= f2fs_get_node_page(sbi
, inode
->i_ino
);
2632 if (IS_ERR(ipage
)) {
2633 err
= PTR_ERR(ipage
);
2637 if (!F2FS_FITS_IN_INODE(F2FS_INODE(ipage
), fi
->i_extra_isize
,
2640 f2fs_put_page(ipage
, 1);
2643 f2fs_put_page(ipage
, 1);
2645 err
= dquot_initialize(inode
);
2649 transfer_to
[PRJQUOTA
] = dqget(sb
, make_kqid_projid(kprojid
));
2650 if (!IS_ERR(transfer_to
[PRJQUOTA
])) {
2651 err
= __dquot_transfer(inode
, transfer_to
);
2652 dqput(transfer_to
[PRJQUOTA
]);
2657 F2FS_I(inode
)->i_projid
= kprojid
;
2658 inode
->i_ctime
= current_time(inode
);
2660 f2fs_mark_inode_dirty_sync(inode
, true);
2662 inode_unlock(inode
);
2663 mnt_drop_write_file(filp
);
2667 static int f2fs_ioc_setproject(struct file
*filp
, __u32 projid
)
2669 if (projid
!= F2FS_DEF_PROJID
)
2675 /* Transfer internal flags to xflags */
2676 static inline __u32
f2fs_iflags_to_xflags(unsigned long iflags
)
2680 if (iflags
& F2FS_SYNC_FL
)
2681 xflags
|= FS_XFLAG_SYNC
;
2682 if (iflags
& F2FS_IMMUTABLE_FL
)
2683 xflags
|= FS_XFLAG_IMMUTABLE
;
2684 if (iflags
& F2FS_APPEND_FL
)
2685 xflags
|= FS_XFLAG_APPEND
;
2686 if (iflags
& F2FS_NODUMP_FL
)
2687 xflags
|= FS_XFLAG_NODUMP
;
2688 if (iflags
& F2FS_NOATIME_FL
)
2689 xflags
|= FS_XFLAG_NOATIME
;
2690 if (iflags
& F2FS_PROJINHERIT_FL
)
2691 xflags
|= FS_XFLAG_PROJINHERIT
;
2695 #define F2FS_SUPPORTED_FS_XFLAGS (FS_XFLAG_SYNC | FS_XFLAG_IMMUTABLE | \
2696 FS_XFLAG_APPEND | FS_XFLAG_NODUMP | \
2697 FS_XFLAG_NOATIME | FS_XFLAG_PROJINHERIT)
2699 /* Transfer xflags flags to internal */
2700 static inline unsigned long f2fs_xflags_to_iflags(__u32 xflags
)
2702 unsigned long iflags
= 0;
2704 if (xflags
& FS_XFLAG_SYNC
)
2705 iflags
|= F2FS_SYNC_FL
;
2706 if (xflags
& FS_XFLAG_IMMUTABLE
)
2707 iflags
|= F2FS_IMMUTABLE_FL
;
2708 if (xflags
& FS_XFLAG_APPEND
)
2709 iflags
|= F2FS_APPEND_FL
;
2710 if (xflags
& FS_XFLAG_NODUMP
)
2711 iflags
|= F2FS_NODUMP_FL
;
2712 if (xflags
& FS_XFLAG_NOATIME
)
2713 iflags
|= F2FS_NOATIME_FL
;
2714 if (xflags
& FS_XFLAG_PROJINHERIT
)
2715 iflags
|= F2FS_PROJINHERIT_FL
;
2720 static int f2fs_ioc_fsgetxattr(struct file
*filp
, unsigned long arg
)
2722 struct inode
*inode
= file_inode(filp
);
2723 struct f2fs_inode_info
*fi
= F2FS_I(inode
);
2726 memset(&fa
, 0, sizeof(struct fsxattr
));
2727 fa
.fsx_xflags
= f2fs_iflags_to_xflags(fi
->i_flags
&
2728 F2FS_FL_USER_VISIBLE
);
2730 if (f2fs_sb_has_project_quota(inode
->i_sb
))
2731 fa
.fsx_projid
= (__u32
)from_kprojid(&init_user_ns
,
2734 if (copy_to_user((struct fsxattr __user
*)arg
, &fa
, sizeof(fa
)))
2739 static int f2fs_ioc_fssetxattr(struct file
*filp
, unsigned long arg
)
2741 struct inode
*inode
= file_inode(filp
);
2742 struct f2fs_inode_info
*fi
= F2FS_I(inode
);
2747 if (copy_from_user(&fa
, (struct fsxattr __user
*)arg
, sizeof(fa
)))
2750 /* Make sure caller has proper permission */
2751 if (!inode_owner_or_capable(inode
))
2754 if (fa
.fsx_xflags
& ~F2FS_SUPPORTED_FS_XFLAGS
)
2757 flags
= f2fs_xflags_to_iflags(fa
.fsx_xflags
);
2758 if (f2fs_mask_flags(inode
->i_mode
, flags
) != flags
)
2761 err
= mnt_want_write_file(filp
);
2766 flags
= (fi
->i_flags
& ~F2FS_FL_XFLAG_VISIBLE
) |
2767 (flags
& F2FS_FL_XFLAG_VISIBLE
);
2768 err
= __f2fs_ioc_setflags(inode
, flags
);
2769 inode_unlock(inode
);
2770 mnt_drop_write_file(filp
);
2774 err
= f2fs_ioc_setproject(filp
, fa
.fsx_projid
);
2781 int f2fs_pin_file_control(struct inode
*inode
, bool inc
)
2783 struct f2fs_inode_info
*fi
= F2FS_I(inode
);
2784 struct f2fs_sb_info
*sbi
= F2FS_I_SB(inode
);
2786 /* Use i_gc_failures for normal file as a risk signal. */
2788 f2fs_i_gc_failures_write(inode
,
2789 fi
->i_gc_failures
[GC_FAILURE_PIN
] + 1);
2791 if (fi
->i_gc_failures
[GC_FAILURE_PIN
] > sbi
->gc_pin_file_threshold
) {
2792 f2fs_msg(sbi
->sb
, KERN_WARNING
,
2793 "%s: Enable GC = ino %lx after %x GC trials\n",
2794 __func__
, inode
->i_ino
,
2795 fi
->i_gc_failures
[GC_FAILURE_PIN
]);
2796 clear_inode_flag(inode
, FI_PIN_FILE
);
2802 static int f2fs_ioc_set_pin_file(struct file
*filp
, unsigned long arg
)
2804 struct inode
*inode
= file_inode(filp
);
2808 if (!inode_owner_or_capable(inode
))
2811 if (get_user(pin
, (__u32 __user
*)arg
))
2814 if (!S_ISREG(inode
->i_mode
))
2817 if (f2fs_readonly(F2FS_I_SB(inode
)->sb
))
2820 ret
= mnt_want_write_file(filp
);
2826 if (f2fs_should_update_outplace(inode
, NULL
)) {
2832 clear_inode_flag(inode
, FI_PIN_FILE
);
2833 f2fs_i_gc_failures_write(inode
, 0);
2837 if (f2fs_pin_file_control(inode
, false)) {
2841 ret
= f2fs_convert_inline_inode(inode
);
2845 set_inode_flag(inode
, FI_PIN_FILE
);
2846 ret
= F2FS_I(inode
)->i_gc_failures
[GC_FAILURE_PIN
];
2848 f2fs_update_time(F2FS_I_SB(inode
), REQ_TIME
);
2850 inode_unlock(inode
);
2851 mnt_drop_write_file(filp
);
2855 static int f2fs_ioc_get_pin_file(struct file
*filp
, unsigned long arg
)
2857 struct inode
*inode
= file_inode(filp
);
2860 if (is_inode_flag_set(inode
, FI_PIN_FILE
))
2861 pin
= F2FS_I(inode
)->i_gc_failures
[GC_FAILURE_PIN
];
2862 return put_user(pin
, (u32 __user
*)arg
);
2865 int f2fs_precache_extents(struct inode
*inode
)
2867 struct f2fs_inode_info
*fi
= F2FS_I(inode
);
2868 struct f2fs_map_blocks map
;
2869 pgoff_t m_next_extent
;
2873 if (is_inode_flag_set(inode
, FI_NO_EXTENT
))
2877 map
.m_next_pgofs
= NULL
;
2878 map
.m_next_extent
= &m_next_extent
;
2879 map
.m_seg_type
= NO_CHECK_TYPE
;
2880 end
= F2FS_I_SB(inode
)->max_file_blocks
;
2882 while (map
.m_lblk
< end
) {
2883 map
.m_len
= end
- map
.m_lblk
;
2885 down_write(&fi
->i_gc_rwsem
[WRITE
]);
2886 err
= f2fs_map_blocks(inode
, &map
, 0, F2FS_GET_BLOCK_PRECACHE
);
2887 up_write(&fi
->i_gc_rwsem
[WRITE
]);
2891 map
.m_lblk
= m_next_extent
;
2897 static int f2fs_ioc_precache_extents(struct file
*filp
, unsigned long arg
)
2899 return f2fs_precache_extents(file_inode(filp
));
2902 long f2fs_ioctl(struct file
*filp
, unsigned int cmd
, unsigned long arg
)
2904 if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(filp
)))))
2908 case F2FS_IOC_GETFLAGS
:
2909 return f2fs_ioc_getflags(filp
, arg
);
2910 case F2FS_IOC_SETFLAGS
:
2911 return f2fs_ioc_setflags(filp
, arg
);
2912 case F2FS_IOC_GETVERSION
:
2913 return f2fs_ioc_getversion(filp
, arg
);
2914 case F2FS_IOC_START_ATOMIC_WRITE
:
2915 return f2fs_ioc_start_atomic_write(filp
);
2916 case F2FS_IOC_COMMIT_ATOMIC_WRITE
:
2917 return f2fs_ioc_commit_atomic_write(filp
);
2918 case F2FS_IOC_START_VOLATILE_WRITE
:
2919 return f2fs_ioc_start_volatile_write(filp
);
2920 case F2FS_IOC_RELEASE_VOLATILE_WRITE
:
2921 return f2fs_ioc_release_volatile_write(filp
);
2922 case F2FS_IOC_ABORT_VOLATILE_WRITE
:
2923 return f2fs_ioc_abort_volatile_write(filp
);
2924 case F2FS_IOC_SHUTDOWN
:
2925 return f2fs_ioc_shutdown(filp
, arg
);
2927 return f2fs_ioc_fitrim(filp
, arg
);
2928 case F2FS_IOC_SET_ENCRYPTION_POLICY
:
2929 return f2fs_ioc_set_encryption_policy(filp
, arg
);
2930 case F2FS_IOC_GET_ENCRYPTION_POLICY
:
2931 return f2fs_ioc_get_encryption_policy(filp
, arg
);
2932 case F2FS_IOC_GET_ENCRYPTION_PWSALT
:
2933 return f2fs_ioc_get_encryption_pwsalt(filp
, arg
);
2934 case F2FS_IOC_GARBAGE_COLLECT
:
2935 return f2fs_ioc_gc(filp
, arg
);
2936 case F2FS_IOC_GARBAGE_COLLECT_RANGE
:
2937 return f2fs_ioc_gc_range(filp
, arg
);
2938 case F2FS_IOC_WRITE_CHECKPOINT
:
2939 return f2fs_ioc_write_checkpoint(filp
, arg
);
2940 case F2FS_IOC_DEFRAGMENT
:
2941 return f2fs_ioc_defragment(filp
, arg
);
2942 case F2FS_IOC_MOVE_RANGE
:
2943 return f2fs_ioc_move_range(filp
, arg
);
2944 case F2FS_IOC_FLUSH_DEVICE
:
2945 return f2fs_ioc_flush_device(filp
, arg
);
2946 case F2FS_IOC_GET_FEATURES
:
2947 return f2fs_ioc_get_features(filp
, arg
);
2948 case F2FS_IOC_FSGETXATTR
:
2949 return f2fs_ioc_fsgetxattr(filp
, arg
);
2950 case F2FS_IOC_FSSETXATTR
:
2951 return f2fs_ioc_fssetxattr(filp
, arg
);
2952 case F2FS_IOC_GET_PIN_FILE
:
2953 return f2fs_ioc_get_pin_file(filp
, arg
);
2954 case F2FS_IOC_SET_PIN_FILE
:
2955 return f2fs_ioc_set_pin_file(filp
, arg
);
2956 case F2FS_IOC_PRECACHE_EXTENTS
:
2957 return f2fs_ioc_precache_extents(filp
, arg
);
2963 static ssize_t
f2fs_file_write_iter(struct kiocb
*iocb
, struct iov_iter
*from
)
2965 struct file
*file
= iocb
->ki_filp
;
2966 struct inode
*inode
= file_inode(file
);
2969 if (unlikely(f2fs_cp_error(F2FS_I_SB(inode
))))
2972 if ((iocb
->ki_flags
& IOCB_NOWAIT
) && !(iocb
->ki_flags
& IOCB_DIRECT
))
2975 if (!inode_trylock(inode
)) {
2976 if (iocb
->ki_flags
& IOCB_NOWAIT
)
2981 ret
= generic_write_checks(iocb
, from
);
2983 bool preallocated
= false;
2984 size_t target_size
= 0;
2987 if (iov_iter_fault_in_readable(from
, iov_iter_count(from
)))
2988 set_inode_flag(inode
, FI_NO_PREALLOC
);
2990 if ((iocb
->ki_flags
& IOCB_NOWAIT
) &&
2991 (iocb
->ki_flags
& IOCB_DIRECT
)) {
2992 if (!f2fs_overwrite_io(inode
, iocb
->ki_pos
,
2993 iov_iter_count(from
)) ||
2994 f2fs_has_inline_data(inode
) ||
2995 f2fs_force_buffered_io(inode
, WRITE
)) {
2996 clear_inode_flag(inode
,
2998 inode_unlock(inode
);
3003 preallocated
= true;
3004 target_size
= iocb
->ki_pos
+ iov_iter_count(from
);
3006 err
= f2fs_preallocate_blocks(iocb
, from
);
3008 clear_inode_flag(inode
, FI_NO_PREALLOC
);
3009 inode_unlock(inode
);
3013 ret
= __generic_file_write_iter(iocb
, from
);
3014 clear_inode_flag(inode
, FI_NO_PREALLOC
);
3016 /* if we couldn't write data, we should deallocate blocks. */
3017 if (preallocated
&& i_size_read(inode
) < target_size
)
3018 f2fs_truncate(inode
);
3021 f2fs_update_iostat(F2FS_I_SB(inode
), APP_WRITE_IO
, ret
);
3023 inode_unlock(inode
);
3026 ret
= generic_write_sync(iocb
, ret
);
3030 #ifdef CONFIG_COMPAT
3031 long f2fs_compat_ioctl(struct file
*file
, unsigned int cmd
, unsigned long arg
)
3034 case F2FS_IOC32_GETFLAGS
:
3035 cmd
= F2FS_IOC_GETFLAGS
;
3037 case F2FS_IOC32_SETFLAGS
:
3038 cmd
= F2FS_IOC_SETFLAGS
;
3040 case F2FS_IOC32_GETVERSION
:
3041 cmd
= F2FS_IOC_GETVERSION
;
3043 case F2FS_IOC_START_ATOMIC_WRITE
:
3044 case F2FS_IOC_COMMIT_ATOMIC_WRITE
:
3045 case F2FS_IOC_START_VOLATILE_WRITE
:
3046 case F2FS_IOC_RELEASE_VOLATILE_WRITE
:
3047 case F2FS_IOC_ABORT_VOLATILE_WRITE
:
3048 case F2FS_IOC_SHUTDOWN
:
3049 case F2FS_IOC_SET_ENCRYPTION_POLICY
:
3050 case F2FS_IOC_GET_ENCRYPTION_PWSALT
:
3051 case F2FS_IOC_GET_ENCRYPTION_POLICY
:
3052 case F2FS_IOC_GARBAGE_COLLECT
:
3053 case F2FS_IOC_GARBAGE_COLLECT_RANGE
:
3054 case F2FS_IOC_WRITE_CHECKPOINT
:
3055 case F2FS_IOC_DEFRAGMENT
:
3056 case F2FS_IOC_MOVE_RANGE
:
3057 case F2FS_IOC_FLUSH_DEVICE
:
3058 case F2FS_IOC_GET_FEATURES
:
3059 case F2FS_IOC_FSGETXATTR
:
3060 case F2FS_IOC_FSSETXATTR
:
3061 case F2FS_IOC_GET_PIN_FILE
:
3062 case F2FS_IOC_SET_PIN_FILE
:
3063 case F2FS_IOC_PRECACHE_EXTENTS
:
3066 return -ENOIOCTLCMD
;
3068 return f2fs_ioctl(file
, cmd
, (unsigned long) compat_ptr(arg
));
3072 const struct file_operations f2fs_file_operations
= {
3073 .llseek
= f2fs_llseek
,
3074 .read_iter
= generic_file_read_iter
,
3075 .write_iter
= f2fs_file_write_iter
,
3076 .open
= f2fs_file_open
,
3077 .release
= f2fs_release_file
,
3078 .mmap
= f2fs_file_mmap
,
3079 .flush
= f2fs_file_flush
,
3080 .fsync
= f2fs_sync_file
,
3081 .fallocate
= f2fs_fallocate
,
3082 .unlocked_ioctl
= f2fs_ioctl
,
3083 #ifdef CONFIG_COMPAT
3084 .compat_ioctl
= f2fs_compat_ioctl
,
3086 .splice_read
= generic_file_splice_read
,
3087 .splice_write
= iter_file_splice_write
,