fbdev: Honor the return value of device_create_file
PATCH 3/8 fbdev: Honor the return value of device_create_file
Check the return value of device_create_file(). If return is 'fail', remove attributes by calling device_remove_file().
Signed-off-by Antonino Daplas <[email protected]>
---
drivers/video/fbsysfs.c | 35 ++++++++++++++++++++++++++++------- include/linux/fb.h | 1 + 2 files changed, 29 insertions(+), 7 deletions(-)
drivers/video/fbsysfs.c +28 -7
@@ -20,6 +20,8 @@ #include <linux/fb.h>#include <linux/console.h> #include <linux/module.h> +#define FB_SYSFS_FLAG_ATTR 1 +/** * framebuffer_alloc - creates a new frame buffer info structure *
@@ -471,12 +473,27 @@ #endifint fb_init_class_device (struct fb_info *fb_info) { -unsigned int i; +int i, error =0 ; +class_set_devdata (fb_info->class_device, fb_info); -for (i =0 ; i <ARRAY_SIZE (class_device_attrs); i++) -class_device_create_file (fb_info->class_device, - &class_device_attrs[i]); + fb_info->class_flag |=FB_SYSFS_FLAG_ATTR ; + +for (i =0 ; i <ARRAY_SIZE (class_device_attrs); i++) { + error =class_device_create_file (fb_info->class_device, + &class_device_attrs[i]); + +if (error) +break ; + } + +if (error) { +while (--i >=0 ) +class_device_remove_file (fb_info->class_device, + &class_device_attrs[i]); + fb_info->class_flag &= ~FB_SYSFS_FLAG_ATTR ; + } +return 0 ; }
@@ -484,9 +501,13 @@ void fb_cleanup_class_device(struct fb_i {unsigned int i; -for (i =0 ; i <ARRAY_SIZE (class_device_attrs); i++) -class_device_remove_file (fb_info->class_device, - &class_device_attrs[i]); +if (fb_info->class_flag &FB_SYSFS_FLAG_ATTR ) { +for (i =0 ; i <ARRAY_SIZE (class_device_attrs); i++) +class_device_remove_file (fb_info->class_device, + &class_device_attrs[i]); + + fb_info->class_flag &= ~FB_SYSFS_FLAG_ATTR ; + } }#ifdef CONFIG_FB_BACKLIGHT
include/linux/fb.h +1 -0
@@ -776,6 +776,7 @@ #endifstruct fb_ops *fbops;struct device *device;struct class_device *class_device;/* sysfs per device attrs */ +int class_flag;/* private sysfs flags */ #ifdef CONFIG_FB_TILEBLITTING struct fb_tile_ops *tileops;/* Tile Blitting */ #endif
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642