diff --git a/libfs.c b/libfs.c index ccbdf20..04d7efa 100644 --- a/libfs.c +++ b/libfs.c @@ -50,9 +50,20 @@ static ssize_t dummy_read(struct file *file, char __user *buf, size_t len, loff_ return 0; } +#if 0 static ssize_t dummy_write(struct file *file, const char __user *buf, size_t len, loff_t *ppos) { return len; } +#endif +static ssize_t dummy_write(struct file *file, const char __user *buf, size_t len, loff_t *ppos) { + struct inode *inode = file_inode(file); + loff_t new_end = *ppos + len; + + if (inode->i_size < new_end) inode->i_size = new_end; + *ppos += len; + mark_inode_dirty(inode); + return len; +} static const struct file_operations custom_file_ops = { .read = dummy_read, @@ -120,7 +131,9 @@ static int books_create(struct user_namespace *ns, struct inode *dir, // inode->i_op = &simple_file_inode_operations; inode->i_op = &custom_file_inode_operations; inode->i_fop = &custom_file_ops; - d_instantiate(dentry, inode); +// d_instantiate(dentry, inode); + d_add(dentry, inode); + logf("dentry flags: %u, dentry name: %s", dentry->d_flags, dentry->d_name.name); mark_inode_dirty(inode); logf("books_create: created file %s (ino=%lu)", dentry->d_name.name, inode->i_ino);