- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
i_ino - 1"减一?-6ren"> i_ino - 1"减一?-代码是: void ext2_read_inode (struct inode * inode) { struct buffer_head * bh; struct ext2_inod-6ren">
代码是:
void ext2_read_inode (struct inode * inode)
{
struct buffer_head * bh;
struct ext2_inode * raw_inode;
unsigned long block_group;
unsigned long group_desc;
unsigned long desc;
unsigned long block;
unsigned long offset;
struct ext2_group_desc * gdp;
if (
( inode->i_ino != EXT2_ROOT_INO
&& inode->i_ino != EXT2_ACL_IDX_INO
&& inode->i_ino != EXT2_ACL_DATA_INO
&& inode->i_ino < EXT2_FIRST_INO(inode->i_sb)
) || inode->i_ino > le32_to_cpu(
inode->i_sb->u.ext2_sb.s_es->s_inodes_count)
)
{
ext2_error(inode->i_sb, "ext2_read_inode",
"bad inode number: %lu", inode->i_ino);
goto bad_inode;
}
block_group = (inode->i_ino - 1) / EXT2_INODES_PER_GROUP(inode->i_sb);
if (block_group >= inode->i_sb->u.ext2_sb.s_groups_count) {
ext2_error(inode->i_sb, "ext2_read_inode", "group >= groups count");
goto bad_inode;
}
group_desc = block_group >> EXT2_DESC_PER_BLOCK_BITS(inode->i_sb);
desc = block_group & (EXT2_DESC_PER_BLOCK(inode->i_sb) - 1);
bh = inode->i_sb->u.ext2_sb.s_group_desc[group_desc];
/* ... other code omitted ... */
}
你能解释一下为什么这里有-1
吗:
block_group = (inode->i_ino - 1) / EXT2_INODES_PER_GROUP(inode->i_sb);
这里:
desc = block_group & (EXT2_DESC_PER_BLOCK(inode->i_sb) - 1);
谢谢。
最佳答案
使其从零开始。如您所见,fs/inode.c
中的i_ino
字段随着++last_ino
递增。
它使第一个i_ino
等于1。
/**
* new_inode - obtain an inode
* @sb: superblock
*
* Allocates a new inode for given superblock. The default gfp_mask
* for allocations related to inode->i_mapping is GFP_HIGHUSER_MOVABLE.
* If HIGHMEM pages are unsuitable or it is known that pages allocated
* for the page cache are not reclaimable or migratable,
* mapping_set_gfp_mask() must be called with suitable flags on the
* newly created inode's mapping
*
*/
struct inode *new_inode(struct super_block *sb)
{
/*
* On a 32bit, non LFS stat() call, glibc will generate an EOVERFLOW
* error if st_ino won't fit in target struct field. Use 32bit counter
* here to attempt to avoid that.
*/
static unsigned int last_ino;
struct inode *inode;
spin_lock_prefetch(&inode_lock);
inode = alloc_inode(sb);
if (inode) {
spin_lock(&inode_lock);
__inode_add_to_lists(sb, NULL, inode);
inode->i_ino = ++last_ino;
inode->i_state = 0;
spin_unlock(&inode_lock);
}
return inode;
}
关于c - 为什么在 fs/ext2/inode.c 的 "inode->i_ino - 1"减一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18743584/
我有两个选择语句,它们从两个不同的表中获取值。select 语句看起来像这样 SELECT year(timestamp) y, month(timestamp) m, count(id) c FRO
我正在使用grails 1.3.7。 我有一个像这样的域类产品: class Product = { String name Float price Float discount =
关于将 View 限制在其容器的边缘,我有一个基本但必要的问题。例如,要将标签约束到主视图容器,您可以直接在界面构建器中设置这些约束,我已经看到一个导师为左侧(前导)选择 -20 值,为右侧选择相同的
有谁知道如何用用户定义的类实现集合操作,并以其属性作为操作条件。例如: class myClass { var figure: Int! } let classObj1 = myClass() c
我正在尝试计算一条消息是否已看到/未看到以及已读/未读。 在data_chats_parties表中,有两个字段,last_seen和last_read 在 data_chats_messages 表
我想在pytorch中的矩阵和向量之间做+/-/*。我怎样才能有好的表现?我尝试使用扩展,但它真的很慢(我使用的是带有小向量的大矩阵)。 a = torch.rand(2,3) print(a) 0
我有下面的 less 部分: @image-ui-wave-width: 28px; [...] .wave { &.saw { background-position: -@
文件日期戳: TIME_SETRUN=1517299635 TIME_SUBMIT=1517299661 TIME_EXEC=1517771852 TIME_EXPIRE=1518117452 TIM
我想将数字表示为数字列表。即使它们的大小不同,我如何加减和除这两个数字?例如:100 - 12 = 88 等于 (1 0 0 ) 减去 ( 1 2) = ( 8 8) 100/12 = 8 等于 (1
使用时 lessc在 commandline ,我可以通过选项--modify-var="my-var=my-val" . 当我通过 API 以编程方式使用较少时,如何传递相同的选项与 less.re
我有一个菜单系统,它使用一个 170px 宽 x 1px 高的图像(无限重复)它的左侧有一个 10px 的边框,但右侧有一个 30px 的边框。 有没有办法使文本居中,但要考虑右侧的额外 20px?
在 the accepted answer to "Iterator to last element of std::vector using end()--" @barry 说: Note that
我正在尝试使用批处理文件创建任意时间。我试图从我的代码中减去设置值(例如1天,1个月和2000年),以显示系统时间减去前面所述的设置值。对于小时和分钟,我要减去10小时和10分钟(在代码中显示为不同的
我有两个表: 表 1:库存 uid|item| -------- 01 |value1 02 |value2 02 |value2 etc|etc 表 2:销售额 uid|item --------
这个问题已经有答案了: Is floating point math broken? (33 个回答) 已关闭 9 年前。 我有一个简单的函数,应该生成 1000 个不同的元素: var start
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this q
.file "calcnew.c" .text .globl calcnew .type calcnew, @function calcnew:
我需要一个很好的资源来阅读如何创建一个算法来获取两条折线(一条由多条线组成的路径)并在它们之间执行并集、减法或交集。这与自定义 API 相关,因此我需要了解底层算法。 此外,任何 VB 方言的源代码都
我正在制作一个简单的计算器。一切正常。但问题是,当我点击加/减/除/乘按钮两次时,应用程序崩溃了。 我从 logcat 中发现了问题,即“java.lang.StringToReal.parseDou
这个问题已经有答案了: How do I compare strings in Java? (23 个回答) 已关闭 3 年前。 我目前正在创建一个计算器,我正在其中读取 String 中的代码。并将
我是一名优秀的程序员,十分优秀!