linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 5/5] f2fs: avoid BUG_ON from check_nid_range and update return path in do_read_inode
@ 2013-03-17  8:27 Namjae Jeon
  2013-03-18  2:19 ` Jaegeuk Kim
  0 siblings, 1 reply; 4+ messages in thread
From: Namjae Jeon @ 2013-03-17  8:27 UTC (permalink / raw)
  To: jaegeuk.kim
  Cc: linux-f2fs-devel, linux-fsdevel, linux-kernel, Namjae Jeon,
	Namjae Jeon, Amit Sahrawat

From: Namjae Jeon <namjae.jeon@samsung.com>

In function check_nid_range, there is no need to trigger BUG_ON and make kernel stop.
Instead it could just check and indicate the inode number to be EINVAL.
Update the return path in do_read_inode to use the return from check_nid_range.

Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: Amit Sahrawat <a.sahrawat@samsung.com>
---
 fs/f2fs/f2fs.h  |    6 ++++--
 fs/f2fs/inode.c |    6 +++++-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index be7ae70..1dae921 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -515,9 +515,11 @@ static inline void mutex_unlock_op(struct f2fs_sb_info *sbi, enum lock_type t)
 /*
  * Check whether the given nid is within node id range.
  */
-static inline void check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
+static inline int check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
 {
-	BUG_ON((nid >= NM_I(sbi)->max_nid));
+	if (nid >= NM_I(sbi)->max_nid)
+		return -EINVAL;
+	return 0;
 }
 
 #define F2FS_DEFAULT_ALLOCATED_BLOCKS	1
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index ddae412..6d82020 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -44,7 +44,11 @@ static int do_read_inode(struct inode *inode)
 	struct f2fs_inode *ri;
 
 	/* Check if ino is within scope */
-	check_nid_range(sbi, inode->i_ino);
+	if (check_nid_range(sbi, inode->i_ino)) {
+		f2fs_msg(inode->i_sb, KERN_ERR, "bad inode number: %lu",
+			 (unsigned long) inode->i_ino);
+		return -EINVAL;
+	}
 
 	node_page = get_node_page(sbi, inode->i_ino);
 	if (IS_ERR(node_page))
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 5/5] f2fs: avoid BUG_ON from check_nid_range and update return path in do_read_inode
  2013-03-17  8:27 [PATCH 5/5] f2fs: avoid BUG_ON from check_nid_range and update return path in do_read_inode Namjae Jeon
@ 2013-03-18  2:19 ` Jaegeuk Kim
  2013-03-18  5:23   ` Namjae Jeon
  0 siblings, 1 reply; 4+ messages in thread
From: Jaegeuk Kim @ 2013-03-18  2:19 UTC (permalink / raw)
  To: Namjae Jeon
  Cc: linux-f2fs-devel, linux-fsdevel, linux-kernel, Namjae Jeon,
	Amit Sahrawat

[-- Attachment #1: Type: text/plain, Size: 1969 bytes --]

2013-03-17 (일), 17:27 +0900, Namjae Jeon:
> From: Namjae Jeon <namjae.jeon@samsung.com>
> 
> In function check_nid_range, there is no need to trigger BUG_ON and make kernel stop.
> Instead it could just check and indicate the inode number to be EINVAL.
> Update the return path in do_read_inode to use the return from check_nid_range.
> 
> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
> Signed-off-by: Amit Sahrawat <a.sahrawat@samsung.com>
> ---
>  fs/f2fs/f2fs.h  |    6 ++++--
>  fs/f2fs/inode.c |    6 +++++-
>  2 files changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index be7ae70..1dae921 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -515,9 +515,11 @@ static inline void mutex_unlock_op(struct f2fs_sb_info *sbi, enum lock_type t)
>  /*
>   * Check whether the given nid is within node id range.
>   */
> -static inline void check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
> +static inline int check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
>  {
> -	BUG_ON((nid >= NM_I(sbi)->max_nid));
> +	if (nid >= NM_I(sbi)->max_nid)
> +		return -EINVAL;
> +	return 0;

At this moment, I'd like to apply this patch and remain BUG_ON together
since we should find real bugs in f2fs.
How do you think?

>  }
>  
>  #define F2FS_DEFAULT_ALLOCATED_BLOCKS	1
> diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
> index ddae412..6d82020 100644
> --- a/fs/f2fs/inode.c
> +++ b/fs/f2fs/inode.c
> @@ -44,7 +44,11 @@ static int do_read_inode(struct inode *inode)
>  	struct f2fs_inode *ri;
>  
>  	/* Check if ino is within scope */
> -	check_nid_range(sbi, inode->i_ino);
> +	if (check_nid_range(sbi, inode->i_ino)) {
> +		f2fs_msg(inode->i_sb, KERN_ERR, "bad inode number: %lu",
> +			 (unsigned long) inode->i_ino);
> +		return -EINVAL;
> +	}
>  
>  	node_page = get_node_page(sbi, inode->i_ino);
>  	if (IS_ERR(node_page))

-- 
Jaegeuk Kim
Samsung

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 5/5] f2fs: avoid BUG_ON from check_nid_range and update return path in do_read_inode
  2013-03-18  2:19 ` Jaegeuk Kim
