2008-02-04 19:09:31

by Mark Fasheh

[permalink] [raw]
Subject: [PATCH 0/2] Move /sys/o2cb to /sys/fs/o2cb

Hi Greg,

The following two patches move /sys/o2cb into /sys/fs/o2cb as we
previously discussed. A symlink is created to maintain compatibility with
existing versions of ocfs2-tools. A patch to automatically search
/sys/fs/o2cb has been committed to the ocfs2-tools repo and a release with
that code shouldn't be too far out. Old versions of ocfs2-tools have been
tested and work fine with the symlink there. The development version of
ocfs2-tools with the patch to search /sys/fs/o2cb has also been tested with
and without the symlink. All results are as expected - the new ocfs2-tools
works great with both setups.

Documentation of the o2cb directory has been added so that future
hackers will have an easier time understanding what it's all about. The
/sys/o2cb symlink has been appropariately marked as going away in two years
- a timeline which we feel is appropriately long enough such that a very
small number of people would be affected by it's removal.

The first patch fixes a small problem with sysfs_remove_link() which
I encountered while coding this all up. The 2nd one actually moves the
directory, creates the symlink and adds the appropriate documentation.

Please review, and if all goes well, indicate to me when you'd be
comfortable with the small sysfs patch going upstream - I'd like to get this
series out there asap as it's a fairly trivial change, and some of the ocfs2
changes might conflict with our ongoing cluster stack rework.
--Mark

--
Mark Fasheh
Principal Software Developer, Oracle
[email protected]


2008-02-04 19:09:44

by Mark Fasheh

[permalink] [raw]
Subject: [PATCH 2/2] ocfs2: Move /sys/o2cb to /sys/fs/o2cb

/sys/fs is where we really want file system specific sysfs objects.

Ocfs2-tools has been updated to look in /sys/fs/o2cb. We can maintain
backwards compatibility with old ocfs2-tools by using a sysfs symlink. After
some time (2 years), the symlink can be safely removed. This patch also adds
documentation to make it easier for people to figure out what /sys/fs/o2cb
is used for.

Signed-off-by: Mark Fasheh <[email protected]>
---
Documentation/ABI/obsolete/o2cb | 11 +++++++++++
Documentation/ABI/stable/o2cb | 10 ++++++++++
Documentation/feature-removal-schedule.txt | 10 ++++++++++
fs/ocfs2/cluster/sys.c | 9 +++++++++
4 files changed, 40 insertions(+), 0 deletions(-)
create mode 100644 Documentation/ABI/obsolete/o2cb
create mode 100644 Documentation/ABI/stable/o2cb

diff --git a/Documentation/ABI/obsolete/o2cb b/Documentation/ABI/obsolete/o2cb
new file mode 100644
index 0000000..9c49d8e
--- /dev/null
+++ b/Documentation/ABI/obsolete/o2cb
@@ -0,0 +1,11 @@
+What: /sys/o2cb symlink
+Date: Dec 2005
+KernelVersion: 2.6.16
+Contact: [email protected]
+Description: This is a symlink: /sys/o2cb to /sys/fs/o2cb. The symlink will
+ be removed when new versions of ocfs2-tools which know to look
+ in /sys/fs/o2cb are sufficiently prevalent. Don't code new
+ software to look here, it should try /sys/fs/o2cb instead.
+ See Documentation/ABI/stable/o2cb for more information on usage.
+Users: ocfs2-tools. It's sufficient to mail proposed changes to
+ [email protected].
diff --git a/Documentation/ABI/stable/o2cb b/Documentation/ABI/stable/o2cb
new file mode 100644
index 0000000..5eb1545
--- /dev/null
+++ b/Documentation/ABI/stable/o2cb
@@ -0,0 +1,10 @@
+What: /sys/fs/o2cb/ (was /sys/o2cb)
+Date: Dec 2005
+KernelVersion: 2.6.16
+Contact: [email protected]
+Description: Ocfs2-tools looks at 'interface-revision' for versioning
+ information. Each logmask/ file controls a set of debug prints
+ and can be written into with the strings "allow", "deny", or
+ "off". Reading the file returns the current state.
+Users: ocfs2-tools. It's sufficient to mail proposed changes to
+ [email protected].
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt
index 2537066..2bedb81 100644
--- a/Documentation/feature-removal-schedule.txt
+++ b/Documentation/feature-removal-schedule.txt
@@ -306,3 +306,13 @@ Why: These drivers are superseded by i810fb, intelfb and savagefb.
Who: Jean Delvare <[email protected]>

---------------------------
+
+What: /sys/o2cb symlink
+When: January 2010
+Why: /sys/fs/o2cb is the proper location for this information - /sys/o2cb
+ exists as a symlink for backwards compatibility for old versions of
+ ocfs2-tools. 2 years should be sufficient time to phase in new versions
+ which know to look in /sys/fs/o2cb.
+Who: [email protected]
+
+---------------------------
diff --git a/fs/ocfs2/cluster/sys.c b/fs/ocfs2/cluster/sys.c
index a4b0773..bc702da 100644
--- a/fs/ocfs2/cluster/sys.c
+++ b/fs/ocfs2/cluster/sys.c
@@ -57,6 +57,7 @@ static struct kset *o2cb_kset;
void o2cb_sys_shutdown(void)
{
mlog_sys_shutdown();
+ sysfs_remove_link(NULL, "o2cb");
kset_unregister(o2cb_kset);
}

@@ -68,6 +69,14 @@ int o2cb_sys_init(void)
if (!o2cb_kset)
return -ENOMEM;

+ /*
+ * Create this symlink for backwards compatibility with old
+ * versions of ocfs2-tools which look for things in /sys/o2cb.
+ */
+ ret = sysfs_create_link(NULL, &o2cb_kset->kobj, "o2cb");
+ if (ret)
+ goto error;
+
ret = sysfs_create_group(&o2cb_kset->kobj, &o2cb_attr_group);
if (ret)
goto error;
--
1.5.3.6

2008-02-04 19:09:58

by Mark Fasheh

[permalink] [raw]
Subject: [PATCH 1/2] sysfs: Allow removal of symlinks in the sysfs root

Allow callers of sysfs_remove_link() to pass a NULL kobj, in which case
sysfs_root will be used as the parent directory. This allows us to tear down
top level symlinks created via sysfs_create_link(), which already has
similar handling of a NULL parent object.

Signed-off-by: Mark Fasheh <[email protected]>
---
fs/sysfs/symlink.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c
index 5f66c44..817f596 100644
--- a/fs/sysfs/symlink.c
+++ b/fs/sysfs/symlink.c
@@ -87,7 +87,14 @@ int sysfs_create_link(struct kobject * kobj, struct kobject * target, const char

void sysfs_remove_link(struct kobject * kobj, const char * name)
{
- sysfs_hash_and_remove(kobj->sd, name);
+ struct sysfs_dirent *parent_sd = NULL;
+
+ if (!kobj)
+ parent_sd = &sysfs_root;
+ else
+ parent_sd = kobj->sd;
+
+ sysfs_hash_and_remove(parent_sd, name);
}

static int sysfs_get_target_path(struct sysfs_dirent *parent_sd,
--
1.5.3.6