mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* dirty md raid5 slab bio leak
@ 2005-06-27 20:22 Ernst Herzberg
  2005-06-28  1:02 ` Neil Brown
  0 siblings, 1 reply; 8+ messages in thread
From: Ernst Herzberg @ 2005-06-27 20:22 UTC (permalink / raw)
  To: linux-kernel

Moin.

The machine:

amd64, 2G mem, 4 SATA disks on SiI 3114 [SATALink/SATARaid] Serial ATA 
Controller, configured as md raid5/raid1, using [cfq-scheduler], running 
2.6.12-rc6 (application postgresql)

The story:

This morning the machine was very slow, first check shows that the machine 
swaps and all disk i/o are very slow.

Looking further slabtop shows

 Active / Total Objects (% used)    : 19821561 / 19828316 (100.0%)
 Active / Total Slabs (% used)      : 369737 / 369739 (100.0%)
 Active / Total Caches (% used)     : 80 / 120 (66.7%)
 Active / Total Size (% used)       : 1415795.50K / 1416586.19K (99.9%)
 Minimum / Average / Maximum Object : 0.02K / 0.07K / 128.00K

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
9865575 9864690  99%    0.02K  43847      225    175388K biovec-1
9865254 9864654  99%    0.12K 318234       31   1272936K bio
 28755  28755 100%    0.09K    639       45      2556K buffer_head
 16856  16856 100%    0.52K   2408        7      9632K radix_tree_node
 11286  10852  96%    0.21K    627       18      2508K dentry_cache
  5955   5953  99%    0.73K   1191        5      4764K shmem_inode_cache
  5795   3461  59%    0.06K     95       61       380K size-64
  5566   5506  98%    0.17K    253       22      1012K vm_area_struct
  3294   3294 100%    0.66K    549        6      2196K reiser_inode_cache
  3240   3212  99%    0.07K     60       54       240K sysfs_dir_cache
  2046   2046 100%    0.12K     66       31       264K size-128
  2023   1657  81%    0.03K     17      119        68K size-32

*ouch*

I decided to first compile 2.6.12 (final) and reboot the machine to reproduce 
the problem.

During reboot md shows that /dev/sdd are failed. Log:

[...]
Jun 23 11:23:45 c64 ata4: command 0x35 timeout, stat 0xd8 host_stat 0x0
Jun 23 11:23:45 c64 ata4: status=0xd8 { Busy }
Jun 23 11:23:45 c64 SCSI error : <3 0 0 0> return code = 0x8000002
Jun 23 11:23:45 c64 sdd: Current: sense key: Aborted Command
Jun 23 11:23:45 c64 Additional sense: Scsi parity error
Jun 23 11:23:45 c64 end_request: I/O error, dev sdd, sector 234436299
Jun 23 11:23:45 c64 raid5: Disk failure on sdd3, disabling device. Operation 
continuing on 3 devices
Jun 23 11:23:45 c64 RAID5 conf printout:
Jun 23 11:23:45 c64 --- rd:4 wd:3 fd:1
Jun 23 11:23:45 c64 disk 0, o:1, dev:sda3
Jun 23 11:23:45 c64 disk 1, o:1, dev:sdb3
Jun 23 11:23:45 c64 disk 2, o:1, dev:sdc3
Jun 23 11:23:45 c64 disk 3, o:0, dev:sdd3
Jun 23 11:23:45 c64 RAID5 conf printout:
Jun 23 11:23:45 c64 --- rd:4 wd:3 fd:1
Jun 23 11:23:45 c64 disk 0, o:1, dev:sda3
Jun 23 11:23:45 c64 disk 1, o:1, dev:sdb3
Jun 23 11:23:45 c64 disk 2, o:1, dev:sdc3
Jun 23 11:24:39 c64 ATA: abnormal status 0xD8 on port 0xFFFFC200000066C7
Jun 23 11:24:39 c64 ATA: abnormal status 0xD8 on port 0xFFFFC200000066C7
Jun 23 11:24:39 c64 ATA: abnormal status 0xD8 on port 0xFFFFC200000066C7
Jun 23 11:25:09 c64 ata4: command 0x25 timeout, stat 0xd8 host_stat 0x1
Jun 23 11:25:09 c64 ata4: status=0xd8 { Busy }
Jun 23 11:25:09 c64 SCSI error : <3 0 0 0> return code = 0x8000002
Jun 23 11:25:09 c64 sdd: Current: sense key: Aborted Command
Jun 23 11:25:09 c64 Additional sense: Scsi parity error
Jun 23 11:25:09 c64 end_request: I/O error, dev sdd, sector 2640176
Jun 23 11:25:09 c64 raid5: Disk failure on sdd2, disabling device. Operation 
continuing on 3 devices
Jun 23 11:25:09 c64 RAID5 conf printout:
Jun 23 11:25:09 c64 --- rd:4 wd:3 fd:1
Jun 23 11:25:09 c64 disk 0, o:1, dev:sda2
Jun 23 11:25:09 c64 disk 1, o:1, dev:sdb2
Jun 23 11:25:09 c64 disk 2, o:1, dev:sdc2
Jun 23 11:25:09 c64 disk 3, o:0, dev:sdd2
Jun 23 11:25:09 c64 RAID5 conf printout:
Jun 23 11:25:09 c64 --- rd:4 wd:3 fd:1
Jun 23 11:25:09 c64 disk 0, o:1, dev:sda2
Jun 23 11:25:09 c64 disk 1, o:1, dev:sdb2
Jun 23 11:25:09 c64 disk 2, o:1, dev:sdc2
[...]

(next i should look at the machines even i am at linuxtag:-)

Now i readded /dev/sdd[2,3] and everthing worked again (after checking all 
cables).

Looks like a BUG, slab should not be filled up if a disk fails.

Ok, this is a 'needed' testingmachine, but i'm willing to try reproducing it, 
if nobody else are able to do it ;-)

<earny>

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

* Re: dirty md raid5 slab bio leak
  2005-06-27 20:22 dirty md raid5 slab bio leak Ernst Herzberg
@ 2005-06-28  1:02 ` Neil Brown
  2005-06-28  4:13   ` Neil Brown
  0 siblings, 1 reply; 8+ messages in thread
From: Neil Brown @ 2005-06-28  1:02 UTC (permalink / raw)
  To: earny; +Cc: linux-kernel

On Monday June 27, list-lkml@net4u.de wrote:
> Moin.
> 
> The machine:
> 
> amd64, 2G mem, 4 SATA disks on SiI 3114 [SATALink/SATARaid] Serial ATA 
> Controller, configured as md raid5/raid1, using [cfq-scheduler], running 
> 2.6.12-rc6 (application postgresql)
> 
> The story:
> 
> This morning the machine was very slow, first check shows that the machine 
> swaps and all disk i/o are very slow.
> 
> Looking further slabtop shows
> 
>  Active / Total Objects (% used)    : 19821561 / 19828316 (100.0%)
>  Active / Total Slabs (% used)      : 369737 / 369739 (100.0%)
>  Active / Total Caches (% used)     : 80 / 120 (66.7%)
>  Active / Total Size (% used)       : 1415795.50K / 1416586.19K (99.9%)
>  Minimum / Average / Maximum Object : 0.02K / 0.07K / 128.00K
> 
>   OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
> 9865575 9864690  99%    0.02K  43847      225    175388K biovec-1
> 9865254 9864654  99%    0.12K 318234       31   1272936K bio


raid5 never allocates from these slabs, so this cannot be a raid5
problem.
raid1 does, and you mention in the intro that raid1 might be involved,
but there are now more details...
Could you say a little bit more about your setup.. How are each of
raid1 and raid5 used.  Was there any error on a drive involved in raid1?

I just checked my test machine (running 2.6.12-rc3-mm3) and it had a
really large number of bio and biovec-1 in use too (and it's been
sitting fairly idle for several days).

I've quickly reviewed the raid1 code and I cannot see a bio leak
(though that doesn't mean there isn't one..)

If anyone else has a large 'bio' slab, please report the configuration
(kernel, is md in use, etc).

NeilBrown

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

* Re: dirty md raid5 slab bio leak
  2005-06-28  1:02 ` Neil Brown
