xfs
[Top] [All Lists]

BUG 803625 - xfs_growfs QA failure and possible pagebuf problem

To: ananth@xxxxxxxxxxxx
Subject: BUG 803625 - xfs_growfs QA failure and possible pagebuf problem
From: pv@xxxxxxxxxxxxx (ajag@xxxxxxxxxxxxxxxxx)
Date: Mon, 2 Oct 2000 16:51:32 -0700 (PDT)
Cc: linux-xfs@xxxxxxxxxxx
Reply-to: sgi.bugs.xfs@xxxxxxxxxxxxxxxxx
Sender: owner-linux-xfs@xxxxxxxxxxx
Webexec: webpvsubmit,PvProjectIncident
Webpv: proxy2.melbourne.sgi.com
View Incident: 
http://co-op.engr.sgi.com/BugWorks/code/bwxquery.cgi?search=Search&wlong=1&view_type=Bug&wi=803625

Submitter : ajag                      Submitter Domain : melbourne          
Assigned Engineer : ananth            Assigned Domain : engr                
Assigned Group : xfs-linux            Category : software                   
Customer Reported : F                 Priority : 2                          
Project : xfs-linux                   Status : open                         
Description :
The growfs QA test creates a 16Mb filesystem with one allocation group and
sucessively grows its size to 17, 33, 35 and 48 megabyte (3 ags) with four 
calls to
xfs_growfs. The first growfs appears to succeed, however, subsequents calls fail
on a call to xfs_read_buf (line 336 xfs_fsops.c) while writing out the redundant
superblocks for the filesystem. The call sequence looks like:
 
xfs_growfs_data_private
  xfs_read_buf (function)
    xfs_buf_read (macro)
      pagebuf_get (function call at line 747 page_buf.c)
        _pagebuf_get_lockable_buffer (function) page_buf_locking.c 
>>>       _pagebuf_find_lockable_buffer (f) returns EBUSY at line 426

(note my line numbers may be off by a couple as I've stuffed a few printks 
in...)

It appears that the pagebuf allocated in the first call to growfs is hanging 
around
in the kernel not being correctly freed up - or at least there is some delay 
which
is being hit because these growfs's are happening in quick succession.

When the xfs_read_buf call fails, xfs_growfs simply gives up trying to write out
the redundant superblocks, and (I think) this is what then triggers the ASSERT
in the third growfs below.

The following is a sequence which shows most of the calls, and in particular 
where
pagebufs are being created for regions of the disk, the problem first appears 
when a
region of the disk is touched twice (ie the superblock at 32768 basic blocks).
Finally, note that I haven't yet tried to reproduce these errors on a test8 
kernel.

*** xfs_ioctl: cmd is 1074550894
*** copy from user... done
*** call xfs_growfs_data...
*** xfs_growfs_data
        *** acquire lock... done
        *** xfs_growfs_data_private:
                old: agcount: 1; blocks: 4096
                new: 1; nb_mod: 256; nagcount: 2
        *** xfs_growfs_data_private: agno is 1, writing AGF at:
                32769 basic blocks; length: 1
        *** xfs_growfs_data_private: agno is 1, writing AGI at:
                32770 basic blocks; length: 1
        *** xfs_growfs_data_private: agno is 1, writing BNO btree at:
                32776 basic blocks; length: 8
        *** xfs_growfs_data_private: agno is 1, writing CNT btree at:
                32784 basic blocks; length: 8
        *** xfs_growfs_data_private: agno is 1, writing INO btree at:
                32792 basic blocks; length: 8
        *** xfs_growfs_data_private: agno is 1, writing superblock at:
                32768 basic blocks; length: 8
done

Start mounting filesystem: ide0(3,9)
Ending clean XFS mount for filesystem: ide0(3,9)
*** xfs_ioctl: cmd is 1074550894
*** copy from user... done
*** call xfs_growfs_data...
*** xfs_growfs_data
        *** acquire lock... done
        *** xfs_growfs_data_private:
                old: agcount: 2; blocks: 4096
                new: 2; nb_mod: 256; nagcount: 3
        *** xfs_growfs_data_private: agno is 2, writing AGF at:
                65537 basic blocks; length: 1
        *** xfs_growfs_data_private: agno is 2, writing AGI at:
                65538 basic blocks; length: 1
        *** xfs_growfs_data_private: agno is 2, writing BNO btree at:
                65544 basic blocks; length: 8
        *** xfs_growfs_data_private: agno is 2, writing CNT btree at:
                65552 basic blocks; length: 8
        *** xfs_growfs_data_private: agno is 2, writing INO btree at:
                65560 basic blocks; length: 8
        *** xfs_growfs_data_private: agno is 1, writing superblock at:
                32768 basic blocks; length: 8:

                *** _pagebuf_find_lockable_buffer: letting go of the buffer...
                        [ Returns EBUSY at line 426 in page_buf_locking.c ]
                *** _pagebuf_get_lockable_buffer returning status: -16
                        [ Return at line 454 in page_buf_locking.c ]
                *** pagebuf_get: Error: _pagebuf_get_lockable_buffer failed
                        [ Returns at 757 ]

        cmn_err level 4 Filesystem "ide0(3,9)": error 5 reading secondary 
        superblock for ag 1
done

Start mounting filesystem: ide0(3,9)
Ending clean XFS mount for filesystem: ide0(3,9)
*** xfs_ioctl: cmd is 1074550894
*** copy from user... done
*** call xfs_growfs_data...
*** xfs_growfs_data
*** acquire lock... done
*** xfs_growfs_data_private:
        old: agcount: 3; blocks: 4096
        new: 2; nb_mod: 768; nagcount: 3

XFS assertion failed: agno < mp->m_sb.sb_agcount - 1 || 
        INT_GET(agi->agi_length, ARCH_CONVERT) == mp->m_sb.sb_agblocks,
        file: xfs_fsops.c, line: 336
kernel BUG at xfs_debug.c:45!

Entering kdb (current=0xc5e68000, pid 3298) Panic: invalid operand
due to panic @ 0xc01c7409
eax = 0x0000001e ebx = 0x00000000 ecx = 0xc030a8cc edx = 0x00000000 
esi = 0xc534f400 edi = 0xc64a7000 esp = 0xc5e69b38 eip = 0xc01c7409 
ebp = 0xc5e69b44  ss = 0x00000018  cs = 0x00000010 eflags = 0x00010246 
 ds = 0x00000018  es = 0x00000018 origeax = 0xffffffff &regs = 0xc5e69b04
kdb>

<Prev in Thread] Current Thread [Next in Thread>
  • BUG 803625 - xfs_growfs QA failure and possible pagebuf problem, ajag@xxxxxxxxxxxxxxxxx <=