All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcelo Tosatti <marcelo.tosatti@cyclades.com>
To: Luben Tuikov <luben_tuikov@adaptec.com>, slee@netengine1.com
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	James Bottomley <James.Bottomley@HansenPartnership.com>
Subject: Re: [PATCH] fix units/partition count in sd.c (2.4.x)
Date: Sat, 26 Feb 2005 10:48:52 -0300	[thread overview]
Message-ID: <20050226134851.GC16717@logos.cnet> (raw)
In-Reply-To: <42137399.5080600@adaptec.com>

On Wed, Feb 16, 2005 at 11:23:53AM -0500, Luben Tuikov wrote:
> Hi,
> 
> This patch fixes the nr_real count in sd.c, which is also used
> in genhd.c to print out the partitions/units.  The problem is that
> nr_real is decremented on detach, the genhd's nr_sects is
> cleared but the entry is still there and is being counted
> for when displaying the partitions.  Thus when nr_real
> is decremented _and_ a 0-ed partition/unit is counted,
> we get to not display 1 or more entries of the tail of
> the list.
> 
> The solution is to not decrement nr_real on detach, effectively
> never decrementing it, and so that it doesn't grow without a bound,
> to throttle it on attach, incrementing it only if it would be
> smaller than nr_dev.
> 
> This was observed on a RH kernel and on the current BK kernel.
> Tested and fixed on 2.4.30-pre1 (BK).  This patch is against 2.4.30-pre1.
> 
> To reproduce: assume 4 scsi disks sda, sdb, sdc, sdd.
> #echo "scsi remove-single-device <sdb-HCTL>" > /proc/scsi/scsi
> #cat /proc/partitions
> <<sdb _and_ sdd are not listed>>

Luben,

On James Bottomley advice I have applied Soo Lee's fix, which looks cleaner.

Also as James notice this will increase overhead of /proc/partitions which might be
a problem on higher-end systems with many devices. 

Testing of it on such systems is highly appreciated.


# 05/02/26      slee@netengine1.com     1.1558
# [PATCH] Fix units/partition count in sd.c
#
# Symptom:
#    When a scsi disk is removed other scsi disk with biggest minor #
#    disapears in /proc/partition at the same time.
#
# Cause and fix:
#    sd.c decreases nr_real on disk removal but because nr_real is not
#    real # of devices but max # of devices of a major #,
#    it doesn't need to be changed on disk add/remove.
#
# 2.6 has little different structure but it does like this
#
# sd.c:sd_probe()
#       gd->minors = 16;
# --------------------------------------------
#
diff -Nru a/drivers/scsi/sd.c b/drivers/scsi/sd.c
--- a/drivers/scsi/sd.c Sat Feb 26 10:46:42 2005
+++ b/drivers/scsi/sd.c Sat Feb 26 10:46:42 2005
@@ -1220,7 +1220,7 @@
                        goto cleanup_gendisks_part;
                memset(sd_gendisks[i].part, 0, (SCSI_DISKS_PER_MAJOR << 4) * sizeof(struct hd_struct));
                sd_gendisks[i].sizes = sd_sizes + (i * SCSI_DISKS_PER_MAJOR << 4);
-               sd_gendisks[i].nr_real = 0;
+               sd_gendisks[i].nr_real = SCSI_DISKS_PER_MAJOR;
                sd_gendisks[i].real_devices =
                    (void *) (rscsi_disks + i * SCSI_DISKS_PER_MAJOR);
        }
@@ -1333,7 +1333,6 @@
        rscsi_disks[i].device = SDp;
        rscsi_disks[i].has_part_table = 0;
        sd_template.nr_dev++;
-       SD_GENDISK(i).nr_real++;
         devnum = i % SCSI_DISKS_PER_MAJOR;
         SD_GENDISK(i).de_arr[devnum] = SDp->de;
         if (SDp->removable)
@@ -1447,7 +1446,6 @@
                        SDp->attached--;
                        sd_template.dev_noticed--;
                        sd_template.nr_dev--;
-                       SD_GENDISK(i).nr_real--;
                        return;
                }
        return;




  reply	other threads:[~2005-02-26 18:08 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-16 16:23 [PATCH] fix units/partition count in sd.c (2.4.x) Luben Tuikov
2005-02-26 13:48 ` Marcelo Tosatti [this message]
  -- strict thread matches above, loose matches on Subject: below --
2005-02-26 19:29 Soo Lee
2005-02-16 22:42 soohoon.lee
2005-02-16 21:17 soohoon.lee
2005-02-16 21:05 soohoon.lee
2005-02-14 22:40 Luben Tuikov

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=20050226134851.GC16717@logos.cnet \
    --to=marcelo.tosatti@cyclades.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luben_tuikov@adaptec.com \
    --cc=slee@netengine1.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.