@ 2005-06-28  4:13   ` Neil Brown
  2005-06-28  4:25     ` Andrew Morton
  2005-06-28 14:27     ` dirty md raid5 slab bio leak Ernst Herzberg
  0 siblings, 2 replies; 8+ messages in thread
From: Neil Brown @ 2005-06-28  4:13 UTC (permalink / raw)
  To: earny, Andrew Morton; +Cc: linux-kernel

On Tuesday June 28, neilb@cse.unsw.edu.au wrote:
> 
> I just checked my test machine (running 2.6.12-rc3-mm3) and it had a
> really large number of bio and biovec-1 in use too (and it's been
> sitting fairly idle for several days).
> 
> I've quickly reviewed the raid1 code and I cannot see a bio leak
> (though that doesn't mean there isn't one..)
> 
> If anyone else has a large 'bio' slab, please report the configuration
> (kernel, is md in use, etc).

It's OK, I found it.  The bio leaks when writing the md superblock.

Thanks,
NeilBrown


--
insert a missing bio_put when writting the md superblock.

Without this we have a steady growth in the "bio" slab.

Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>

### Diffstat output
 ./drivers/md/md.c |    1 +
 1 files changed, 1 insertion(+)

diff ./drivers/md/md.c~current~ ./drivers/md/md.c
--- ./drivers/md/md.c~current~	2005-06-22 13:16:28.000000000 +1000
+++ ./drivers/md/md.c	2005-06-28 13:02:04.000000000 +1000
@@ -338,6 +338,7 @@ static int super_written(struct bio *bio
 
 	if (atomic_dec_and_test(&rdev->mddev->pending_writes))
 		wake_up(&rdev->mddev->sb_wait);
+	bio_put(bio);
 	return 0;
 }
 

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

* Re: dirty md raid5 slab bio leak
  2005-06-28  4:13   ` Neil Brown
