From 031f974c368eefe1afc85872ea31574bcd0a9228 Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Mon, 30 Sep 2013 02:21:03 +0400 Subject: [PATCH] fix another inode leaking in simplefs_create_fs_object() There we iterate over inodes using simplefs_get_inode(), while instead we already have last inode number, just use it instead, and increment some paddings to it (start inode, reserved inodes). And form after this patch kedr shows that there is no leaks. (but we must recheck it in the future.) --- simple.c | 8 +------- simple.h | 5 +++++ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/simple.c b/simple.c index 149aee3..17f54f1 100644 --- a/simple.c +++ b/simple.c @@ -488,13 +488,7 @@ static int simplefs_create_fs_object(struct inode *dir, struct dentry *dentry, inode->i_sb = sb; inode->i_op = &simplefs_inode_ops; inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; - inode->i_ino = SIMPLEFS_START_INO; - - /* Loop until we get an unique inode number */ - while (simplefs_get_inode(sb, inode->i_ino)) { - /* inode inode->i_ino already exists */ - inode->i_ino++; - } + inode->i_ino = (count + SIMPLEFS_START_INO - SIMPLEFS_RESERVED_INODES + 1); sfs_inode = kmalloc(sizeof(struct simplefs_inode), GFP_KERNEL); sfs_inode->inode_no = inode->i_ino; diff --git a/simple.h b/simple.h index 2bc9858..e7f1f96 100644 --- a/simple.h +++ b/simple.h @@ -4,6 +4,11 @@ #define SIMPLEFS_DEFAULT_BLOCK_SIZE 4096 #define SIMPLEFS_FILENAME_MAXLEN 255 #define SIMPLEFS_START_INO 10 +/** + * Reserver inodes for super block, inodestore + * and datablock + */ +#define SIMPLEFS_RESERVED_INODES 3 #ifdef SIMPLEFS_DEBUG #define sfs_trace(fmt, ...) { \