48 lines · 1.0 KB · C
RawDownload
// SPDX-License-Identifier: GPL-2.0#include <linux/kernel.h>#include <linux/errno.h>#include <linux/fs.h>#include <linux/file.h>#include <linux/mm.h>#include <linux/slab.h>#include <linux/syscalls.h>#include <linux/io_uring.h> #include <uapi/linux/io_uring.h> #include "../fs/internal.h" #include "io_uring.h"#include "truncate.h" struct io_ftrunc {	struct file			*file;	loff_t				len;}; int io_ftruncate_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe){	struct io_ftrunc *ft = io_kiocb_to_cmd(req, struct io_ftrunc); 	if (sqe->rw_flags || sqe->addr || sqe->len || sqe->buf_index ||	    sqe->splice_fd_in || sqe->addr3)		return -EINVAL; 	ft->len = READ_ONCE(sqe->off); 	req->flags |= REQ_F_FORCE_ASYNC;	return 0;} int io_ftruncate(struct io_kiocb *req, unsigned int issue_flags){	struct io_ftrunc *ft = io_kiocb_to_cmd(req, struct io_ftrunc);	int ret; 	WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); 	ret = do_ftruncate(req->file, ft->len, 0); 	io_req_set_res(req, ret, 0);	return IOU_COMPLETE;}