···413413static blk_opf_t f2fs_io_flags(struct f2fs_io_info *fio)414414{415415 unsigned int temp_mask = GENMASK(NR_TEMP_TYPE - 1, 0);416416+ struct folio *fio_folio = page_folio(fio->page);416417 unsigned int fua_flag, meta_flag, io_flag;417418 blk_opf_t op_flags = 0;418419···439438 op_flags |= REQ_META;440439 if (BIT(fio->temp) & fua_flag)441440 op_flags |= REQ_FUA;441441+442442+ if (fio->type == DATA &&443443+ F2FS_I(fio_folio->mapping->host)->ioprio_hint == F2FS_IOPRIO_WRITE)444444+ op_flags |= REQ_PRIO;445445+442446 return op_flags;443447}444448
+1
fs/f2fs/f2fs.h
···830830831831 /* Use below internally in f2fs*/832832 unsigned long flags[BITS_TO_LONGS(FI_MAX)]; /* use to pass per-file flags */833833+ unsigned int ioprio_hint; /* hint for IO priority */833834 struct f2fs_rwsem i_sem; /* protect fi info */834835 atomic_t dirty_pages; /* # of dirty pages */835836 f2fs_hash_t chash; /* hash value of given file name */
+20
fs/f2fs/file.c
···34463446 (u32 __user *)arg);34473447}3448344834493449+static int f2fs_ioc_io_prio(struct file *filp, unsigned long arg)34503450+{34513451+ struct inode *inode = file_inode(filp);34523452+ __u32 level;34533453+34543454+ if (get_user(level, (__u32 __user *)arg))34553455+ return -EFAULT;34563456+34573457+ if (!S_ISREG(inode->i_mode) || level >= F2FS_IOPRIO_MAX)34583458+ return -EINVAL;34593459+34603460+ inode_lock(inode);34613461+ F2FS_I(inode)->ioprio_hint = level;34623462+ inode_unlock(inode);34633463+ return 0;34643464+}34653465+34493466int f2fs_precache_extents(struct inode *inode)34503467{34513468 struct f2fs_inode_info *fi = F2FS_I(inode);···45644547 return f2fs_ioc_compress_file(filp);45654548 case F2FS_IOC_GET_DEV_ALIAS_FILE:45664549 return f2fs_ioc_get_dev_alias_file(filp, arg);45504550+ case F2FS_IOC_IO_PRIO:45514551+ return f2fs_ioc_io_prio(filp, arg);45674552 default:45684553 return -ENOTTY;45694554 }···52805261 case F2FS_IOC_DECOMPRESS_FILE:52815262 case F2FS_IOC_COMPRESS_FILE:52825263 case F2FS_IOC_GET_DEV_ALIAS_FILE:52645264+ case F2FS_IOC_IO_PRIO:52835265 break;52845266 default:52855267 return -ENOIOCTLCMD;
+7
include/uapi/linux/f2fs.h
···4444#define F2FS_IOC_COMPRESS_FILE _IO(F2FS_IOCTL_MAGIC, 24)4545#define F2FS_IOC_START_ATOMIC_REPLACE _IO(F2FS_IOCTL_MAGIC, 25)4646#define F2FS_IOC_GET_DEV_ALIAS_FILE _IOR(F2FS_IOCTL_MAGIC, 26, __u32)4747+#define F2FS_IOC_IO_PRIO _IOW(F2FS_IOCTL_MAGIC, 27, __u32)47484849/*4950 * should be same as XFS_IOC_GOINGDOWN.···6362#define F2FS_TRIM_FILE_DISCARD 0x1 /* send discard command */6463#define F2FS_TRIM_FILE_ZEROOUT 0x2 /* zero out */6564#define F2FS_TRIM_FILE_MASK 0x36565+6666+/* for F2FS_IOC_IO_PRIO */6767+enum {6868+ F2FS_IOPRIO_WRITE = 1, /* high write priority */6969+ F2FS_IOPRIO_MAX,7070+};66716772struct f2fs_gc_range {6873 __u32 sync;