diff options
Diffstat (limited to 'lib/vsprintf.c')
| -rw-r--r-- | lib/vsprintf.c | 13 | 
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/vsprintf.c b/lib/vsprintf.c index b0967cf17137..e78017a3e1bd 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -869,6 +869,15 @@ char *dentry_name(char *buf, char *end, const struct dentry *d, struct printf_sp  	return widen_string(buf, n, end, spec);  } +static noinline_for_stack +char *file_dentry_name(char *buf, char *end, const struct file *f, +			struct printf_spec spec, const char *fmt) +{ +	if (check_pointer(&buf, end, f, spec)) +		return buf; + +	return dentry_name(buf, end, f->f_path.dentry, spec, fmt); +}  #ifdef CONFIG_BLOCK  static noinline_for_stack  char *bdev_name(char *buf, char *end, struct block_device *bdev, @@ -2166,9 +2175,7 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,  	case 'C':  		return clock(buf, end, ptr, spec, fmt);  	case 'D': -		return dentry_name(buf, end, -				   ((const struct file *)ptr)->f_path.dentry, -				   spec, fmt); +		return file_dentry_name(buf, end, ptr, spec, fmt);  #ifdef CONFIG_BLOCK  	case 'g':  		return bdev_name(buf, end, ptr, spec, fmt);  | 