@ 2005-06-28  4:25     ` Andrew Morton
  2005-06-28  6:09       ` Neil Brown
  2005-06-28 14:27     ` dirty md raid5 slab bio leak Ernst Herzberg
  1 sibling, 1 reply; 8+ messages in thread
From: Andrew Morton @ 2005-06-28  4:25 UTC (permalink / raw)
  To: Neil Brown; +Cc: earny, linux-kernel

Neil Brown <neilb@cse.unsw.edu.au> wrote:
>
> It's OK, I found it.  The bio leaks when writing the md superblock.
> 

Thanks.

>  insert a missing bio_put when writting the md superblock.

Does 2.6.12.x need this?

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

* Re: dirty md raid5 slab bio leak
  2005-06-28  4:25     ` Andrew Morton
@ 2005-06-28  6:09       ` Neil Brown
  2005-06-28  6:17         ` Andrew Morton
  0 siblings, 1 reply; 8+ messages in thread
From: Neil Brown @ 2005-06-28  6:09 UTC (permalink / raw)
  To: Andrew Morton; +Cc: earny, linux-kernel

On Monday June 27, akpm@osdl.org wrote:
> Neil Brown <neilb@cse.unsw.edu.au> wrote:
> >
> > It's OK, I found it.  The bio leaks when writing the md superblock.
> > 
> 
> Thanks.
> 
> >  insert a missing bio_put when writting the md superblock.
> 
> Does 2.6.12.x need this?

Hmmm.. probably, though it isn't Ooopsable, and isn't a security
problem.  Just a slow leak with a trivial patch...  

Is there a web-page somewhere that lists the acceptance criterea? I
didn't save the mail message.

Do I just mail the patch to stable@kernel.org ??

NeilBrown

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

* Re: dirty md raid5 slab bio leak
  2005-06-28  6:09       ` Neil Brown
@ 2005-06-28  6:17         ` Andrew Morton
  2005-07-07  1:19           ` dirty md raid5 slab bio leak [FIXED] Ernst Herzberg
  0 siblings, 1 reply; 8+ messages in thread
From: Andrew Morton @ 2005-06-28  6:17 UTC (permalink / raw)
  To: Neil Brown; +Cc: earny, linux-kernel

Neil Brown <neilb@cse.unsw.edu.au> wrote:
>
> On Monday June 27, akpm@osdl.org wrote:
> > Neil Brown <neilb@cse.unsw.edu.au> wrote:
> > >
> > > It's OK, I found it.  The bio leaks when writing the md superblock.
> > > 
> > 
> > Thanks.
> > 
> > >  insert a missing bio_put when writting the md superblock.
> > 
> > Does 2.6.12.x need this?
> 
> Hmmm.. probably, though it isn't Ooopsable, and isn't a security
> problem.  Just a slow leak with a trivial patch...  

It's a pretty sad bug if it hits you though.

> Is there a web-page somewhere that lists the acceptance criterea? I
> didn't save the mail message.

Me either.  Just send 'em any old thing and let them decide ;)

> Do I just mail the patch to stable@kernel.org ??

That's OK, I'll add it to my backport queue - we should leave it to bake in
2.6.13-rc1 for a bit first.


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

* Re: dirty md raid5 slab bio leak
  2005-06-28  4:13   ` Neil Brown
  2005-06-28  4:25     ` Andrew Morton
@ 2005-06-28 14:27     ` Ernst Herzberg
  1 sibling, 0 replies; 8+ messages in thread
From: Ernst Herzberg @ 2005-06-28 14:27 UTC (permalink / raw)
  To: linux-kernel; +Cc: Neil Brown, Andrew Morton

On Dienstag 28 Juni 2005 06:13, Neil Brown wrote:
> On Tuesday June 28, neilb@cse.unsw.edu.au wrote:
> > I just checked my test machine (running 2.6.12-rc3-mm3) and it had a
> > really large number of bio and biovec-1 in use too (and it's been
> > sitting fairly idle for several days).
> >
> > I've quickly reviewed the raid1 code and I cannot see a bio leak
> > (though that doesn't mean there isn't one..)
> >
> > If anyone else has a large 'bio' slab, please report the configuration
> > (kernel, is md in use, etc).
>
> It's OK, I found it.  The bio leaks when writing the md superblock.
>

