All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <axboe@kernel.dk>
To: linux-fsdevel@vger.kernel.org, linux-block@vger.kernel.org
Cc: adilger@dilger.ca, hch@infradead.org, martin.petersen@oracle.com,
	Jens Axboe <axboe@kernel.dk>
Subject: [PATCH 05/12] fs: add fcntl() interface for setting/getting write life time hints
Date: Thu, 15 Jun 2017 10:42:03 -0600	[thread overview]
Message-ID: <1497544930-19174-6-git-send-email-axboe@kernel.dk> (raw)
In-Reply-To: <1497544930-19174-1-git-send-email-axboe@kernel.dk>

We have a pwritev2(2) interface based on passing in flags. Add an
fcntl interface for querying these flags, and also for setting them
as well:

F_GET_WRITE_LIFE	Returns one of the valid type of write hints,
			like WRITE_HINT_MEDIUM.

F_SET_WRITE_LIFE	Pass in a WRITE_HINT_* type to set the
			write life time hint for this file/inode.
			Returns 0 on succes, -1 otherwise.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
 fs/fcntl.c                 | 38 ++++++++++++++++++++++++++++++++++++++
 include/uapi/linux/fcntl.h |  6 ++++++
 2 files changed, 44 insertions(+)

diff --git a/fs/fcntl.c b/fs/fcntl.c
index f4e7267d117f..f89fef847f73 100644
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -243,6 +243,40 @@ static int f_getowner_uids(struct file *filp, unsigned long arg)
 }
 #endif
 
+long fcntl_write_life(struct file *file, unsigned int cmd, unsigned long arg)
+{
+	struct inode *inode = file_inode(file);
+	long ret;
+
+	switch (cmd) {
+	case F_GET_WRITE_LIFE:
+		ret = mask_to_write_hint(inode->i_flags, S_WRITE_LIFE_SHIFT);
+		break;
+	case F_SET_WRITE_LIFE: {
+		enum write_hint hint = arg;
+
+		switch (hint) {
+		case WRITE_HINT_NONE:
+		case WRITE_HINT_SHORT:
+		case WRITE_HINT_MEDIUM:
+		case WRITE_HINT_LONG:
+		case WRITE_HINT_EXTREME:
+			inode_set_write_hint(inode, hint);
+			ret = 0;
+			break;
+		default:
+			ret = -EINVAL;
+		}
+		break;
+		}
+	default:
+		ret = -EINVAL;
+		break;
+	}
+
+	return ret;
+}
+
 static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
 		struct file *filp)
 {
@@ -337,6 +371,10 @@ static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
 	case F_GET_SEALS:
 		err = shmem_fcntl(filp, cmd, arg);
 		break;
+	case F_GET_WRITE_LIFE:
+	case F_SET_WRITE_LIFE:
+		err = fcntl_write_life(filp, cmd, arg);
+		break;
 	default:
 		break;
 	}
diff --git a/include/uapi/linux/fcntl.h b/include/uapi/linux/fcntl.h
index 813afd6eee71..1c5b2a95e9c9 100644
--- a/include/uapi/linux/fcntl.h
+++ b/include/uapi/linux/fcntl.h
@@ -43,6 +43,12 @@
 /* (1U << 31) is reserved for signed error codes */
 
 /*
+ * Set/Get write life time hints
+ */
+#define F_GET_WRITE_LIFE	(F_LINUX_SPECIFIC_BASE + 11)
+#define F_SET_WRITE_LIFE	(F_LINUX_SPECIFIC_BASE + 20)
+
+/*
  * Types of directory notifications that may be requested.
  */
 #define DN_ACCESS	0x00000001	/* File accessed */
-- 
2.7.4

  parent reply	other threads:[~2017-06-15 16:42 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-15 16:41 [PATCHSET v5] Add support for write life time hints Jens Axboe
2017-06-15 16:41 ` [PATCH 01/12] block: add support for carrying stream information in a bio Jens Axboe
2017-06-16 16:39   ` Martin K. Petersen
2017-06-16 16:42     ` Jens Axboe
2017-06-15 16:42 ` [PATCH 02/12] blk-mq: expose stream write stats through debugfs Jens Axboe
2017-06-16 16:38   ` Martin K. Petersen
2017-06-16 16:41     ` Jens Axboe
2017-06-15 16:42 ` [PATCH 03/12] fs: add support for an inode to carry write hint related data Jens Axboe
2017-06-15 16:42 ` [PATCH 04/12] fs: add support for allowing applications to pass in write life time hints Jens Axboe
2017-06-15 16:42 ` Jens Axboe [this message]
2017-06-16 16:44   ` [PATCH 05/12] fs: add fcntl() interface for setting/getting " Martin K. Petersen
2017-06-16 16:55     ` Jens Axboe
2017-06-16 17:59     ` Christoph Hellwig
2017-06-15 16:42 ` [PATCH 06/12] block: add helpers for setting/checking write hint validity Jens Axboe
2017-06-16 16:47   ` Martin K. Petersen
2017-06-16 16:53     ` Jens Axboe
2017-06-15 16:42 ` [PATCH 07/12] fs: add O_DIRECT support for sending down bio stream information Jens Axboe
2017-06-15 16:42 ` [PATCH 08/12] fs: add support for buffered writeback to pass down write hints Jens Axboe
2017-06-15 16:42 ` [PATCH 09/12] ext4: add support for passing in write hints for buffered writes Jens Axboe
2017-06-15 16:42 ` [PATCH 10/12] xfs: " Jens Axboe
2017-06-15 16:42 ` [PATCH 11/12] btrfs: " Jens Axboe
2017-06-15 16:42 ` [PATCH 12/12] nvme: add support for streams and directives Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1497544930-19174-6-git-send-email-axboe@kernel.dk \
    --to=axboe@kernel.dk \
    --cc=adilger@dilger.ca \
    --cc=hch@infradead.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.