SIGBUS when writing to a wl_shm surface on a full tmpfs / ftruncate() vs fallocate()

Olivier BLIN olivier.blin at softathome.com
Thu Oct 17 11:11:14 CEST 2013


On 17/10/2013 09:24, Pekka Paalanen wrote:
> On Wed, 16 Oct 2013 19:29:47 +0200
> Olivier BLIN <olivier.blin at softathome.com> wrote:
>
> [...]
>
> > Having a small tmpfs is likely a common use in the embedded world, and
> > it would be nice to avoid such obscure crashes if possible.
> > What do you think of using fallocate() when supported instead of
> > ftruncate() in wayland/weston?
>
> Hi,
>
> I think this would be a good idea. I have hit the SIGBUS myself before,
> and did not know about fallocate() and friends.
>
> Does the glibc fallback still avoid the application dying on SIGBUS if
> space runs out?
Hi Pekka,

I have tried inlining the internal glibc fallback in my uClibc-based 
test application, and it also avoids the segfault, since it is using 
write() on the fd instead of writing on the mmaped file.
write() will just error out with ENOSPC, and posix_fallocate() will 
forward this error code.

And actually, the glibc fallback is smarter than what I initially wrote, 
it is not filling the file with zero, it is just writing one byte for 
every block (with means for each 4k page on a tmpfs).

So, it seems to be a good compromise to use posix_fallocate() instead of 
ftruncate().
posix_fallocate() is more portable than fallocate(), which is 
Linux-specific and exposes flags which we do not need.

I guess we can just use posix_fallocate() instead of ftruncate() for all 
shm allocations, regardless of the kernel version.
For resize operations like shm_pool_resize() in wayland-cursor, we can 
also use posix_fallocate() to initialize the extra space when growing 
instead of using ftruncate().

Thanks for your feedback

-- 
Olivier Blin - SoftAtHome

This message and any attachments herein are confidential, intended solely for the addressees and are SoftAtHome.s ownership. Any unauthorized use or dissemination is prohibited. If you are not the intended addressee of this message, please cancel it immediately and inform the sender.
This message and any attachments herein are confidential, intended solely for the addressees and are SoftAtHome.s ownership. Any unauthorized use or dissemination is prohibited. If you are not the intended addressee of this message, please cancel it immediately and inform the sender.


More information about the wayland-devel mailing list