Thank you for clarification.
Just 2 quick questions,
1. Sub volumes - 2 sub volumes cannot have 2 same inode numbers ?
2. Why fsInfo fsid return u8 and the traditional file system return
dev_t, usually 32 integer ?


On Sun, Jan 14, 2018 at 12:22 PM, Qu Wenruo <quwenruo.bt...@gmx.com> wrote:
>
>
> On 2018年01月14日 18:13, Ilan Schwarts wrote:
>> both btrfs filesystems will have same fsid ?
>>
>>
>> On Sun, Jan 14, 2018 at 12:06 PM, Ilan Schwarts <ila...@gmail.com> wrote:
>>> But both filesystems will have same fsid?
>>>
>>> On Jan 14, 2018 12:04, "Nikolay Borisov" <nbori...@suse.com> wrote:
>>>>
>>>>
>>>>
>>>> On 14.01.2018 12:02, Ilan Schwarts wrote:
>>>>> First of all, Thanks for response !
>>>>> So if i have 2 btrfs file system on the same machine (not your
>>>>> everyday scenario, i know)
>
> Not a problem, the 2 filesystems will have 2 different fsid.
>
> (And it's my everyday scenario, since fstests neeeds TEST_DEV and
> SCRATCH_DEV_POOL)
>
>>>>> Lets say a file is created on device A, the file gets inode number X
>>>>> is it possible on device B to have inode number X also ?
>>>>> or each device has its own Inode number range ?
>
> Forget the mess about device.
>
> Inode is bounded to a filesystem, not bounded to a device.
>
> Just traditional filesytems are normally bounded to a single device.
> (Although even traditional filesystems can have external journal devices)
>
> So there is nothing to do with device at all.
>
> And you can have same inode numbers in different filesystems, but
> BTRFS_I(inode)->root->fs_info will point to different fs_infos, with
> different fsid.
>
> So return to your initial question:
>> both btrfs filesystems will have same fsid ?
>
> No, different filesystems will have different fsid.
>
> (Unless you're SUUUUUUUUUUUUUUUUUUUPER lucky to have 2 filesystems with
> same fsid)
>
> Thanks,
> Qu
>
>
>>>>
>>>> Of course it is possible. Inodes are guaranteed to be unique only across
>>>> filesystem instances. In your case you are going to have 2 fs instances.
>>>>
>>>>>
>>>>> I need to create unique identifier for a file, I need to understand if
>>>>> the identifier would be: GlobalFSID_DeviceID_Inode or DeviceID_Inode
>>>>> is enough.
>>>>>
>>>>> Thanks
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Sun, Jan 14, 2018 at 11:13 AM, Qu Wenruo <quwenruo.bt...@gmx.com>
>>>>> wrote:
>>>>>>
>>>>>>
>>>>>> On 2018年01月14日 16:33, Ilan Schwarts wrote:
>>>>>>> Hello btrfs developers/users,
>>>>>>>
>>>>>>> I was wondering regarding to fetching the correct fsid on btrfs from
>>>>>>> the context of a kernel module.
>>>>>>
>>>>>> There are two IDs for btrfs. (in fact more, but you properly won't need
>>>>>> the extra ids)
>>>>>>
>>>>>> FSID: Global one, one fs one FSID.
>>>>>> Device ID: Bonded to device, each device will have one.
>>>>>>
>>>>>> So in case of 2 devices btrfs, each device will has its own device id,
>>>>>> while both of the devices have the same fsid.
>>>>>>
>>>>>> And I think you're talking about the global fsid instead of device id.
>>>>>>
>>>>>>> if on suse11.3 kernel 3.0.101-0.47.71-default in order to get fsid, I
>>>>>>> do the following:
>>>>>>> convert inode struct to btrfs_inode struct (use btrfsInode =
>>>>>>> BTRFS_I(inode)), then from btrfs_inode struct i go to root field, and
>>>>>>> from root i take anon_dev or anon_super.s_dev.
>>>>>>>         struct btrfs_inode *btrfsInode;
>>>>>>>         btrfsInode = BTRFS_I(inode);
>>>>>>>        btrfsInode->root->anon_super.s_dev    or
>>>>>>>        btrfsInode->root->anon_dev    - depend on kernel.
>>>>>>
>>>>>> The most directly method would be:
>>>>>>
>>>>>> btrfs_inode->root->fs_info->fsid.
>>>>>> (For newer kernel, as I'm not familiar with older kernels)
>>>>>>
>>>>>> Or from superblock:
>>>>>> btrfs_inode->root->fs_info->super_copy->fsid.
>>>>>> (The most reliable one, no matter which kernel version you're using, as
>>>>>> long as the super block format didn't change)
>>>>>>
>>>>>> For device id, it's not that commonly used unless you're dealing with
>>>>>> chunk mapping, so I'm assuming you're referring to fsid.
>>>>>>
>>>>>> Thanks,
>>>>>> Qu
>>>>>>
>>>>>>>
>>>>>>> In kernel 3.12.28-4-default in order to get the fsid, i need to go
>>>>>>> to the inode -> superblock -> device id (inode->i_sb->s_dev)
>>>>>>>
>>>>>>> Why is this ? and is there a proper/an official way to get it ?
>>>>>>> --
>>>>>>> To unsubscribe from this list: send the line "unsubscribe linux-btrfs"
>>>>>>> in
>>>>>>> the body of a message to majord...@vger.kernel.org
>>>>>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>
>>
>>
>



-- 


-
Ilan Schwarts
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to