From: yuyufen <yuyufen@huawei.com>
To: David Woodhouse <dwmw2@infradead.org>,
Joakim Tjernlund <Joakim.Tjernlund@infinera.com>
Cc: "viro@zeniv.linux.org.uk" <viro@zeniv.linux.org.uk>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-mtd@lists.infradead.org" <linux-mtd@lists.infradead.org>
Subject: Re: [PATCH] jffs2: remove fd from the f->dents list immediately.
Date: Mon, 19 Mar 2018 16:27:03 +0800 [thread overview]
Message-ID: <8bce38ca-aa2e-1928-4807-5571f91ae1c8@huawei.com> (raw)
In-Reply-To: <1521204767.20126.123.camel@infradead.org>
Hi, David
On 2018/3/16 20:52, David Woodhouse wrote:
> On Fri, 2018-03-16 at 12:39 +0000, Joakim Tjernlund wrote:
>>> After reverting the commit, we test 'rm -r', which can remove all
>>> files, and all seems OK!
>> UHH, this is mine (and Davids work from 2007)!
>> I cannot remember any details this long afterwards but I guess you cannot just
>> revert that part as it triggers some other bug, David?
> Right, the issue was with f_pos in the directory.
>
> The 'rm' we were testing with at the time would delete a bunch of
> directory entries, then continue with its readdir() to work out what
> else to delete. But when we were handling f_pos on directories merely
> as the position on the list, and when we were *deleting* things from
> that list as we went, some dirents ended up moving so that they were
> *before* the position that 'rm' had got to with its readdir().
Thanks a for explaining in detail. And you are right.
We have a directory, including 2000 files. After getdents and unlink as
follow:
for ( ; ; ) {
nread = syscall(SYS_getdents, fd, buf, BUF_SIZE); //BUF_SIZE=1024
for (bpos = 0; bpos < nread;) {
unlink(d->d_name);
}
}
we found there is still 990 files!
> But... the list we're traversing is *already* ordered by CRC, and that
> could be a much saner thing to use as f_pos. We just have to make sure
That's true. Our experiments also show that it can quicken traverse.
However, when the list is very long (e.g. 1000000), the number of traverse
times can reach thousands.
What's more, a lot of memory space is occupying and will be more and more.
I have no idea how to improve this. Do you have some good idea?
Thanks,
yufen
> we cope with hash collisions. Shifting left by 4 bits and using the low
> 4 bits would allow us to cope with 16 names with the same hash... but
> I'm not sure that's good enough.
prev parent reply other threads:[~2018-03-19 8:29 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-16 11:05 [PATCH] jffs2: remove fd from the f->dents list immediately Yufen Yu
2018-03-16 12:39 ` Joakim Tjernlund
2018-03-16 12:52 ` David Woodhouse
2018-03-19 8:27 ` yuyufen [this message]
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=8bce38ca-aa2e-1928-4807-5571f91ae1c8@huawei.com \
--to=yuyufen@huawei.com \
--cc=Joakim.Tjernlund@infinera.com \
--cc=dwmw2@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=viro@zeniv.linux.org.uk \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox