file.c (1ad71a27124caf0b68ddd3c92be01aa2b2a72b2a) file.c (c4020b2da4c9e84d63e30ce5a85dc287507f0e60)
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

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

1418 return ret;
1419}
1420
1421static int expand_inode_data(struct inode *inode, loff_t offset,
1422 loff_t len, int mode)
1423{
1424 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1425 struct f2fs_map_blocks map = { .m_next_pgofs = NULL,
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

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

1418 return ret;
1419}
1420
1421static int expand_inode_data(struct inode *inode, loff_t offset,
1422 loff_t len, int mode)
1423{
1424 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1425 struct f2fs_map_blocks map = { .m_next_pgofs = NULL,
1426 .m_seg_type = NO_CHECK_TYPE };
1426 .m_next_extent = NULL, .m_seg_type = NO_CHECK_TYPE };
1427 pgoff_t pg_end;
1428 loff_t new_size = i_size_read(inode);
1429 loff_t off_end;
1430 int err;
1431
1432 err = inode_newsize_ok(inode, (len + offset));
1433 if (err)
1434 return err;

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

2067}
2068
2069static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
2070 struct file *filp,
2071 struct f2fs_defragment *range)
2072{
2073 struct inode *inode = file_inode(filp);
2074 struct f2fs_map_blocks map = { .m_next_pgofs = NULL,
1427 pgoff_t pg_end;
1428 loff_t new_size = i_size_read(inode);
1429 loff_t off_end;
1430 int err;
1431
1432 err = inode_newsize_ok(inode, (len + offset));
1433 if (err)
1434 return err;

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

2067}
2068
2069static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
2070 struct file *filp,
2071 struct f2fs_defragment *range)
2072{
2073 struct inode *inode = file_inode(filp);
2074 struct f2fs_map_blocks map = { .m_next_pgofs = NULL,
2075 .m_seg_type = NO_CHECK_TYPE };
2075 .m_next_extent = NULL, .m_seg_type = NO_CHECK_TYPE };
2076 struct extent_info ei = {0,0,0};
2077 pgoff_t pg_start, pg_end;
2078 unsigned int blk_per_seg = sbi->blocks_per_seg;
2079 unsigned int total = 0, sec_num;
2080 block_t blk_end = 0;
2081 bool fragmented = false;
2082 int err;
2083

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

2744 struct inode *inode = file_inode(filp);
2745 __u32 pin = 0;
2746
2747 if (is_inode_flag_set(inode, FI_PIN_FILE))
2748 pin = F2FS_I(inode)->i_gc_failures;
2749 return put_user(pin, (u32 __user *)arg);
2750}
2751
2076 struct extent_info ei = {0,0,0};
2077 pgoff_t pg_start, pg_end;
2078 unsigned int blk_per_seg = sbi->blocks_per_seg;
2079 unsigned int total = 0, sec_num;
2080 block_t blk_end = 0;
2081 bool fragmented = false;
2082 int err;
2083

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

