小编Pap*_*sha的帖子

在 Linux 内核代码中使用 goto 没有意义

我正在浏览 Linux 源代码,在这里我偶然发现了这个功能:

static int check_free_space(struct bsd_acct_struct *acct)
{
    struct kstatfs sbuf;

    if (time_is_after_jiffies(acct->needcheck))
        goto out;

    /* May block */
    if (vfs_statfs(&acct->file->f_path, &sbuf))
        goto out;

    if (acct->active) {
        u64 suspend = sbuf.f_blocks * SUSPEND;
        do_div(suspend, 100);
        if (sbuf.f_bavail <= suspend) {
            acct->active = 0;
            pr_info("Process accounting paused\n");
        }
    } else {
        u64 resume = sbuf.f_blocks * RESUME;
        do_div(resume, 100);
        if (sbuf.f_bavail >= resume) {
            acct->active = 1;
            pr_info("Process accounting resumed\n");
        }
    }

    acct->needcheck = jiffies + ACCT_TIMEOUT*HZ;
out: …
Run Code Online (Sandbox Code Playgroud)

c goto linux-kernel

-1
推荐指数
1
解决办法
358
查看次数

标签 统计

c ×1

goto ×1

linux-kernel ×1