kfifo 試す (7)

毎週月曜体調悪い。
家人の所用にて早めに帰宅後、メシ食って tail -f を試してみた。
ちなみに read なソレは以下

static ssize_t yamanetoshi_read(struct file *file, 
                                char __user *buf, 
                                size_t size, 
                                loff_t *offset)
{
        int ret = 0, len = 0;
        unsigned char *ptr = NULL;

        printk("read start\n");

        if(0 == kfifo_len(fifo_ptr)) {
                if(0 == write_open) {
                        return 0;
                } else {
                        read_sleep = TRUE;
                        interruptible_sleep_on(&queue);
                }
        }

        len = kfifo_len(fifo_ptr);
        if(size>len) size = len;

        ptr = kmalloc(size, GFP_KERNEL);
        if(!ptr)
                return -ENOMEM;

        ret = kfifo_get(fifo_ptr, ptr, size);

        if(copy_to_user(buf, ptr, ret))
                ret = -EFAULT;

        kfree(ptr);

        printk("read end\n");
        return ret;
}

write を open しない状態で

$ tail -f ./fifo101130

したら延々と read start が出力される。ただし、write が open されたら正常に出力されていて、Ctrl-d で cat なプロセスが終わったら再度 read start が延々。
よく考えたら tail -f は EOF 受けても終わっちゃ駄目か。
で、両方 cat してみたら当たり前ですが、きちんと動いた。使う道具はきちんと選びましょう、というのが教訓ですか??