All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Emelyanov <xemul@openvz.org>
To: Pavel Emelyanov <xemul@openvz.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Paul Menage <menage@google.com>,
	Sukadev Bhattiprolu <sukadev@us.ibm.com>,
	Serge Hallyn <serue@us.ibm.com>
Subject: [PATCH 8/9] Provide functions to manipulate block device mappings
Date: Wed, 05 Mar 2008 20:46:10 +0300	[thread overview]
Message-ID: <47CEDC62.5070907@openvz.org> (raw)
In-Reply-To: <47CED717.60406@openvz.org>

This routines were already done for char devices, these ones
are for block devices. Everything is the same, but the locks,
probe and match callbacks and kobj-to-device conversions.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>

---
 block/genhd.c         |   67 +++++++++++++++++++++++++++++++++++++++++++++++++
 include/linux/genhd.h |    8 ++++++
 2 files changed, 75 insertions(+), 0 deletions(-)

diff --git a/block/genhd.c b/block/genhd.c
index a619158..f407f62 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -204,6 +204,73 @@ void unlink_gendisk(struct gendisk *disk)
 			      disk->minors);
 }
 
+#ifdef CONFIG_CGROUP_DEVS
+int bdev_add_to_map(struct kobj_map *map, dev_t dev, int all, mode_t mode)
+{
+	int tmp;
+	struct kobject *kobj;
+	struct device *d;
+	struct gendisk *disk;
+
+	kobj = kobj_lookup(bdev_map, dev, NULL, &tmp);
+	if (kobj == NULL)
+		return -ENODEV;
+
+	d = kobj_to_dev(kobj);
+	disk = dev_to_disk(d);
+	tmp = kobj_remap(map, dev, mode, all ? MINORBITS : 1, NULL,
+			exact_match, exact_lock, disk);
+	if (tmp < 0) {
+		put_disk(disk);
+		return tmp;
+	}
+
+	return 0;
+}
+
+int bdev_del_from_map(struct kobj_map *map, dev_t dev, int all)
+{
+	int tmp;
+	struct kobject *kobj;
+	struct device *d;
+	struct gendisk *disk;
+
+	kobj = kobj_lookup(map, dev, NULL, &tmp);
+	if (kobj == NULL)
+		return -ENODEV;
+
+	d = kobj_to_dev(kobj);
+	disk = dev_to_disk(d);
+	kobj_unmap(map, dev, all ? MINORBITS : 1);
+
+	/*
+	 * one put for the kobj_lookup above and one for
+	 * the kobj_lookup in bdev_add_to_map
+	 */
+	put_disk(disk);
+	put_disk(disk);
+	return 0;
+}
+
+void bdev_iterate_map(struct kobj_map *map,
+		int (*fn)(dev_t, int, mode_t, void *), void *x)
+{
+	kobj_map_iterate(map, fn, x);
+}
+
+static struct kobject *base_probe(dev_t devt, int *part, void *data);
+
+struct kobj_map *bdev_map_init(void)
+{
+	return kobj_map_init(base_probe, &block_class_lock);
+}
+
+void bdev_map_fini(struct kobj_map *map)
+{
+	kobj_map_fini(map);
+}
+#endif
+
 /**
  * get_gendisk - get partitioning information for a given device
  * @dev: device to get partitioning information for
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index e09df44..c5483fc 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -373,6 +373,14 @@ extern void del_gendisk(struct gendisk *gp);
 extern void unlink_gendisk(struct gendisk *gp);
 extern struct gendisk *get_gendisk(dev_t dev, mode_t *mode, int *part);
 
+struct kobj_map;
+extern int bdev_add_to_map(struct kobj_map *, dev_t dev, int all, mode_t mode);
+extern int bdev_del_from_map(struct kobj_map *map, dev_t dev, int all);
+extern void bdev_iterate_map(struct kobj_map *map,
+		int (*fn)(dev_t, int, mode_t, void *), void *x);
+extern struct kobj_map *bdev_map_init(void);
+extern void bdev_map_fini(struct kobj_map *map);
+
 extern void set_device_ro(struct block_device *bdev, int flag);
 extern void set_disk_ro(struct gendisk *disk, int flag);
 
-- 
1.5.3.4


  parent reply	other threads:[~2008-03-05 17:54 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-05 17:23 [PATCH 0/9] Devices accessibility control group (v4) Pavel Emelyanov
2008-03-05 17:25 ` [PATCH 1/9] Avoid magic constants in drivers/base/map.c Pavel Emelyanov
2008-03-05 17:28 ` [PATCH 2/9] Cleanup the get_gendisk() a bit Pavel Emelyanov
2008-03-05 17:32 ` [PATCH 3/9] Add a mode on the struct probe Pavel Emelyanov
2008-03-05 17:34 ` [PATCH 4/9] Make kobj_lookup() return the mapping's permissions Pavel Emelyanov
2008-03-05 17:37 ` [PATCH 5/9] Make use of permissions, returned by kobj_lookup Pavel Emelyanov
2008-03-06  1:13   ` Andrew Morton
2008-03-06  8:48     ` Pavel Emelyanov
2008-03-07  9:22     ` Pavel Emelyanov
2008-03-07  9:35       ` Andrew Morton
2008-03-07  9:52         ` Pavel Emelyanov
2008-03-07 15:59           ` Greg KH
2008-03-07 16:38             ` Pavel Emelyanov
2008-03-07 17:01               ` Greg KH
2008-03-07 17:08                 ` Al Viro
2008-03-07 17:35                 ` Serge E. Hallyn
2008-03-07 17:57                   ` Casey Schaufler
2008-03-07 18:30                     ` Serge E. Hallyn
2008-03-07 19:46                       ` Stephen Smalley
2008-03-07 20:57                         ` Casey Schaufler
2008-03-07 21:32                           ` Serge E. Hallyn
2008-03-07 18:14                   ` Greg KH
2008-03-07 18:50                     ` Serge E. Hallyn
2008-03-08  6:04                       ` Greg KH
2008-03-08 21:47                         ` Serge E. Hallyn
2008-03-09  3:15                           ` Greg KH
2008-03-10 20:35                             ` Serge E. Hallyn
2008-03-11  9:57                 ` Pavel Emelyanov
2008-03-11 17:36                   ` Greg KH
2008-03-12  8:26                     ` Pavel Emelyanov
2008-03-12 13:09                       ` Serge E. Hallyn
2008-03-12 13:18                         ` Stephen Smalley
2008-03-12 13:27                           ` Stephen Smalley
2008-03-12 14:18                             ` Serge E. Hallyn
2008-03-12 14:15                           ` Serge E. Hallyn
2008-03-12 16:21                           ` Casey Schaufler
2008-03-12 13:36                         ` Pavel Emelyanov
2008-03-05 17:40 ` [PATCH 6/9] Extend the drivers/base/map.c functionality Pavel Emelyanov
2008-03-05 17:43 ` [PATCH 7/9] Provide functions to manipulate char device mappings Pavel Emelyanov
2008-03-05 17:46 ` Pavel Emelyanov [this message]
2008-03-05 17:47 ` [PATCH 9/9] Devices accessibility control group itself Pavel Emelyanov
2008-03-06  2:02   ` Greg KH
2008-03-06  1:55 ` [PATCH 0/9] Devices accessibility control group (v4) Greg KH
2008-03-06  3:15   ` Serge E. Hallyn
2008-03-06  4:34     ` Greg KH
2008-03-06  8:36       ` Pavel Emelyanov
2008-03-07  4:58         ` Greg KH
2008-03-07  8:42         ` Pavel Machek
2008-03-07  8:54           ` Pavel Emelyanov

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=47CEDC62.5070907@openvz.org \
    --to=xemul@openvz.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=menage@google.com \
    --cc=serue@us.ibm.com \
    --cc=sukadev@us.ibm.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.