public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Florian Weimer <fw@deneb.enyo.de>
To: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Cc: Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org>
Subject: Re: [PATCH 03/10] linux: Add __readdir_unlocked
Date: Tue, 21 Apr 2020 14:16:24 +0200	[thread overview]
Message-ID: <87blnlrq3r.fsf@mid.deneb.enyo.de> (raw)
In-Reply-To: <9ffd3bb5-ab53-b4ac-162b-c2e2d2a9a21f@linaro.org> (Adhemerval Zanella's message of "Tue, 21 Apr 2020 09:03:42 -0300")

* Adhemerval Zanella:

> On 21/04/2020 07:41, Florian Weimer wrote:
>> * Adhemerval Zanella via Libc-alpha:
>> 
>>> And use it on readdir_r implementation.
>> 
>> I think __readdir_unlocked will not really be async-signal-safe if we
>> have to call malloc during readdir, to allocate the long-to-off64_t
>> translation table for the real fix for bug 23960 (when the kernel does
>> not provide 32-bit off64_t values).
>> 
>> That's why I think this change does not go in the right direction, sorry.
>> 
>
> I am not following, the whole set explicit avoid malloc by using a reserved
> space in the allocated but on opendir.  Even on mips64, which requires
> a special getdents64 implementation, avoid memory allocation.

The fix for bug 23960 needs to introduce some kind of memory
allocation to store the mapping.  We can avoid it in most cases, but I
think the readdir interface has too much baggage to make it
async-signal-safe.

> And it is for both non-LFS and LFS interfaces.  The only issue for 
> async-signal-safeness is on telldir for non-LFS mode which might require
> to extend the dynamic array internal buffer if the entry could not be
> added in the internal pre-allocated buffer (and this could be mitigated
> if we added a mmap variant of dynamic array). 

telldir cannot allocate because there is no way to return error.  The
allocation has to happen in readdir.

We should be able to optimize out allocations if telldir is never
called (basically, pre-allocate one slot to be used for telldir).  But
all this is really tricky.  I do wonder if it makes more sense to call
getdents64 directly if one needs async-signal-safety.

  reply	other threads:[~2020-04-21 12:16 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-17 13:22 [PATCH 01/10] linux: Move posix dir implementations to Linux Adhemerval Zanella
2020-04-17 13:22 ` [PATCH 02/10] linux: Simplify opendir buffer allocation Adhemerval Zanella
2020-04-21 10:28   ` Florian Weimer
2020-04-23 21:27     ` Rafal Luzynski
2020-04-29 17:09       ` Adhemerval Zanella
2020-04-23 21:39     ` Adhemerval Zanella
2020-04-24 10:11       ` Florian Weimer
2020-04-24 12:08         ` Adhemerval Zanella
2020-04-24 13:08           ` Florian Weimer
2020-04-17 13:22 ` [PATCH 03/10] linux: Add __readdir_unlocked Adhemerval Zanella
2020-04-21 10:41   ` Florian Weimer
2020-04-21 12:03     ` Adhemerval Zanella
2020-04-21 12:16       ` Florian Weimer [this message]
2020-04-21 13:00         ` Adhemerval Zanella
2020-05-27 16:38           ` Adhemerval Zanella
2020-04-17 13:22 ` [PATCH 04/10] linux: Use internal DIR locks when accessing filepos on telldir Adhemerval Zanella
2020-04-21 10:33   ` Florian Weimer
2020-04-17 13:22 ` [PATCH 05/10] linux: Use getdents64 on non-LFS readdir Adhemerval Zanella
2020-04-17 13:22 ` [PATCH 06/10] linux: Set internal DIR filepos as off64_t [BZ #23960, BZ #24050] Adhemerval Zanella
2020-04-20 15:01   ` Andreas Schwab
2020-04-20 15:02     ` Florian Weimer
2020-04-20 15:06       ` Andreas Schwab
2020-04-21 12:04         ` Adhemerval Zanella
2020-04-17 13:22 ` [PATCH 07/10] linux: Add __readdir64_unlocked Adhemerval Zanella
2020-04-17 13:22 ` [PATCH 08/10] linux: Add __old_readdir64_unlocked Adhemerval Zanella
2020-04-17 13:22 ` [PATCH 09/10] linux: Use getdents64 on readdir64 compat implementation Adhemerval Zanella
2020-04-17 13:22 ` [PATCH 10/10] dirent: Deprecate getdirentries Adhemerval Zanella
2020-04-22 10:10   ` Florian Weimer
2020-04-20 14:53 ` [PATCH 01/10] linux: Move posix dir implementations to Linux Andreas Schwab
2020-04-21 10:15   ` Florian Weimer
2020-04-21 11:51   ` Adhemerval Zanella
2020-05-27 16:35 ` Adhemerval Zanella

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=87blnlrq3r.fsf@mid.deneb.enyo.de \
    --to=fw@deneb.enyo.de \
    --cc=adhemerval.zanella@linaro.org \
    --cc=libc-alpha@sourceware.org \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).