linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH 1/5] st: Use static class attributes
  2012-05-17  7:32   ` James Bottomley
@ 2012-05-14 23:27     ` Lee Duncan
  0 siblings, 0 replies; 6+ messages in thread
From: Lee Duncan @ 2012-05-14 23:27 UTC (permalink / raw)
  To: James Bottomley; +Cc: linux-scsi, linux-kernel, kai.makisara, jeffm

Thanks. I will resend.

On 05/17/2012 12:32 AM, James Bottomley wrote:
> On Wed, 2012-05-16 at 21:01 -0700, Lee Duncan wrote:
>> Sorry. This is actually
>>
>> Signed-off-by: Jeff Mahoney <jeffm@suse.com>
>> Reviewed-by: Lee Duncan <lduncan@suse.com>
>>
>> Apologies. The other patches in the set are labeled correctly.
> 
> Actually, no, in this case, I need a From: field at the top as well for
> the author.
> 
> You obviously used git to generate them, so either
> 
> git show --pretty=email
> 
> or
> 
> git format-patch -k
> 
> Will produce the right form
> 
> James
> 
> 
> .

-- 
Lee Duncan
SUSE Labs

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/5] st: Use static class attributes
@ 2012-05-17  3:56 Lee Duncan
  2012-05-17  4:01 ` Lee Duncan
  2012-05-18  2:51 ` Matthew Wilcox
  0 siblings, 2 replies; 6+ messages in thread
From: Lee Duncan @ 2012-05-17  3:56 UTC (permalink / raw)
  To: linux-scsi; +Cc: linux-kernel, kai.makisara, jeffm

st currently sets up and tears down class attributes manually for
every tape drive in the system. This patch uses a statically defined
class with class attributes to let the device core do it for us.

Signed-off-by: Lee Duncan <lduncan@suse.de>
---
 drivers/scsi/st.c |   74 ++++++++++++++++++++++++-----------------------------
 1 file changed, 33 insertions(+), 41 deletions(-)

diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index e41998c..532543c 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -84,7 +84,8 @@ static int try_wdio = 1;
 static int st_dev_max;
 static int st_nr_dev;
 
-static struct class *st_sysfs_class;
+extern struct class st_sysfs_class;
+extern struct device_attribute st_dev_attrs[];
 
 MODULE_AUTHOR("Kai Makisara");
 MODULE_DESCRIPTION("SCSI tape (st) driver");
@@ -4195,7 +4196,7 @@ out_free_tape:
 			if (STm->cdevs[j]) {
 				if (cdev == STm->cdevs[j])
 					cdev = NULL;
-					device_destroy(st_sysfs_class,
+					device_destroy(&st_sysfs_class,
 						       MKDEV(SCSI_TAPE_MAJOR,
 							     TAPE_MINOR(i, mode, j)));
 				cdev_del(STm->cdevs[j]);
@@ -4236,7 +4237,7 @@ static int st_remove(struct device *dev)
 					  "tape");
 			for (mode = 0; mode < ST_NBR_MODES; ++mode) {
 				for (j=0; j < 2; j++) {
-					device_destroy(st_sysfs_class,
+					device_destroy(&st_sysfs_class,
 						       MKDEV(SCSI_TAPE_MAJOR,
 							     TAPE_MINOR(i, mode, j)));
 					cdev_del(tpnt->modes[mode].cdevs[j]);
@@ -4283,6 +4284,11 @@ static void scsi_tape_release(struct kref *kref)
 	return;
 }
 
+struct class st_sysfs_class = {
+	.name = "scsi_tape",
+	.dev_attrs = st_dev_attrs,
+};
+
 static int __init init_st(void)
 {
 	int err;
@@ -4292,10 +4298,10 @@ static int __init init_st(void)
 	printk(KERN_INFO "st: Version %s, fixed bufsize %d, s/g segs %d\n",
 		verstr, st_fixed_buffer_size, st_max_sg_segs);
 
-	st_sysfs_class = class_create(THIS_MODULE, "scsi_tape");
-	if (IS_ERR(st_sysfs_class)) {
-		printk(KERN_ERR "Unable create sysfs class for SCSI tapes\n");
-		return PTR_ERR(st_sysfs_class);
+	err = class_register(&st_sysfs_class);
+	if (err) {
+		printk(KERN_ERR "Unable register sysfs class for SCSI tapes\n");
+		return err;
 	}
 
 	err = register_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
@@ -4322,7 +4328,7 @@ err_chrdev:
 	unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
 				 ST_MAX_TAPE_ENTRIES);
 err_class:
-	class_destroy(st_sysfs_class);
+	class_unregister(&st_sysfs_class);
 	return err;
 }
 
@@ -4332,7 +4338,7 @@ static void __exit exit_st(void)
 	scsi_unregister_driver(&st_template.gendrv);
 	unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
 				 ST_MAX_TAPE_ENTRIES);
-	class_destroy(st_sysfs_class);
+	class_unregister(&st_sysfs_class);
 	kfree(scsi_tapes);
 	printk(KERN_INFO "st: Unloaded.\n");
 }
@@ -4405,10 +4411,9 @@ static void do_remove_sysfs_files(void)
 	driver_remove_file(sysfs, &driver_attr_try_direct_io);
 }
 
