Re: [Yaffs] [PATCH] yaffs: fix softlockup cauesed by inode d…

Top Page
Attachments:
Message as email
+ (text/plain)
+ (text/html)
Delete this message
Reply to this message
Author: Shaoyafang
Date:  
To: YAFFS
CC: Lizefan, Wuqixuan, Chenjie
Subject: Re: [Yaffs] [PATCH] yaffs: fix softlockup cauesed by inode deleted when scanning s_inodes list
On 2011-08-31 07:53, JiSheng Zhang wrote:
> Hi List,
>
> I can only send email using webui now. so the patch is attached. I can
> resend the patch in email body if necessary later.
>
> The bug can only be triggered under SMP and heavy stress test.
>
> What happen is that the list_for_each_entry() loop in yaffs flush inodes
> routine can race with inodes deleting, so the inode can go away before
> list_for_each_entry() get the next node. This leads to a endless loop
> which will cause softlockup. We fix the problem by keeping reference to
> it and putting the reference only after we have safely resumed the scan
> of the inode list.
>
> Since __iget() and the inode lock are not exported, yaffs can not be selected
> as M after this change
>
> Signed-off-by: Jisheng Zhang <>
> ---
> Kconfig_multi      |    2 +-
> Kconfig_single     |    2 +-
> yaffs_vfs_multi.c  |   29 ++++++++++++++++++++++++++++-
> yaffs_vfs_single.c |   24 +++++++++++++++++++++++-
> 4 files changed, 53 insertions(+), 4 deletions(-)

>


Hi JiSheng,

    I encounter the same problem with you.


    There are some questions about your patch.


1.

+        yaffs_gross_unlock(dev);
+        iput(old_iptr);
+        yaffs_gross_lock(dev);


Before iput(), the gross_lock is unlocked, then in the iput funcioin, it will be locked again. My question is, can you ensure it is safe between unlock and lock?



2.
 +    spin_unlock(&inode_sb_list_lock);
//here should yaffs_gross_unlock(dev) also
+    iput(old_iptr);
//then yaffs_gross_lock(dev);