Subject: Re: [1/4] DST: Distributed storage documentation.

From: Kay Sievers <[email-masked]>
Date: Mon, 10 Dec 2007 15:31:48 +0100

On Mon, 2007-12-10 at 15:58 +0300, Evgeniy Polyakov wrote:
> On Mon, Dec 10, 2007 at 01:51:43PM +0100, Kay Sievers ([email-masked]) wrote:
> > On Dec 10, 2007 12:47 PM, Evgeniy Polyakov <[email-masked]> wrote:
> > > diff --git a/Documentation/dst/sysfs.txt b/Documentation/dst/sysfs.txt
> > > new file mode 100644
> > > index 0000000..79d79dc
> > > --- /dev/null
> > > +++ b/Documentation/dst/sysfs.txt
> > > @@ -0,0 +1,30 @@
> > > +This file describes sysfs files created for each storage.
> > > +
> > > +1. Per-storage files.
> > > +Each storage has its own dir /sysfs/devices/$storage_name,
> > 
> > It's always /sys/devices/.
> 
> I meant that for each new device, it will be placed into
> /sys/devices/its_name, but it can also be accessed via
> /sys/bus/dst/devices/

Still, it looks like a path. :)

Please don't reference any device directly with a /sys/devices/ path.
You have to use the subsystem links to the devices
in /sys/bus/dst/devices/. Devices are free to move around
in /sys/devices, even during runtime. Yours don't do, but anyway, please
remove all mentioning of direct access to /sys/devices/.

Btw, where is the top-level /sys/devices/storage/ coming from? I don't
see that in the code. We don't accept any new "virtual parents" here.
Your devices will automatically appear in /sys/devices/virtual/dst/, and
not below your own parent. But that path does not matter anyway, because
you should only access them from the /sys/bus/dst/devices/ directory.

And in general please don't claim generic names like "storage" in any
namespace for a very specific subsystem like this.

> > > +which contains following files:
> > > +
> > > +alg - contains name of the algorithm used to created given storage
> > > +name - name of the storage
> > > +nodes - map of the storage (list of nodes and their sizes and starts)
> > > +remove_all_nodes - writable file which allows to remove all nodes from given
> > > +       storage
> > > +n-$start-$cookie - per node directory, where
> > > +       $start - start of the given node in sectors,
> > > +       $cookie - unique node's id used by DST
> > > +
> > > +2. Per-node files.
> > > +Node's files are located in /sysfs/devices/$storage_name/n-$start-$cookie
> > > +directory, described above.
> > 
> > To which class or bus do the devices you create belong? Care to show a
> > "tree" or "ls -la" of the device?
> 
> It is 'dst' bus.
> 
> uganda:~/codes# ls -la /sys/devices/staorge/
> total 0
> drwxr-xr-x 4 root root    0 2007-12-10 11:46 .
> drwxr-xr-x 9 root root    0 2007-12-10 11:46 ..
> -r--r--r-- 1 root root 4096 2007-12-10 11:46 alg
> lrwxrwxrwx 1 root root    0 2007-12-10 11:46 bus -> ../../bus/dst
> drwxr-xr-x 3 root root    0 2007-12-10 11:46 n-0-ffff81003e24117
> -r--r--r-- 1 root root 4096 2007-12-10 11:46 name
> -r--r--r-- 1 root root 4096 2007-12-10 11:46 nodes
> drwxr-xr-x 2 root root    0 2007-12-10 11:46 power
> -rw-r--r-- 1 root root 4096 2007-12-10 11:46 remove_all_nodes
> lrwxrwxrwx 1 root root    0 2007-12-10 11:46 subsystem -> ../../bus/dst
> -rw-r--r-- 1 root root 4096 2007-12-10 11:46 uevent

Ok, how does:
  ls -l /sys/devices/storage/n-0-ffff81003e24117
look?

> uganda:~/codes# ls -l /sys/bus/dst/
> total 0
> drwxr-xr-x 2 root root    0 2007-12-10 09:52 devices
> drwxr-xr-x 2 root root    0 2007-12-10 09:52 drivers
> -rw-r--r-- 1 root root 4096 2007-12-10 11:46 drivers_autoprobe
> --w------- 1 root root 4096 2007-12-10 11:46 drivers_probe

How does:
  ls -l /sys/bus/dst/devices
look?

Further questions:
Why do you do your own refcounting instead of using kref?
Why don't you use groups for the attributes?
Why don't you use default attributes for the device, where you get all
error handling done by the core.

Kay