<div dir="ltr"><div dir="ltr">On Wed, Aug 7, 2019 at 8:59 AM enh via Toybox <<a href="mailto:toybox@lists.landley.net">toybox@lists.landley.net</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">... (but maybe not. there are pros and cons<br>
either way, and neither is ideal. and i'm guessing that Ryan's mention<br>
of EACCES means that he's seen that problem with losetup too.)<br></blockquote><div><br></div><div>I've only seen the ENOENT error, on Android, and I'm guessing EACCES <span style="background-color:rgba(252,232,230,0.008)">doesn't happen on Android? ueventd only needs to set the uid after creating the new /dev file, and the final uid for /dev/block/loopXXX appears to be root. I'm not sure what the initialĀ uid was -- also root, probably? Maybe EACCES happens with other uevent/init daemons.</span></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">i'll see if i can reproduce this EACCES/ENOENT race condition when i<br>
have some spare time, now i understand the difference...<br></blockquote><div><br></div><div>It's easy for me to reproduce on aosp/master, aosp_walleye. At startup, the device has 8 unused loop devices, and once they're exhausted, losetup -sf fails whenever ioctl creates a new device:</div><div><br></div><div>1|walleye:/ # losetup -sf /system/etc/ld.config.R.txt<br>/dev/block/loop10<br>walleye:/ # losetup -sf /system/etc/ld.config.R.txt<br>losetup: /dev/block/loop11: No such file or directory<br>1|walleye:/ # losetup -sf /system/etc/ld.config.R.txt<br>/dev/block/loop11<br>walleye:/ # losetup -sf /system/etc/ld.config.R.txt<br>losetup: /dev/block/loop12: No such file or directory<br>1|walleye:/ # losetup -sf /system/etc/ld.config.R.txt<br>/dev/block/loop12<br></div><div><br></div><div>FWIW, I think losetup -sf can also race with a process invoking LOOP_CTL_REMOVE. i.e. ENOENT might indicate that the loop device had been available, but some other process removed it before it could be opened.</div><div><br></div><div>-Ryan</div><div><br></div></div></div>