Hi Nathan,
From: Nathan Scott <nathans@xxxxxxx>
Subject: Re: force shutdown at xfs_growfs
Date: Wed, 25 Aug 2004 15:30:35 +1000
> Thank you; your fix looks simple & is clearly correct, I'll check
> it in shortly.
Thank you for your quick response.
But I have another problem report for xfs_growfs. :-p
Growing a filesystem in heavy dinode allocate/deallocate situation may
cause a deadlock.
It looks that (a)a process which hold m_peraglock as reading is
waiting for a pagebuf(AGI), and (b)another process which hold the
pagebuf(AGI) is waiting for down_read m_peraglock, while (c)xfs_growfs
is waiting for down_write m_peraglock.
The following is a kernel backtrace. Its kernel version was 2.4.25,
but I guess that the recent kernel also has the same problem. What do
you think of it?
(a) PID = 3879 (tar)
c76efa7c c01176f9 schedule+2b9 ()
[c76efabc] c0105ff2 __down+82 (c1f23594,c1f235c8,0)
[c76efae0] c010618c __down_failed+8 ()
[c76efaf0] c0240bc0 [.text.lock.xfs_buf+8a]
[c76efaf0] c023ee04 pagebuf_lock+24 (c1f23594ds,2ee00400,0,cbf7cac0)
[c76efafc] c023e6e3 _pagebuf_find+1b3 (c97ca67c,177002,0,200)
[c76efb30] c023e7f7 pagebuf_get+77 (c97ca67c,177002,0,1)
[c76efb60] c0227df4 xfs_trans_read_buf+184 (c38a1400,cbc495b4,c97ca67c,177002)
[c76efb88] c0208c7e xfs_ialloc_read_agi+8e (c38a1400,cbc495b4,6,c76efbf0)
[c76efbc8] c0207434 xfs_ialloc_ag_select+244 (cbc495b4,3007d7,0,81a4)
[c76efc04] c020802f xfs_dialloc+b4f (cbc495b4,3007d7,0,81a4)
[c76efcb4] c020ee74 xfs_ialloc+64 (cbc495b4,c239cbc4,81a4,1)
[c76efcf8] c022928b xfs_dir_ialloc+8b (c76efdc8,c239cbc4,81a4,1)
[c76efd5c] c022efe7 xfs_create+3b7 (c239cbe4,cb746824,c76efe88,c76efe14)
[c76efdfc] c0239821 linvfs_mknod+181 (cb312634,cb746824,81a4,0)
[c76eff08] c02398a7 linvfs_create+27 (cb312634,cb746824,81a4,c76ee000)
[c76eff1c] c014e62d vfs_create+10d (cb312634,cb746824,1a4,c76eff8c)
[c76eff40] c014ed45 open_namei+645 (c6ba2000,80c2,1a4,c76eff84)
[c76eff70] c0140623 filp_open+43 (c6ba2000,80c1,1a4,c76ee000)
[c76effa8] c0140a23 sys_open+53 (8072190,80c1,1a4,80c1)
[c76effc0] c010761f system_call+33 ()
(b) PID = 3946 (rm)
c3d91d8c c01176f9 schedule+2b9 ()
[c3d91dcc] c039082c rwsem_down_failed_common+5c
(c38a15d4,c3d91df0,fffeffff,c5c71e0c)
[c3d91de0] c0390679 rwsem_down_read_failed+29 (c38a1400,c38a1400)
[c3d91e04] c0208fb1 .text.lock.xfs_ialloc+d7 (?c6173d50,a4,a7)
[c3d91e14] c0208169 xfs_difree+129 ()
[c3d91e90] c021057e xfs_ifree+5e (c008ef38,c81e2964,c3d91ee8,0)
[c3d91ec0] c022e8a6 xfs_inactive+276 (c81e2984,0,c2a78e1c,0)
[c3d91f08] c023dab1 vn_rele+b1 (c2a78e1c,c2a78e3c,c015a4b2,c2a78e3c)
[c3d91f20] c023c088 linvfs_clear_inode+18 (c2a78e3c,c2a78e3c,c015af78,c2a78e3c)
[c3d91f2c] c015a4b2 clear_inode+102 (c2a78e3c,c04c1300,c5229750,c6a26898)
[c3d91f38] c015af78 iput+b8 (c2a78e3c,0,0,c5229750)
[c3d91f54] c0158bd2 d_delete+a2 (c6a26898,c6a26898,c689a000,c6a26898)
[c3d91f68] c014faf5 vfs_unlink+185 (c5229750,c6a26898,c5c858ec,cbff9214)
[c3d91f84] c014fd69 sys_unlink+119 (805313b,2,bffffac0,8053128)
[c3d91fc0] c010761f system_call+33 ()
(c) PID = 3947 (xfs_growfs)
c33f9d90 c01176f9 schedule+2b9 ()
[c33f9dd0] c039082c rwsem_down_failed_common+5c
(c38a15d4,c33f9df4,ffffffff,c1225978)
[c33f9de4] c03906b9 rwsem_down_write_failed+29 (c272c704)
[c33f9e08] c0206a4c .text.lock.xfs_fsops+6 (?0,c057d118,c1232cc4,44)
[c33f9e08] c0206306 xfs_growfs_data_private+7 ()
[c33f9eb0] c02064c0 xfs_growfs_data+50 (c38a1400,c33f9f14,c,c767278c)
[c33f9ec4] c02383c1 xfs_ioctl+261 (c1718c84,c7e31200,c3b88cb4,0)
[c33f9f74] c023706b linvfs_ioctl+3b (c7e31200,c3b88cb4,400c586e,bffff8b0)
[c33f9f94] c0152b75 sys_ioctl+f5 (3,400c586e,bffff8b0,7e6000)
[c33f9fc0] c010761f system_call+33 ()
|