-
 /* The sysfs simple class interface */
 static ssize_t
-st_defined_show(struct device *dev, struct device_attribute *attr, char *buf)
+defined_show(struct device *dev, struct device_attribute *attr, char *buf)
 {
 	struct st_modedef *STm = dev_get_drvdata(dev);
 	ssize_t l = 0;
@@ -4417,10 +4422,9 @@ st_defined_show(struct device *dev, struct device_attribute *attr, char *buf)
 	return l;
 }
 
-DEVICE_ATTR(defined, S_IRUGO, st_defined_show, NULL);
-
 static ssize_t
-st_defblk_show(struct device *dev, struct device_attribute *attr, char *buf)
+default_blksize_show(struct device *dev, struct device_attribute *attr,
+		     char *buf)
 {
 	struct st_modedef *STm = dev_get_drvdata(dev);
 	ssize_t l = 0;
@@ -4429,10 +4433,10 @@ st_defblk_show(struct device *dev, struct device_attribute *attr, char *buf)
 	return l;
 }
 
-DEVICE_ATTR(default_blksize, S_IRUGO, st_defblk_show, NULL);
 
 static ssize_t
-st_defdensity_show(struct device *dev, struct device_attribute *attr, char *buf)
+default_density_show(struct device *dev, struct device_attribute *attr,
+		     char *buf)
 {
 	struct st_modedef *STm = dev_get_drvdata(dev);
 	ssize_t l = 0;
@@ -4443,11 +4447,9 @@ st_defdensity_show(struct device *dev, struct device_attribute *attr, char *buf)
 	return l;
 }
 
-DEVICE_ATTR(default_density, S_IRUGO, st_defdensity_show, NULL);
-
 static ssize_t