2744 struct inode *inode = file_inode(filp);
2745 __u32 pin = 0;
2746
2747 if (is_inode_flag_set(inode, FI_PIN_FILE))
2748 pin = F2FS_I(inode)->i_gc_failures;
2749 return put_user(pin, (u32 __user *)arg);
2750}
2751
2752int f2fs_precache_extents(struct inode *inode)
2753{
2754 struct f2fs_inode_info *fi = F2FS_I(inode);
2755 struct f2fs_map_blocks map;
2756 pgoff_t m_next_extent;
2757 loff_t end;
2758 int err;
2759
2760 if (is_inode_flag_set(inode, FI_NO_EXTENT))
2761 return -EOPNOTSUPP;
2762
2763 map.m_lblk = 0;
2764 map.m_next_pgofs = NULL;
2765 map.m_next_extent = &m_next_extent;
2766 map.m_seg_type = NO_CHECK_TYPE;
2767 end = F2FS_I_SB(inode)->max_file_blocks;
2768
2769 while (map.m_lblk < end) {
2770 map.m_len = end - map.m_lblk;
2771
2772 down_write(&fi->dio_rwsem[WRITE]);
2773 err = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_PRECACHE);
2774 up_write(&fi->dio_rwsem[WRITE]);
2775 if (err)
2776 return err;
2777
2778 map.m_lblk = m_next_extent;
2779 }
2780
2781 return err;
2782}
2783
2784static int f2fs_ioc_precache_extents(struct file *filp, unsigned long arg)
2785{
2786 return f2fs_precache_extents(file_inode(filp));
2787}
2788
2752long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
2753{
2754 if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(filp)))))
2755 return -EIO;
2756
2757 switch (cmd) {
2758 case F2FS_IOC_GETFLAGS:
2759 return f2fs_ioc_getflags(filp, arg);

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

2798 case F2FS_IOC_FSGETXATTR:
2799 return f2fs_ioc_fsgetxattr(filp, arg);
2800 case F2FS_IOC_FSSETXATTR:
2801 return f2fs_ioc_fssetxattr(filp, arg);
2802 case F2FS_IOC_GET_PIN_FILE:
2803 return f2fs_ioc_get_pin_file(filp, arg);
2804 case F2FS_IOC_SET_PIN_FILE:
2805 return f2fs_ioc_set_pin_file(filp, arg);
2789long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
2790{
2791 if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(filp)))))
2792 return -EIO;
2793
2794 switch (cmd) {
2795 case F2FS_IOC_GETFLAGS:
2796 return f2fs_ioc_getflags(filp, arg);

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

2835 case F2FS_IOC_FSGETXATTR:
2836 return f2fs_ioc_fsgetxattr(filp, arg);
2837 case F2FS_IOC_FSSETXATTR:
2838 return f2fs_ioc_fssetxattr(filp, arg);
2839 case F2FS_IOC_GET_PIN_FILE:
2840 return f2fs_ioc_get_pin_file(filp, arg);
2841 case F2FS_IOC_SET_PIN_FILE:
2842 return f2fs_ioc_set_pin_file(filp, arg);
2843 case F2FS_IOC_PRECACHE_EXTENTS:
2844 return f2fs_ioc_precache_extents(filp, arg);
2806 default:
2807 return -ENOTTY;
2808 }
2809}
2810
2811static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
2812{
2813 struct file *file = iocb->ki_filp;

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

2875 case F2FS_IOC_DEFRAGMENT:
2876 case F2FS_IOC_MOVE_RANGE:
2877 case F2FS_IOC_FLUSH_DEVICE:
2878 case F2FS_IOC_GET_FEATURES:
2879 case F2FS_IOC_FSGETXATTR:
2880 case F2FS_IOC_FSSETXATTR:
2881 case F2FS_IOC_GET_PIN_FILE:
2882 case F2FS_IOC_SET_PIN_FILE:
2845 default:
2846 return -ENOTTY;
2847 }
2848}
2849
2850static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
2851{
2852 struct file *file = iocb->ki_filp;

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

2914 case F2FS_IOC_DEFRAGMENT:
2915 case F2FS_IOC_MOVE_RANGE:
2916 case F2FS_IOC_FLUSH_DEVICE:
2917 case F2FS_IOC_GET_FEATURES:
2918 case F2FS_IOC_FSGETXATTR:
2919 case F2FS_IOC_FSSETXATTR:
2920 case F2FS_IOC_GET_PIN_FILE:
2921 case F2FS_IOC_SET_PIN_FILE:
2922 case F2FS_IOC_PRECACHE_EXTENTS:
2883 break;
2884 default:
2885 return -ENOIOCTLCMD;
2886 }
2887 return f2fs_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
2888}
2889#endif
2890

--- 17 unchanged lines hidden ---
2923 break;
2924 default:
2925 return -ENOIOCTLCMD;
2926 }
2927 return f2fs_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
2928}
2929#endif
2930

--- 17 unchanged lines hidden ---