@ 2013-03-18  5:23   ` Namjae Jeon
  2013-03-18  5:40     ` Jaegeuk Kim
  0 siblings, 1 reply; 4+ messages in thread
From: Namjae Jeon @ 2013-03-18  5:23 UTC (permalink / raw)
  To: jaegeuk.kim
  Cc: linux-f2fs-devel, linux-fsdevel, linux-kernel, Namjae Jeon,
	Amit Sahrawat

2013/3/18, Jaegeuk Kim <jaegeuk.kim@samsung.com>:
> 2013-03-17 (일), 17:27 +0900, Namjae Jeon:
>> From: Namjae Jeon <namjae.jeon@samsung.com>
>>
>> In function check_nid_range, there is no need to trigger BUG_ON and make
>> kernel stop.
>> Instead it could just check and indicate the inode number to be EINVAL.
>> Update the return path in do_read_inode to use the return from
>> check_nid_range.
>>
>> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
>> Signed-off-by: Amit Sahrawat <a.sahrawat@samsung.com>
>> ---
>>  fs/f2fs/f2fs.h  |    6 ++++--
>>  fs/f2fs/inode.c |    6 +++++-
>>  2 files changed, 9 insertions(+), 3 deletions(-)
>>
>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
>> index be7ae70..1dae921 100644
>> --- a/fs/f2fs/f2fs.h
>> +++ b/fs/f2fs/f2fs.h
>> @@ -515,9 +515,11 @@ static inline void mutex_unlock_op(struct
>> f2fs_sb_info *sbi, enum lock_type t)
>>  /*
>>   * Check whether the given nid is within node id range.
>>   */
>> -static inline void check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
>> +static inline int check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
>>  {
>> -	BUG_ON((nid >= NM_I(sbi)->max_nid));
>> +	if (nid >= NM_I(sbi)->max_nid)
>> +		return -EINVAL;
>> +	return 0;
>
Hi Jaegeuk.
> At this moment, I'd like to apply this patch and remain BUG_ON together
> since we should find real bugs in f2fs.
> How do you think?
Instead of BUG_ON, we can make use of WARN_ON as that can also solve
our purpose of finding the real bugs with the same information (back
trace) and will also keep system running.

Thanks :)
>
>>  }
>>
>>  #define F2FS_DEFAULT_ALLOCATED_BLOCKS	1
>> diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
>> index ddae412..6d82020 100644
>> --- a/fs/f2fs/inode.c
>> +++ b/fs/f2fs/inode.c
>> @@ -44,7 +44,11 @@ static int do_read_inode(struct inode *inode)
>>  	struct f2fs_inode *ri;
>>
>>  	/* Check if ino is within scope */
>> -	check_nid_range(sbi, inode->i_ino);
>> +	if (check_nid_range(sbi, inode->i_ino)) {
>> +		f2fs_msg(inode->i_sb, KERN_ERR, "bad inode number: %lu",
>> +			 (unsigned long) inode->i_ino);
>> +		return -EINVAL;
>> +	}
>>
>>  	node_page = get_node_page(sbi, inode->i_ino);
>>  	if (IS_ERR(node_page))
>
> --
> Jaegeuk Kim
> Samsung
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 5/5] f2fs: avoid BUG_ON from check_nid_range and update return path in do_read_inode
  2013-03-18  5:23   ` Namjae Jeon
@ 2013-03-18  5:40     ` Jaegeuk Kim
  0 siblings, 0 replies; 4+ messages in thread
