[LTP] [PATCH v2] syscalls/ioctl_loop05: Use correct blockdev to get logical_block_size

Yang Xu xuyang2018.jy@cn.fujitsu.com
Wed Jun 10 14:19:48 CEST 2020


Hi Jan


> Hi Jan
> 
> 
>>
>>
>> ----- Original Message -----
>>>
>>> Using df cmd (df -T /tmp/xxxxx/test.img)to get the correct block dev.
>>
>> What I had in mind was to take "df -T" as inspiration, not call it 
>> directly,
>> but that could work too. See notes below.
>>
>>> +static void find_backing_bdpath(char *buf)
>>> +{
>>> +    char line[PATH_MAX];
>>> +    FILE *file;
>>> +
>>> +    file = SAFE_FOPEN("1.txt", "r");
>>> +
>>> +    while (fgets(line, sizeof(line), file) != NULL)
>>> +        sscanf(line, "%s", buf);
>>
>> This will take the last line of output, which can be a problem as some
>> version align output differently. For example:
>>
>> # df -T .
>> Filesystem           Type 1K-blocks    Used Available Use% Mounted on
>> /dev/mapper/vg_dhcp13579-lv_root
>>                       ext4  46967160 3102232  41472456   7% /
>>
>> can break output into two lines.
> Yes.
>>
>>> +    SAFE_FCLOSE(file);
>>> +}
>>> +
>>>   static void setup(void)
>>>   {
>>> -    int fd;
>>> -    struct stat buf;
>>> +    char buf[100];
>>> +    const char *const df_cmd[] = {"df", "-T", ".", NULL};
>>>       if (tst_fs_type(".") == TST_TMPFS_MAGIC)
>>>           tst_brk(TCONF, "tmpfd doesn't support O_DIRECT flag");
>>> @@ -109,13 +122,6 @@ static void setup(void)
>>>       sprintf(sys_loop_diopath, "/sys/block/loop%d/loop/dio", dev_num);
>>>       tst_fill_file("test.img", 0, 1024, 1024);
>>> -    fd = SAFE_OPEN("test.img", O_RDONLY);
>>> -    SAFE_FSTAT(fd, &buf);
>>> -    SAFE_CLOSE(fd);
>>> -
>>> -    logical_block_size = buf.st_blksize;
>>> -    tst_res(TINFO, "backing dev logical_block_size is %d", 
>>> logical_block_size);
>>> -
>>>       tst_attach_device(dev_path, "test.img");
>>>       attach_flag = 1;
>>>       dev_fd = SAFE_OPEN(dev_path, O_RDWR);
>>> @@ -130,13 +136,24 @@ static void setup(void)
>>>        *   size of loop is bigger than the backing device's and the loop
>>>        *   needn't transform transfer.
>>>        */
>>> -    TST_RETRY_FUNC(ioctl(dev_fd, LOOP_SET_BLOCK_SIZE, 
>>> logical_block_size),
>>> TST_RETVAL_EQ0);
>>> +    SAFE_CMD(df_cmd, "1.txt", NULL);
>>
>> This could be part of find_backing_bdpath() function.
> Yes.
>>
>> What I had in mind when I referred to df was something like:
>>    stat("test.img", &statbuf);
>>    SAFE_MKNOD("blkdev", S_IFBLK | S_IRWXU, statbuf.st_dev);
>>    block_devfd = SAFE_OPEN("blkdev", O_RDWR);
>> What do you think?
>>
It works well on ext4 or xfs filesystem(user may mount wanted filesystem 
on tmpdir). But if we use btrfs, this
BLKSSZGET will fail because major dev numer is 0. When we meet this 
situation, we don't need to call this ioctl and we can directly test 
becuase it doesn' t have backing file block device align limit.
What do you thin about it?



> Oh, yes, it is more easier (I have tried this). I will send a v3 for this.
> 
> ps: I think I can use this in my other loop patches for loop_configure 
> ioctl.
>>
>>
> 
> 
> 




More information about the ltp mailing list