Thanks.

Even here is my forgotten setup, for completeness:

c64 ~ # cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
md2 : active raid1 sdb1[1] sda1[0]
      192640 blocks [2/2] [UU]

md1 : active raid5 sdd2[3] sdc2[2] sdb2[1] sda2[0]
      5855424 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

md0 : active raid5 sdd3[3] sdc3[2] sdb3[1] sda3[0]
      345220416 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

unused devices: <none>
c64 ~ # mount
/dev/md0 on / type reiserfs (rw,noatime)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
udev on /dev type tmpfs (rw,nosuid)
devpts on /dev/pts type devpts (rw)
/dev/md2 on /boot type ext3 (rw,noatime)
none on /dev/shm type tmpfs (rw)
usbfs on /proc/bus/usb type usbfs (rw)
c64 ~ # cat /proc/swaps
Filename                                Type            Size    Used    
Priority
/dev/md/1                               partition       5855416 169236  -1


The failed disk was /dev/sdd, so only raid5 was involved. The 
partitions /dev/sdc1 and /dev/sdd1 are not used.

<earny>

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

* Re: dirty md raid5 slab bio leak [FIXED]
  2005-06-28  6:17         ` Andrew Morton
@ 2005-07-07  1:19           ` Ernst Herzberg
  0 siblings, 0 replies; 8+ messages in thread
From: Ernst Herzberg @ 2005-07-07  1:19 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Neil Brown, linux-kernel

On Tuesday 28 June 2005 08:17, Andrew Morton wrote:
> Neil Brown <neilb@cse.unsw.edu.au> wrote:
> > On Monday June 27, akpm@osdl.org wrote:
> > > Neil Brown <neilb@cse.unsw.edu.au> wrote:
> > > > It's OK, I found it.  The bio leaks when writing the md superblock.
> > >
> > > Thanks.
> > >
> > > >  insert a missing bio_put when writting the md superblock.
> > >
> > > Does 2.6.12.x need this?
> >
> > Hmmm.. probably, though it isn't Ooopsable, and isn't a security
> > problem.  Just a slow leak with a trivial patch...
>
> It's a pretty sad bug if it hits you though.
>
> > Is there a web-page somewhere that lists the acceptance criterea? I
> > didn't save the mail message.
>
> Me either.  Just send 'em any old thing and let them decide ;)
>
> > Do I just mail the patch to stable@kernel.org ??
>
> That's OK, I'll add it to my backport queue - we should leave it to bake in
> 2.6.13-rc1 for a bit first.
>

2.6.13-rc1 fixed this. Verified on the same machine, same hardware, same 
disk-failure, but new kernel.

Jul  6 06:33:47 c64 ata4: command 0x35 timeout, stat 0xd8 host_stat 0x0
Jul  6 06:33:47 c64 ata4: status=0xd8 { Busy }
Jul  6 06:33:47 c64 SCSI error : <3 0 0 0> return code = 0x8000002
Jul  6 06:33:47 c64 sdd: Current: sense key: Aborted Command
Jul  6 06:33:47 c64 Additional sense: Scsi parity error
Jul  6 06:33:47 c64 end_request: I/O error, dev sdd, sector 234436299
Jul  6 06:33:47 c64 raid5: Disk failure on sdd3, disabling device. Operation 
continuing on 3 devices

-----------------------
 Active / Total Objects (% used)    : 277222 / 287112 (96.6%)
 Active / Total Slabs (% used)      : 11137 / 11137 (100.0%)
 Active / Total Caches (% used)     : 77 / 118 (65.3%)
 Active / Total Size (% used)       : 42630.65K / 44791.06K (95.2%)
 Minimum / Average / Maximum Object : 0.02K / 0.16K / 128.00K

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
220455 216543  98%    0.09K   4899       45     19596K buffer_head
 17283  14714  85%    0.52K   2469        7      9876K radix_tree_node
 11250  10616  94%    0.21K    625       18      2500K dentry_cache
  5940   5930  99%    0.69K    540       11      4320K shmem_inode_cache
  4620   4620 100%    0.17K    210       22       840K vm_area_struct
 [....]


Ordering a new disk drive now:-)

Thanks

<earny>

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

end of thread, other threads:[~2005-07-07  1:23 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-06-27 20:22 dirty md raid5 slab bio leak Ernst Herzberg
2005-06-28  1:02 ` Neil Brown
2005-06-28  4:13   ` Neil Brown
2005-06-28  4:25     ` Andrew Morton
2005-06-28  6:09       ` Neil Brown
2005-06-28  6:17         ` Andrew Morton
2005-07-07  1:19           ` dirty md raid5 slab bio leak [FIXED] Ernst Herzberg
2005-06-28 14:27     ` dirty md raid5 slab bio leak Ernst Herzberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®