From: Jaegeuk Kim @ 2013-03-18  5:40 UTC (permalink / raw)
  To: Namjae Jeon
  Cc: linux-f2fs-devel, linux-fsdevel, linux-kernel, Namjae Jeon,
	Amit Sahrawat

[-- Attachment #1: Type: text/plain, Size: 2794 bytes --]

2013-03-18 (월), 14:23 +0900, Namjae Jeon:
> 2013/3/18, Jaegeuk Kim <jaegeuk.kim@samsung.com>:
> > 2013-03-17 (일), 17:27 +0900, Namjae Jeon:
> >> From: Namjae Jeon <namjae.jeon@samsung.com>
> >>
> >> In function check_nid_range, there is no need to trigger BUG_ON and make
> >> kernel stop.
> >> Instead it could just check and indicate the inode number to be EINVAL.
> >> Update the return path in do_read_inode to use the return from
> >> check_nid_range.
> >>
> >> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
> >> Signed-off-by: Amit Sahrawat <a.sahrawat@samsung.com>
> >> ---
> >>  fs/f2fs/f2fs.h  |    6 ++++--
> >>  fs/f2fs/inode.c |    6 +++++-
> >>  2 files changed, 9 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> >> index be7ae70..1dae921 100644
> >> --- a/fs/f2fs/f2fs.h
> >> +++ b/fs/f2fs/f2fs.h
> >> @@ -515,9 +515,11 @@ static inline void mutex_unlock_op(struct
> >> f2fs_sb_info *sbi, enum lock_type t)
> >>  /*
> >>   * Check whether the given nid is within node id range.
> >>   */
> >> -static inline void check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
> >> +static inline int check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
> >>  {
> >> -	BUG_ON((nid >= NM_I(sbi)->max_nid));
> >> +	if (nid >= NM_I(sbi)->max_nid)
> >> +		return -EINVAL;
> >> +	return 0;
> >
> Hi Jaegeuk.
> > At this moment, I'd like to apply this patch and remain BUG_ON together
> > since we should find real bugs in f2fs.
> > How do you think?
> Instead of BUG_ON, we can make use of WARN_ON as that can also solve
> our purpose of finding the real bugs with the same information (back
> trace) and will also keep system running.
> 

Got it~!
Thanks,

> Thanks :)
> >
> >>  }
> >>
> >>  #define F2FS_DEFAULT_ALLOCATED_BLOCKS	1
> >> diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
> >> index ddae412..6d82020 100644
> >> --- a/fs/f2fs/inode.c
> >> +++ b/fs/f2fs/inode.c
> >> @@ -44,7 +44,11 @@ static int do_read_inode(struct inode *inode)
> >>  	struct f2fs_inode *ri;
> >>
> >>  	/* Check if ino is within scope */
> >> -	check_nid_range(sbi, inode->i_ino);
> >> +	if (check_nid_range(sbi, inode->i_ino)) {
> >> +		f2fs_msg(inode->i_sb, KERN_ERR, "bad inode number: %lu",
> >> +			 (unsigned long) inode->i_ino);
> >> +		return -EINVAL;
> >> +	}
> >>
> >>  	node_page = get_node_page(sbi, inode->i_ino);
> >>  	if (IS_ERR(node_page))
> >
> > --
> > Jaegeuk Kim
> > Samsung
> >
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

-- 
Jaegeuk Kim
Samsung

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-03-18  5:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-17  8:27 [PATCH 5/5] f2fs: avoid BUG_ON from check_nid_range and update return path in do_read_inode Namjae Jeon
2013-03-18  2:19 ` Jaegeuk Kim
2013-03-18  5:23   ` Namjae Jeon
2013-03-18  5:40     ` Jaegeuk Kim

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).