LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH 1/5] fs: efs: fix trailing and leading space
@ 2015-02-12 9:02 Sudip Mukherjee
2015-02-12 9:02 ` [PATCH 2/5] fs: efs: fix forward declarations Sudip Mukherjee
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Sudip Mukherjee @ 2015-02-12 9:02 UTC (permalink / raw)
To: Andrew Morton; +Cc: Sudip Mukherjee, linux-kernel
fixed the trailing and leading whitespace errors in the code.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
Hi Andrew,
since there is no maintainer so sending to you.
fs/efs/super.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/fs/efs/super.c b/fs/efs/super.c
index 7fca462..c2f105f 100644
--- a/fs/efs/super.c
+++ b/fs/efs/super.c
@@ -248,8 +248,8 @@ static int efs_validate_super(struct efs_sb_info *sb, struct efs_super *super) {
sb->inode_free = be32_to_cpu(super->fs_tinode);
sb->inode_blocks = be16_to_cpu(super->fs_cgisize);
sb->total_groups = be16_to_cpu(super->fs_ncg);
-
- return 0;
+
+ return 0;
}
static int efs_fill_super(struct super_block *s, void *d, int silent)
@@ -258,18 +258,18 @@ static int efs_fill_super(struct super_block *s, void *d, int silent)
struct buffer_head *bh;
struct inode *root;
- sb = kzalloc(sizeof(struct efs_sb_info), GFP_KERNEL);
+ sb = kzalloc(sizeof(struct efs_sb_info), GFP_KERNEL);
if (!sb)
return -ENOMEM;
s->s_fs_info = sb;
-
+
s->s_magic = EFS_SUPER_MAGIC;
if (!sb_set_blocksize(s, EFS_BLOCKSIZE)) {
pr_err("device does not support %d byte blocks\n",
EFS_BLOCKSIZE);
return -EINVAL;
}
-
+
/* read the vh (volume header) block */
bh = sb_bread(s, 0);
@@ -295,7 +295,7 @@ static int efs_fill_super(struct super_block *s, void *d, int silent)
pr_err("cannot read superblock\n");
return -EINVAL;
}
-
+
if (efs_validate_super(sb, (struct efs_super *) bh->b_data)) {
#ifdef DEBUG
pr_warn("invalid superblock at block %u\n",
--
1.8.1.2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/5] fs: efs: fix forward declarations
2015-02-12 9:02 [PATCH 1/5] fs: efs: fix trailing and leading space Sudip Mukherjee
@ 2015-02-12 9:02 ` Sudip Mukherjee
2015-02-12 9:02 ` [PATCH 3/5] fs: efs: remove nonexistant site Sudip Mukherjee
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Sudip Mukherjee @ 2015-02-12 9:02 UTC (permalink / raw)
To: Andrew Morton; +Cc: Sudip Mukherjee, linux-kernel
rearrange the functions to get rid of the forward declarations.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
fs/efs/super.c | 130 ++++++++++++++++++++++++++++-----------------------------
1 file changed, 65 insertions(+), 65 deletions(-)
diff --git a/fs/efs/super.c b/fs/efs/super.c
index c2f105f..9aaae09 100644
--- a/fs/efs/super.c
+++ b/fs/efs/super.c
@@ -17,31 +17,6 @@
#include <linux/efs_vh.h>
#include <linux/efs_fs_sb.h>
-static int efs_statfs(struct dentry *dentry, struct kstatfs *buf);
-static int efs_fill_super(struct super_block *s, void *d, int silent);
-
-static struct dentry *efs_mount(struct file_system_type *fs_type,
- int flags, const char *dev_name, void *data)
-{
- return mount_bdev(fs_type, flags, dev_name, data, efs_fill_super);
-}
-
-static void efs_kill_sb(struct super_block *s)
-{
- struct efs_sb_info *sbi = SUPER_INFO(s);
- kill_block_super(s);
- kfree(sbi);
-}
-
-static struct file_system_type efs_fs_type = {
- .owner = THIS_MODULE,
- .name = "efs",
- .mount = efs_mount,
- .kill_sb = efs_kill_sb,
- .fs_flags = FS_REQUIRES_DEV,
-};
-MODULE_ALIAS_FS("efs");
-
static struct pt_types sgi_pt_types[] = {
{0x00, "SGI vh"},
{0x01, "SGI trkrepl"},
@@ -112,6 +87,30 @@ static void destroy_inodecache(void)
kmem_cache_destroy(efs_inode_cachep);
}
+static int efs_statfs(struct dentry *dentry, struct kstatfs *buf)
+{
+ struct super_block *sb = dentry->d_sb;
+ struct efs_sb_info *sbi = SUPER_INFO(sb);
+ u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
+
+ buf->f_type = EFS_SUPER_MAGIC; /* efs magic number */
+ buf->f_bsize = EFS_BLOCKSIZE; /* blocksize */
+ buf->f_blocks = sbi->total_groups * /* total data blocks */
+ (sbi->group_size - sbi->inode_blocks);
+ buf->f_bfree = sbi->data_free; /* free data blocks */
+ buf->f_bavail = sbi->data_free; /* free blocks for non-root */
+ buf->f_files = sbi->total_groups * /* total inodes */
+ sbi->inode_blocks *
+ (EFS_BLOCKSIZE / sizeof(struct efs_dinode));
+ buf->f_ffree = sbi->inode_free; /* free inodes */
+ buf->f_fsid.val[0] = (u32)id;
+ buf->f_fsid.val[1] = (u32)(id >> 32);
+ buf->f_namelen = EFS_MAXNAMELEN; /* max filename length */
+
+ return 0;
+}
+
+
static int efs_remount(struct super_block *sb, int *flags, char *data)
{
sync_filesystem(sb);
@@ -132,29 +131,6 @@ static const struct export_operations efs_export_ops = {
.get_parent = efs_get_parent,
};
-static int __init init_efs_fs(void) {
- int err;
- pr_info(EFS_VERSION" - http://aeschi.ch.eu.org/efs/\n");
- err = init_inodecache();
- if (err)
- goto out1;
- err = register_filesystem(&efs_fs_type);
- if (err)
- goto out;
- return 0;
-out:
- destroy_inodecache();
-out1:
- return err;
-}
-
-static void __exit exit_efs_fs(void) {
- unregister_filesystem(&efs_fs_type);
- destroy_inodecache();
-}
-
-module_init(init_efs_fs)
-module_exit(exit_efs_fs)
static efs_block_t efs_validate_vh(struct volume_header *vh) {
int i;
@@ -329,25 +305,49 @@ static int efs_fill_super(struct super_block *s, void *d, int silent)
return 0;
}
-static int efs_statfs(struct dentry *dentry, struct kstatfs *buf) {
- struct super_block *sb = dentry->d_sb;
- struct efs_sb_info *sbi = SUPER_INFO(sb);
- u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
+static struct dentry *efs_mount(struct file_system_type *fs_type,
+ int flags, const char *dev_name, void *data)
+{
+ return mount_bdev(fs_type, flags, dev_name, data, efs_fill_super);
+}
- buf->f_type = EFS_SUPER_MAGIC; /* efs magic number */
- buf->f_bsize = EFS_BLOCKSIZE; /* blocksize */
- buf->f_blocks = sbi->total_groups * /* total data blocks */
- (sbi->group_size - sbi->inode_blocks);
- buf->f_bfree = sbi->data_free; /* free data blocks */
- buf->f_bavail = sbi->data_free; /* free blocks for non-root */
- buf->f_files = sbi->total_groups * /* total inodes */
- sbi->inode_blocks *
- (EFS_BLOCKSIZE / sizeof(struct efs_dinode));
- buf->f_ffree = sbi->inode_free; /* free inodes */
- buf->f_fsid.val[0] = (u32)id;
- buf->f_fsid.val[1] = (u32)(id >> 32);
- buf->f_namelen = EFS_MAXNAMELEN; /* max filename length */
+static void efs_kill_sb(struct super_block *s)
+{
+ struct efs_sb_info *sbi = SUPER_INFO(s);
+ kill_block_super(s);
+ kfree(sbi);
+}
+
+static struct file_system_type efs_fs_type = {
+ .owner = THIS_MODULE,
+ .name = "efs",
+ .mount = efs_mount,
+ .kill_sb = efs_kill_sb,
+ .fs_flags = FS_REQUIRES_DEV,
+};
+MODULE_ALIAS_FS("efs");
+
+static int __init init_efs_fs(void) {
+ int err;
+ pr_info(EFS_VERSION" - http://aeschi.ch.eu.org/efs/\n");
+ err = init_inodecache();
+ if (err)
+ goto out1;
+ err = register_filesystem(&efs_fs_type);
+ if (err)
+ goto out;
return 0;
+out:
+ destroy_inodecache();
+out1:
+ return err;
}
+static void __exit exit_efs_fs(void) {
+ unregister_filesystem(&efs_fs_type);
+ destroy_inodecache();
+}
+
+module_init(init_efs_fs)
+module_exit(exit_efs_fs)
--
1.8.1.2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 3/5] fs: efs: remove nonexistant site
2015-02-12 9:02 [PATCH 1/5] fs: efs: fix trailing and leading space Sudip Mukherjee
2015-02-12 9:02 ` [PATCH 2/5] fs: efs: fix forward declarations Sudip Mukherjee
@ 2015-02-12 9:02 ` Sudip Mukherjee
2015-02-12 9:02 ` [PATCH 4/5] fs: efs: fix possible memory leak Sudip Mukherjee
2015-02-12 9:02 ` [PATCH 5/5] MAINTAINERS: remove website Sudip Mukherjee
3 siblings, 0 replies; 7+ messages in thread
From: Sudip Mukherjee @ 2015-02-12 9:02 UTC (permalink / raw)
To: Andrew Morton; +Cc: Sudip Mukherjee, linux-kernel
remove the not-working website address from code and Kconfig file.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
fs/efs/Kconfig | 3 +--
fs/efs/super.c | 2 +-
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/fs/efs/Kconfig b/fs/efs/Kconfig
index d020e3c..d5d9c8a 100644
--- a/fs/efs/Kconfig
+++ b/fs/efs/Kconfig
@@ -7,8 +7,7 @@ config EFS_FS
uses the XFS file system for hard disk partitions however).
This implementation only offers read-only access. If you don't know
- what all this is about, it's safe to say N. For more information
- about EFS see its home page at <http://aeschi.ch.eu.org/efs/>.
+ what all this is about, it's safe to say N.
To compile the EFS file system support as a module, choose M here: the
module will be called efs.
diff --git a/fs/efs/super.c b/fs/efs/super.c
index 9aaae09..6026bd4 100644
--- a/fs/efs/super.c
+++ b/fs/efs/super.c
@@ -330,7 +330,7 @@ MODULE_ALIAS_FS("efs");
static int __init init_efs_fs(void) {
int err;
- pr_info(EFS_VERSION" - http://aeschi.ch.eu.org/efs/\n");
+ pr_info(EFS_VERSION "\n");
err = init_inodecache();
if (err)
goto out1;
--
1.8.1.2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 4/5] fs: efs: fix possible memory leak
2015-02-12 9:02 [PATCH 1/5] fs: efs: fix trailing and leading space Sudip Mukherjee
2015-02-12 9:02 ` [PATCH 2/5] fs: efs: fix forward declarations Sudip Mukherjee
2015-02-12 9:02 ` [PATCH 3/5] fs: efs: remove nonexistant site Sudip Mukherjee
@ 2015-02-12 9:02 ` Sudip Mukherjee
2015-02-17 19:31 ` Al Viro
2015-02-12 9:02 ` [PATCH 5/5] MAINTAINERS: remove website Sudip Mukherjee
3 siblings, 1 reply; 7+ messages in thread
From: Sudip Mukherjee @ 2015-02-12 9:02 UTC (permalink / raw)
To: Andrew Morton; +Cc: Sudip Mukherjee, linux-kernel
we are allocating memory for struct efs_sb_info, but afterwards when
we are returning with error we are not releasing the memory.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
fs/efs/super.c | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/fs/efs/super.c b/fs/efs/super.c
index 6026bd4..e1037aa 100644
--- a/fs/efs/super.c
+++ b/fs/efs/super.c
@@ -233,6 +233,7 @@ static int efs_fill_super(struct super_block *s, void *d, int silent)
struct efs_sb_info *sb;
struct buffer_head *bh;
struct inode *root;
+ int ret = -EINVAL;
sb = kzalloc(sizeof(struct efs_sb_info), GFP_KERNEL);
if (!sb)
@@ -243,7 +244,7 @@ static int efs_fill_super(struct super_block *s, void *d, int silent)
if (!sb_set_blocksize(s, EFS_BLOCKSIZE)) {
pr_err("device does not support %d byte blocks\n",
EFS_BLOCKSIZE);
- return -EINVAL;
+ goto err_out;
}
/* read the vh (volume header) block */
@@ -251,7 +252,7 @@ static int efs_fill_super(struct super_block *s, void *d, int silent)
if (!bh) {
pr_err("cannot read volume header\n");
- return -EINVAL;
+ goto err_out;
}
/*
@@ -262,14 +263,13 @@ static int efs_fill_super(struct super_block *s, void *d, int silent)
sb->fs_start = efs_validate_vh((struct volume_header *) bh->b_data);
brelse(bh);
- if (sb->fs_start == -1) {
- return -EINVAL;
- }
+ if (sb->fs_start == -1)
+ goto err_out;
bh = sb_bread(s, sb->fs_start + EFS_SUPER);
if (!bh) {
pr_err("cannot read superblock\n");
- return -EINVAL;
+ goto err_out;
}
if (efs_validate_super(sb, (struct efs_super *) bh->b_data)) {
@@ -278,7 +278,7 @@ static int efs_fill_super(struct super_block *s, void *d, int silent)
sb->fs_start + EFS_SUPER);
#endif
brelse(bh);
- return -EINVAL;
+ goto err_out;
}
brelse(bh);
@@ -293,16 +293,22 @@ static int efs_fill_super(struct super_block *s, void *d, int silent)
root = efs_iget(s, EFS_ROOTINODE);
if (IS_ERR(root)) {
pr_err("get root inode failed\n");
- return PTR_ERR(root);
+ ret = PTR_ERR(root);
+ goto err_out;
}
s->s_root = d_make_root(root);
if (!(s->s_root)) {
pr_err("get root dentry failed\n");
- return -ENOMEM;
+ ret = -ENOMEM;
+ goto err_out;
}
return 0;
+
+err_out:
+ kfree(sb);
+ return ret;
}
static struct dentry *efs_mount(struct file_system_type *fs_type,
--
1.8.1.2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 5/5] MAINTAINERS: remove website
2015-02-12 9:02 [PATCH 1/5] fs: efs: fix trailing and leading space Sudip Mukherjee
` (2 preceding siblings ...)
2015-02-12 9:02 ` [PATCH 4/5] fs: efs: fix possible memory leak Sudip Mukherjee
@ 2015-02-12 9:02 ` Sudip Mukherjee
3 siblings, 0 replies; 7+ messages in thread
From: Sudip Mukherjee @ 2015-02-12 9:02 UTC (permalink / raw)
To: Andrew Morton; +Cc: Sudip Mukherjee, linux-kernel
the website mentioned for efs file system does not exist
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
---
MAINTAINERS | 1 -
1 file changed, 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index fb0d901..bd1a5cb 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3731,7 +3731,6 @@ S: Maintained
F: drivers/video/fbdev/efifb.c
EFS FILESYSTEM
-W: http://aeschi.ch.eu.org/efs/
S: Orphan
F: fs/efs/
--
1.8.1.2
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 4/5] fs: efs: fix possible memory leak
2015-02-12 9:02 ` [PATCH 4/5] fs: efs: fix possible memory leak Sudip Mukherjee
@ 2015-02-17 19:31 ` Al Viro
2015-02-18 13:56 ` Sudip Mukherjee
0 siblings, 1 reply; 7+ messages in thread
From: Al Viro @ 2015-02-17 19:31 UTC (permalink / raw)
To: Sudip Mukherjee; +Cc: Andrew Morton, linux-kernel
On Thu, Feb 12, 2015 at 02:32:21PM +0530, Sudip Mukherjee wrote:
> we are allocating memory for struct efs_sb_info, but afterwards when
> we are returning with error we are not releasing the memory.
The hell we are not - unlike ->put_super(), ->kill_sb() is *always*
called, even when fill_super() fails halfway through. Exactly because
it makes for simpler cleanup requirements on failure exits in said
fill_super(). And we have
static void efs_kill_sb(struct super_block *s)
{
struct efs_sb_info *sbi = SUPER_INFO(s);
kill_block_super(s);
kfree(sbi);
}
for ->kill_sb() there, so sbi will *not* leak.
NAK. This patch not only complicates efs_fill_super() for no good reason,
it ends up with double kfree() on those failure exits - ->s_fs_info is
left pointing to freed memory and efs_kill_sb() does kfree() again.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 4/5] fs: efs: fix possible memory leak
2015-02-17 19:31 ` Al Viro
@ 2015-02-18 13:56 ` Sudip Mukherjee
0 siblings, 0 replies; 7+ messages in thread
From: Sudip Mukherjee @ 2015-02-18 13:56 UTC (permalink / raw)
To: Al Viro; +Cc: Andrew Morton, linux-kernel
On Tue, Feb 17, 2015 at 07:31:01PM +0000, Al Viro wrote:
> On Thu, Feb 12, 2015 at 02:32:21PM +0530, Sudip Mukherjee wrote:
>
> The hell we are not - unlike ->put_super(), ->kill_sb() is *always*
> called, even when fill_super() fails halfway through. Exactly because
> it makes for simpler cleanup requirements on failure exits in said
> fill_super(). And we have
> static void efs_kill_sb(struct super_block *s)
> {
> struct efs_sb_info *sbi = SUPER_INFO(s);
> kill_block_super(s);
> kfree(sbi);
> }
> for ->kill_sb() there, so sbi will *not* leak.
thanks for explaining this. I was seeing the code in the fat and was trying to figure out why this in efs was not released.
i was have one more doubt about efs_iget() but that also is actually cleared with this.
thanks
sudip
>
> NAK. This patch not only complicates efs_fill_super() for no good reason,
> it ends up with double kfree() on those failure exits - ->s_fs_info is
> left pointing to freed memory and efs_kill_sb() does kfree() again.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-02-18 13:56 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-12 9:02 [PATCH 1/5] fs: efs: fix trailing and leading space Sudip Mukherjee
2015-02-12 9:02 ` [PATCH 2/5] fs: efs: fix forward declarations Sudip Mukherjee
2015-02-12 9:02 ` [PATCH 3/5] fs: efs: remove nonexistant site Sudip Mukherjee
2015-02-12 9:02 ` [PATCH 4/5] fs: efs: fix possible memory leak Sudip Mukherjee
2015-02-17 19:31 ` Al Viro
2015-02-18 13:56 ` Sudip Mukherjee
2015-02-12 9:02 ` [PATCH 5/5] MAINTAINERS: remove website Sudip Mukherjee
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).