The sender domain has a DMARC Reject/Quarantine policy which disallows
sending mailing list messages using the original "From" header.

To mitigate this problem, the original message has been wrapped
automatically by the mailing list software.
--- Begin Message ---
By the way, does this make rootfs on NFS work?

Je 2025-oktobro-06 14:09:56 UTC, Caleb James DeLisle <[email protected]> skribis:
>Does anybody have any opinions about this patch?
>It seems like a relatively non-controversial idea, and it
>makes USB rootfs able to work.
>
>
>Thanks,
>
>Caleb
>
>
>On 19/09/2025 20:54, Caleb James DeLisle wrote:
>> Rootfs on devices such as USB is currently impossible, but
>> not because the kernel modules aren't loaded early enough.
>> The only problem is that procd does not create hotplug
>> device files until after preinit.
>> 
>> Update partname_volume_init to also create the device file
>> if necessary so that it will be able to be mounted. With
>> this patch, USB rootfs with normal kmods Just Works.
>> 
>> Signed-off-by: Caleb James DeLisle <[email protected]>
>> ---
>>   libfstools/partname.c | 33 +++++++++++++++++++++++++++++++++
>>   1 file changed, 33 insertions(+)
>> 
>> diff --git a/libfstools/partname.c b/libfstools/partname.c
>> index 9f2347a..a2b2b2c 100644
>> --- a/libfstools/partname.c
>> +++ b/libfstools/partname.c
>> @@ -2,6 +2,8 @@
>>     #include "common.h"
>>   +#include <sys/sysmacros.h>
>> +
>>   #define BUFLEN 64
>>     struct devpath {
>> @@ -41,14 +43,45 @@ static int partname_volume_identify(struct volume *v)
>>      return ret;
>>   }
>>   +static int ensure_block_dev(struct partname_volume *p, const char *voldir)
>> +{
>> +    unsigned int major, minor;
>> +    struct stat s;
>> +    char dev[8];
>> +
>> +    if (stat(p->dev.devpathstr, &s) < 0) {
>> +            if (errno != ENOENT)
>> +                    return -1;
>> +    } else {
>> +            return S_ISBLK(s.st_mode) ? 0 : -2;
>> +    }
>> +
>> +    if (read_string_from_file(voldir, "dev", dev, sizeof(dev)) == NULL)
>> +            return -3;
>> +
>> +    if (sscanf(dev, "%d:%d", &major, &minor) != 2)
>> +            return -4;
>> +
>> +    if (mknod(p->dev.devpathstr, S_IFBLK | 0600, makedev(major, minor)) < 0)
>> +            return -5;
>> +
>> +    return 0;
>> +}
>> +
>>   static int partname_volume_init(struct volume *v)
>>   {
>>      struct partname_volume *p = container_of(v, struct partname_volume, v);
>>      char voldir[BUFLEN];
>>      unsigned int volsize;
>> +    int ret;
>>      snprintf(voldir, sizeof(voldir), "%s/%s", block_dir_name, 
>> p->dev.devpath.device);
>>   +  ret = ensure_block_dev(p, voldir);
>> +    if (ret < 0)
>> +            printf("Failed to create block device %s ret=%d errno=%d\n",
>> +                    p->dev.devpathstr, ret, errno);
>> +
>>      if (read_uint_from_file(voldir, "size", &volsize))
>>              return -1;
>>   
>
>_______________________________________________
>openwrt-devel mailing list
>[email protected]
>https://lists.openwrt.org/mailman/listinfo/openwrt-devel


--- End Message ---
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to