All of lore.kernel.org
 help / color / mirror / Atom feed
From: Morey Roof <moreyroof@gmail.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH] kernel-unstable: Adds label manipulate ioctl
Date: Tue, 12 Aug 2008 15:09:07 -0600	[thread overview]
Message-ID: <48A1FBF3.5050608@gmail.com> (raw)

This patch adds two IOCTLs to allow for changing of the label with the 
file system mounted.

Signed-off-by: Morey Roof <moreyroof@gmail.com>
---
diff -r 447f15493ff8 ioctl.c
--- a/ioctl.c	Thu Aug 07 11:19:43 2008 -0400
+++ b/ioctl.c	Tue Aug 12 15:07:03 2008 -0600
@@ -749,6 +749,53 @@
 	return ret;
 }
 
+long btrfs_ioctl_set_label(struct btrfs_root *root, void __user *arg)
+{
+	struct btrfs_trans_handle *trans;
+	struct btrfs_ioctl_label_args *label_args;
+	int ret = 0;
+
+	label_args = kmalloc(sizeof(*label_args), GFP_NOFS);
+
+	if (!label_args)
+		return -ENOMEM;
+
+	if (copy_from_user(label_args, arg, sizeof(*label_args)))
+	{
+		ret = -EFAULT;
+	} else
+	{
+		/* Everything looks good, so lets do a label change */
+		label_args->name[BTRFS_LABEL_SIZE] = 0x00;
+		trans = btrfs_start_transaction(root, 1);
+		strncpy(root->fs_info->super_copy.label, label_args->name, BTRFS_LABEL_SIZE);
+		btrfs_commit_transaction(trans, root);
+	}
+
+	kfree(label_args);
+	return ret;
+}
+
+long btrfs_ioctl_get_label(struct btrfs_root *root, void __user *arg)
+{
+	struct btrfs_ioctl_label_args *label_args;
+	int ret = 0;
+
+	label_args = kmalloc(sizeof(*label_args), GFP_NOFS);
+
+	if (!label_args)
+		return -ENOMEM;
+
+	strncpy(label_args->name, root->fs_info->super_copy.label, BTRFS_LABEL_SIZE);
+	if (copy_to_user(arg, label_args, sizeof(*label_args)))
+	{
+		ret = -EFAULT;
+	}
+
+	kfree(label_args);
+	return ret;
+}
+
 long btrfs_ioctl(struct file *file, unsigned int
 		cmd, unsigned long arg)
 {
@@ -773,6 +820,10 @@
 		return btrfs_ioctl_trans_start(file);
 	case BTRFS_IOC_TRANS_END:
 		return btrfs_ioctl_trans_end(file);
+	case BTRFS_IOC_SET_LABEL:
+		return btrfs_ioctl_set_label(root, (void __user *)arg);
+	case BTRFS_IOC_GET_LABEL:
+		return btrfs_ioctl_get_label(root, (void __user *)arg);
 	case BTRFS_IOC_SYNC:
 		btrfs_start_delalloc_inodes(root);
 		btrfs_sync_fs(file->f_dentry->d_sb, 1);
diff -r 447f15493ff8 ioctl.h
--- a/ioctl.h	Thu Aug 07 11:19:43 2008 -0400
+++ b/ioctl.h	Tue Aug 12 15:07:03 2008 -0600
@@ -19,6 +19,7 @@
 #ifndef __IOCTL_
 #define __IOCTL_
 #include <linux/ioctl.h>
+#include "ctree.h"
 
 #define BTRFS_IOCTL_MAGIC 0x94
 #define BTRFS_VOL_NAME_MAX 255
@@ -26,6 +27,10 @@
 
 struct btrfs_ioctl_vol_args {
 	char name[BTRFS_PATH_NAME_MAX + 1];
+};
+
+struct btrfs_ioctl_label_args {
+	char name[BTRFS_LABEL_SIZE + 1];
 };
 
 #define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
@@ -52,4 +57,10 @@
 #define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \
 				   struct btrfs_ioctl_vol_args)
 
+/* Used to set and get the current volume label */
+#define BTRFS_IOC_SET_LABEL	_IOW(BTRFS_IOCTL_MAGIC, 13, \
+					struct btrfs_ioctl_label_args)
+#define BTRFS_IOC_GET_LABEL	_IOW(BTRFS_IOCTL_MAGIC, 14, \
+					struct btrfs_ioctl_label_args)
+
 #endif



                 reply	other threads:[~2008-08-12 21:09 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=48A1FBF3.5050608@gmail.com \
    --to=moreyroof@gmail.com \
    --cc=linux-btrfs@vger.kernel.org \
    /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.