-st_defcompression_show(struct device *dev, struct device_attribute *attr,
-		       char *buf)
+default_compression_show(struct device *dev, struct device_attribute *attr,
+			 char *buf)
 {
 	struct st_modedef *STm = dev_get_drvdata(dev);
 	ssize_t l = 0;
@@ -4456,10 +4458,8 @@ st_defcompression_show(struct device *dev, struct device_attribute *attr,
 	return l;
 }
 
-DEVICE_ATTR(default_compression, S_IRUGO, st_defcompression_show, NULL);
-
 static ssize_t
-st_options_show(struct device *dev, struct device_attribute *attr, char *buf)
+options_show(struct device *dev, struct device_attribute *attr, char *buf)
 {
 	struct st_modedef *STm = dev_get_drvdata(dev);
 	struct scsi_tape *STp;
@@ -4498,7 +4498,14 @@ st_options_show(struct device *dev, struct device_attribute *attr, char *buf)
 	return l;
 }
 
-DEVICE_ATTR(options, S_IRUGO, st_options_show, NULL);
+struct device_attribute st_dev_attrs[] = {
+	__ATTR_RO(defined),
+	__ATTR_RO(default_blksize),
+	__ATTR_RO(default_density),
+	__ATTR_RO(default_compression),
+	__ATTR_RO(options),
+	__ATTR_NULL,
+};
 
 static int do_create_class_files(struct scsi_tape *STp, int dev_num, int mode)
 {
@@ -4513,7 +4520,8 @@ static int do_create_class_files(struct scsi_tape *STp, int dev_num, int mode)
 		snprintf(name, 10, "%s%s%s", rew ? "n" : "",
 			 STp->disk->disk_name, st_formats[i]);
 		st_class_member =
-			device_create(st_sysfs_class, &STp->device->sdev_gendev,
+			device_create(&st_sysfs_class,
+				      &STp->device->sdev_gendev,
 				      MKDEV(SCSI_TAPE_MAJOR,
 					    TAPE_MINOR(dev_num, mode, rew)),
 				      &STp->modes[mode], "%s", name);
@@ -4524,22 +4532,6 @@ static int do_create_class_files(struct scsi_tape *STp, int dev_num, int mode)
 			goto out;
 		}
 
-		error = device_create_file(st_class_member,
-					   &dev_attr_defined);
-		if (error) goto out;
-		error = device_create_file(st_class_member,
-					   &dev_attr_default_blksize);
-		if (error) goto out;
-		error = device_create_file(st_class_member,
-					   &dev_attr_default_density);
-		if (error) goto out;
-		error = device_create_file(st_class_member,
-					   &dev_attr_default_compression);
-		if (error) goto out;
-		error = device_create_file(st_class_member,
-					   &dev_attr_options);
-		if (error) goto out;
-
 		if (mode == 0 && rew == 0) {
 			error = sysfs_create_link(&STp->device->sdev_gendev.kobj,
 						  &st_class_member->kobj,
-- 
1.7.9.2

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/5] st: Use static class attributes
  2012-05-17  3:56 [PATCH 1/5] st: Use static class attributes Lee Duncan
@ 2012-05-17  4:01 ` Lee Duncan
  2012-05-17  7:32   ` James Bottomley
  2012-05-18  2:51 ` Matthew Wilcox
  1 sibling, 1 reply; 6+ messages in thread
From: Lee Duncan @ 2012-05-17  4:01 UTC (permalink / raw)
  To: linux-scsi; +Cc: linux-kernel, kai.makisara, jeffm

Sorry. This is actually

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Reviewed-by: Lee Duncan <lduncan@suse.com>

Apologies. The other patches in the set are labeled correctly.

On 05/16/2012 08:56 PM, Lee Duncan wrote:
> st currently sets up and tears down class attributes manually for
> every tape drive in the system. This patch uses a statically defined
> class with class attributes to let the device core do it for us.
> 
> Signed-off-by: Lee Duncan <lduncan@suse.de>
> ---
>  drivers/scsi/st.c |   74 ++++++++++++++++++++++++-----------------------------
>  1 file changed, 33 insertions(+), 41 deletions(-)
> 
> diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
> index e41998c..532543c 100644
> --- a/drivers/scsi/st.c
> +++ b/drivers/scsi/st.c
> @@ -84,7 +84,8 @@ static int try_wdio = 1;
>  static int st_dev_max;
>  static int st_nr_dev;
>  
> -static struct class *st_sysfs_class;
> +extern struct class st_sysfs_class;
> +extern struct device_attribute st_dev_attrs[];
>  
>  MODULE_AUTHOR("Kai Makisara");
>  MODULE_DESCRIPTION("SCSI tape (st) driver");
> @@ -4195,7 +4196,7 @@ out_free_tape:
>  			if (STm->cdevs[j]) {
>  				if (cdev == STm->cdevs[j])
>  					cdev = NULL;
> -					device_destroy(st_sysfs_class,
> +					device_destroy(&st_sysfs_class,
>  						       MKDEV(SCSI_TAPE_MAJOR,
>  							     TAPE_MINOR(i, mode, j)));
>  				cdev_del(STm->cdevs[j]);
> @@ -4236,7 +4237,7 @@ static int st_remove(struct device *dev)
>  					  "tape");
>  			for (mode = 0; mode < ST_NBR_MODES; ++mode) {
>  				for (j=0; j < 2; j++) {
> -					device_destroy(st_sysfs_class,
> +					device_destroy(&st_sysfs_class,
>  						       MKDEV(SCSI_TAPE_MAJOR,
>  							     TAPE_MINOR(i, mode, j)));
>  					cdev_del(tpnt->modes[mode].cdevs[j]);
> @@ -4283,6 +4284,11 @@ static void scsi_tape_release(struct kref *kref)
>  	return;
>  }
>  
> +struct class st_sysfs_class = {
> +	.name = "scsi_tape",
> +	.dev_attrs = st_dev_attrs,
> +};
> +
>  static int __init init_st(void)
>  {
>  	int err;
> @@ -4292,10 +4298,10 @@ static int __init init_st(void)
>  	printk(KERN_INFO "st: Version %s, fixed bufsize %d, s/g segs %d\n",
>  		verstr, st_fixed_buffer_size, st_max_sg_segs);
>  
> -	st_sysfs_class = class_create(THIS_MODULE, "scsi_tape");
> -	if (IS_ERR(st_sysfs_class)) {
> -		printk(KERN_ERR "Unable create sysfs class for SCSI tapes\n");
> -		return PTR_ERR(st_sysfs_class);
> +	err = class_register(&st_sysfs_class);
> +	if (err) {
> +		printk(KERN_ERR "Unable register sysfs class for SCSI tapes\n");
> +		return err;
>  	}
>  
>  	err = register_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
> @@ -4322,7 +4328,7 @@ err_chrdev:
>  	unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
>  				 ST_MAX_TAPE_ENTRIES);
>  err_class:
> -	class_destroy(st_sysfs_class);
> +	class_unregister(&st_sysfs_class);
>  	return err;
>  }
>  
> @@ -4332,7 +4338,7 @@ static void __exit exit_st(void)
>  	scsi_unregister_driver(&st_template.gendrv);
>  	unregister_chrdev_region(MKDEV(SCSI_TAPE_MAJOR, 0),
>  				 ST_MAX_TAPE_ENTRIES);
> -	class_destroy(st_sysfs_class);
> +	class_unregister(&st_sysfs_class);
>  	kfree(scsi_tapes);
>  	printk(KERN_INFO "st: Unloaded.\n");
>  }
> @@ -4405,10 +4411,9 @@ static void do_remove_sysfs_files(void)
>  	driver_remove_file(sysfs, &driver_attr_try_direct_io);
>  }
>  
> -
>  /* The sysfs simple class interface */
>  static ssize_t
> -st_defined_show(struct device *dev, struct device_attribute *attr, char *buf)
> +defined_show(struct device *dev, struct device_attribute *attr, char *buf)
>  {
>  	struct st_modedef *STm = dev_get_drvdata(dev);
>  	ssize_t l = 0;
> @@ -4417,10 +4422,9 @@ st_defined_show(struct device *dev, struct device_attribute *attr, char *buf)
>  	return l;
>  }
>  
> -DEVICE_ATTR(defined, S_IRUGO, st_defined_show, NULL);
> -
>  static ssize_t
> -st_defblk_show(struct device *dev, struct device_attribute *attr, char *buf)
> +default_blksize_show(struct device *dev, struct device_attribute *attr,
> +		     char *buf)
>  {
>  	struct st_modedef *STm = dev_get_drvdata(dev);
>  	ssize_t l = 0;
> @@ -4429,10 +4433,10 @@ st_defblk_show(struct device *dev, struct device_attribute *attr, char *buf)
>  	return l;
>  }
>  
> -DEVICE_ATTR(default_blksize, S_IRUGO, st_defblk_show, NULL);
>  
>  static ssize_t
> -st_defdensity_show(struct device *dev, struct device_attribute *attr, char *buf)
> +default_density_show(struct device *dev, struct device_attribute *attr,
> +		     char *buf)
>  {
>  	struct st_modedef *STm = dev_get_drvdata(dev);
>  	ssize_t l = 0;
> @@ -4443,11 +4447,9 @@ st_defdensity_show(struct device *dev, struct device_attribute *attr, char *buf)
>  	return l;
>  }
>  
> -DEVICE_ATTR(default_density, S_IRUGO, st_defdensity_show, NULL);
> -
>  static ssize_t
> -st_defcompression_show(struct device *dev, struct device_attribute *attr,
> -		       char *buf)
> +default_compression_show(struct device *dev, struct device_attribute *attr,
> +			 char *buf)
>  {
>  	struct st_modedef *STm = dev_get_drvdata(dev);
>  	ssize_t l = 0;
> @@ -4456,10 +4458,8 @@ st_defcompression_show(struct device *dev, struct device_attribute *attr,
>  	return l;
>  }
>  
> -DEVICE_ATTR(default_compression, S_IRUGO, st_defcompression_show, NULL);
> -
>  static ssize_t
> -st_options_show(struct device *dev, struct device_attribute *attr, char *buf)
> +options_show(struct device *dev, struct device_attribute *attr, char *buf)
>  {
>  	struct st_modedef *STm = dev_get_drvdata(dev);
>  	struct scsi_tape *STp;
> @@ -4498,7 +4498,14 @@ st_options_show(struct device *dev, struct device_attribute *attr, char *buf)
>  	return l;
>  }
>  
> -DEVICE_ATTR(options, S_IRUGO, st_options_show, NULL);
> +struct device_attribute st_dev_attrs[] = {
> +	__ATTR_RO(defined),
> +	__ATTR_RO(default_blksize),
> +	__ATTR_RO(default_density),
> +	__ATTR_RO(default_compression),
> +	__ATTR_RO(options),
> +	__ATTR_NULL,
> +};
>  
>  static int do_create_class_files(struct scsi_tape *STp, int dev_num, int mode)
>  {
> @@ -4513,7 +4520,8 @@ static int do_create_class_files(struct scsi_tape *STp, int dev_num, int mode)
>  		snprintf(name, 10, "%s%s%s", rew ? "n" : "",
>  			 STp->disk->disk_name, st_formats[i]);
>  		st_class_member =
> -			device_create(st_sysfs_class, &STp->device->sdev_gendev,
> +			device_create(&st_sysfs_class,
> +				      &STp->device->sdev_gendev,
>  				      MKDEV(SCSI_TAPE_MAJOR,
>  					    TAPE_MINOR(dev_num, mode, rew)),
>  				      &STp->modes[mode], "%s", name);
> @@ -4524,22 +4532,6 @@ static int do_create_class_files(struct scsi_tape *STp, int dev_num, int mode)
>  			goto out;
>  		}
>  
> -		error = device_create_file(st_class_member,
> -					   &dev_attr_defined);
> -		if (error) goto out;
> -		error = device_create_file(st_class_member,
> -					   &dev_attr_default_blksize);
> -		if (error) goto out;
> -		error = device_create_file(st_class_member,
> -					   &dev_attr_default_density);
> -		if (error) goto out;
> -		error = device_create_file(st_class_member,
> -					   &dev_attr_default_compression);
> -		if (error) goto out;
> -		error = device_create_file(st_class_member,
> -					   &dev_attr_options);
> -		if (error) goto out;
> -
>  		if (mode == 0 && rew == 0) {
>  			error = sysfs_create_link(&STp->device->sdev_gendev.kobj,
>  						  &st_class_member->kobj,

-- 
Lee Duncan
SUSE Labs

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/5] st: Use static class attributes
  2012-05-17  4:01 ` Lee Duncan
@ 2012-05-17  7:32   ` James Bottomley
  2012-05-14 23:27     ` Lee Duncan
  0 siblings, 1 reply; 6+ messages in thread
From: James Bottomley @ 2012-05-17  7:32 UTC (permalink / raw)
  To: Lee Duncan; +Cc: linux-scsi, linux-kernel, kai.makisara, jeffm

On Wed, 2012-05-16 at 21:01 -0700, Lee Duncan wrote:
> Sorry. This is actually
> 
> Signed-off-by: Jeff Mahoney <jeffm@suse.com>
> Reviewed-by: Lee Duncan <lduncan@suse.com>
> 
> Apologies. The other patches in the set are labeled correctly.

Actually, no, in this case, I need a From: field at the top as well for
the author.

You obviously used git to generate them, so either

git show --pretty=email

or

git format-patch -k

Will produce the right form

James

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/5] st: Use static class attributes
  2012-05-17  3:56 [PATCH 1/5] st: Use static class attributes Lee Duncan
  2012-05-17  4:01 ` Lee Duncan
@ 2012-05-18  2:51 ` Matthew Wilcox
  2012-05-21 23:04   ` Lee Duncan
  1 sibling, 1 reply; 6+ messages in thread
From: Matthew Wilcox @ 2012-05-18  2:51 UTC (permalink / raw)
  To: Lee Duncan; +Cc: linux-scsi, linux-kernel, kai.makisara, jeffm

On Wed, May 16, 2012 at 08:56:13PM -0700, Lee Duncan wrote:
> @@ -84,7 +84,8 @@ static int try_wdio = 1;
>  static int st_dev_max;
>  static int st_nr_dev;
>  
> -static struct class *st_sysfs_class;
> +extern struct class st_sysfs_class;

Umm ... 'extern' ...

> @@ -4283,6 +4284,11 @@ static void scsi_tape_release(struct kref *kref)
>  	return;
>  }
>  
> +struct class st_sysfs_class = {
> +	.name = "scsi_tape",
> +	.dev_attrs = st_dev_attrs,
> +};

... and then you define it?

I think you meant to say "struct class st_sysfs_class;" at the top,
and then later:

static struct class st_sysfs_class = {
...

> +struct device_attribute st_dev_attrs[] = {

Should also be static


-- 
Matthew Wilcox				Intel Open Source Technology Centre
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours.  We can't possibly take such
a retrograde step."

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/5] st: Use static class attributes
  2012-05-18  2:51 ` Matthew Wilcox
@ 2012-05-21 23:04   ` Lee Duncan
  0 siblings, 0 replies; 6+ messages in thread
From: Lee Duncan @ 2012-05-21 23:04 UTC (permalink / raw)
  To: Matthew Wilcox; +Cc: linux-scsi, linux-kernel, kai.makisara, jeffm

Jeff would normally reply to this, since it is his patch, but he is
otherwise occupied right now, so I will respond.

On 05/17/2012 07:51 PM, Matthew Wilcox wrote:
> On Wed, May 16, 2012 at 08:56:13PM -0700, Lee Duncan wrote:
>> @@ -84,7 +84,8 @@ static int try_wdio = 1;
>>  static int st_dev_max;
>>  static int st_nr_dev;
>>  
>> -static struct class *st_sysfs_class;
>> +extern struct class st_sysfs_class;
> 
> Umm ... 'extern' ...
> 
>> @@ -4283,6 +4284,11 @@ static void scsi_tape_release(struct kref *kref)
>>  	return;
>>  }
>>  
>> +struct class st_sysfs_class = {
>> +	.name = "scsi_tape",
>> +	.dev_attrs = st_dev_attrs,
>> +};
> 
> ... and then you define it?
> 
> I think you meant to say "struct class st_sysfs_class;" at the top,
> and then later:
> 
> static struct class st_sysfs_class = {
> ...
> 
>> +struct device_attribute st_dev_attrs[] = {
> 
> Should also be static
> 
> 

The compiler (gcc 4.6.2) does not accept a forward declaration that does
not match the data definition. When I tried your suggestion, the
compiler complained that the two declarations did not match, but it
accepted it if both the forward declaration and the data declaration are
"static".

I'll resubmit v3 of the patch set with this change.
-- 
Lee Duncan
SUSE Labs

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-05-21 23:04 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-17  3:56 [PATCH 1/5] st: Use static class attributes Lee Duncan
2012-05-17  4:01 ` Lee Duncan
2012-05-17  7:32   ` James Bottomley
2012-05-14 23:27     ` Lee Duncan
2012-05-18  2:51 ` Matthew Wilcox
2012-05-21 23:04   ` Lee Duncan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).