Re: observations on configfs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Aug 29, 2006 at 06:14:30PM +0200, Johannes Berg wrote:
> I recently tried to use configfs for configuring (virtual) network
> interfaces on top of cfg80211. Here's what I noticed then and in later
> thoughts about it.

	Thanks!  I always appreciate thoughts and comments.

>  (1) it is possible to have
> 
>      | $ ls /config
>      | 02-example  02-example
> 
>      Seems like that should be prohibited when registering the new
> configfs subsystem.

	Hmm, yeah, this is a bug.  I've added
http://oss.oracle.com/bugzilla/show_bug.cgi?id=755.  Thanks for
reporting this!

>  (2) why is are there no show/store in struct configfs_attribute? That
> leads to complications like this (straight from ocfs2):
> 
> struct o2nm_node_attribute {
>         struct configfs_attribute attr;
>         ssize_t (*show)(struct o2nm_node *, char *);
>         ssize_t (*store)(struct o2nm_node *, const char *, size_t);
> };
> 
> static struct o2nm_node_attribute o2nm_node_attr_num = {
>         .attr   = { .ca_owner = THIS_MODULE,
>                     .ca_name = "num",
>                     .ca_mode = S_IRUGO | S_IWUSR },
>         .show   = o2nm_node_num_read,
>         .store  = o2nm_node_num_write,
> };
> 
> ...
> 
> I suppose I could ask the same of sysfs, but there it actually seems to
> make sense because it only needs to be implemented once per subsystem.
> The same is true of configfs, however for configfs one usually has to
> implement a new subsystem to get useful functionality...

	I did get this straight from sysfs.  You are right, there is
less sharing of such things in configfs compared to sysfs.  Here's the
thing: this scheme allows the generic code (the ->show() and ->store()
methods) to take struct configfs_attribute, but the actual worker
functions take context appropriate objects, such a struct o2nm_node in
the example you placed.  Without this indirection, every ->show() would
have to do its own conversion from configfs_attribute to the context
appropriate structures.
 
>  (3) just thought about the pending/live thing a bit more. For one I
> notice that it is not implemented, which is sad because I could really
> use it well here. Secondly, and more importantly, I think the concept is
> slightly flawed.

	Yeah, I'm sorry I haven't gotten to it yet.

> If I have virtual devices represented in configfs, they are all
> net_devices at their core, of course. Assuming they are below
> /config/cfg80211/wiphy0/, say eth0 is created as pending/eth0. Then, you
> move it to live/eth0 at which point the netdevice is allocated and
> registered (if it fails due to name collision you need to chose another
> name by renaming it in pending).

	Also note that you can fail the callback in your driver,
preventing the rename(2) -- eg, if a particular option needs to be set
but isn't, etc.

> This is all great, but say then I want to change a few parameters of the
> interface. So I move it to pending again. At this point, we run into
> problems. We can either (a) remove the net_device or (b) keep it live.

	The plan is (c).  Build a new one in pending, and rename(2) it
on top of the current one.

> Hence, I think it should be slightly redesigned to allow for another
> case, namely hardlinking the directory from live into pending (make sure
> name stays the same) at which point it isn't removed. Then, moving it
> from live to pending would be taken as an indication to actually remove
> the net_device associated with it, and linking it just as a
> reconfiguration request.

	Linux doesn't support directory hardlinks, for good reason.

Joel

-- 

Life's Little Instruction Book #313

	"Never underestimate the power of love."

Joel Becker
Principal Software Developer
Oracle
E-mail: [email protected]
Phone: (650) 506-8127
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux