- 30 8月, 2013 3 次提交
-
-
由 Peter Jones 提交于
This was found by Alexandra Kossovsky, who noted this traceback from kmemleak: > unreferenced object 0xffff880216fcfe00 (size 512): > comm "swapper/0", pid 1, jiffies 4294895429 (age 1415.320s) > hex dump (first 32 bytes): > 00 00 00 00 00 00 00 00 aa aa aa aa aa aa aa aa ................ > 55 55 55 55 55 55 55 55 ff ff ff ff ff ff ff ff UUUUUUUU........ > backtrace: > [<ffffffff813e415c>] kmemleak_alloc+0x21/0x3e > [<ffffffff8111c17f>] > kmemleak_alloc_recursive.constprop.57+0x16/0x18 > [<ffffffff8111e63b>] __kmalloc+0xf9/0x144 > [<ffffffff8123d9cf>] fb_alloc_cmap_gfp+0x47/0xe1 > [<ffffffff8123da77>] fb_alloc_cmap+0xe/0x10 > [<ffffffff81aff40a>] efifb_probe+0x3e9/0x48f > [<ffffffff812c566f>] platform_drv_probe+0x34/0x5e > [<ffffffff812c3e6d>] driver_probe_device+0x98/0x1b4 > [<ffffffff812c3fd7>] __driver_attach+0x4e/0x6f > [<ffffffff812c25bf>] bus_for_each_dev+0x57/0x8a > [<ffffffff812c3984>] driver_attach+0x19/0x1b > [<ffffffff812c362b>] bus_add_driver+0xde/0x201 > [<ffffffff812c453f>] driver_register+0x8c/0x110 > [<ffffffff812c510d>] platform_driver_register+0x41/0x43 > [<ffffffff812c5127>] platform_driver_probe+0x18/0x8a > [<ffffffff81aff002>] efifb_init+0x276/0x295 Signed-off-by: NPeter Jones <pjones@redhat.com> Reviewed-by: NDavid Herrmann <dh.herrmann@gmail.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Boris BREZILLON 提交于
Replace clk_enable/disable with clk_prepare_enable/disable_unprepare to avoid common clk framework warnings. Signed-off-by: NBoris BREZILLON <b.brezillon@overkiz.com> Acked-by: NNicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Mark Brown 提交于
Ensure that the definitions of functions match the prototypes used by other modules by including the header with the prototypes in the files with the definitions. Signed-off-by: NMark Brown <broonie@linaro.org> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
- 29 8月, 2013 3 次提交
-
-
由 Tomi Valkeinen 提交于
The code handling 'alpha_blending_enabled' sysfs file contains WARN_ONs in case the feature is not supported on the current platform. Even though only root can write to the file, anyone can read it, thus causing the kernel to get tainted and printing an ugly warning. Instead of having WARN_ONs, return a proper error if the feature is not supported. Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com> Reported-by: NRussell King - ARM Linux <linux@arm.linux.org.uk>
-
由 Tomi Valkeinen 提交于
Commit 5391e87d (OMAPDSS: remove dispc's dependency to VENC/HDMI) introduced a possible NULL reference bug in the HDMI driver when setting timings. In practice the bug shouldn't happen, as the timings have been verified earlier, and thus the timings should always be ok. Fix the possible issue by moving the use of the timings pointer inside the NULL check. Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com> Reported-by: NDan Carpenter <dan.carpenter@oracle.com>
-
由 Tomi Valkeinen 提交于
Merge da8xx-fb improvements from Darren Etheridge.
-
- 09 8月, 2013 20 次提交
-
-
由 Darren Etheridge 提交于
Updating Kconfig to allow am33xx to include lcdc fbdev driver including some extra dependencies needed by device tree mods. v2: must add FB_MODE_HELPERS as VIDEOMODE_HELPERS alone doesn't get the correct functions from fbmon.c built in. Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Darren Etheridge 提交于
Remove use of explicit inline compiler directive and let the compiler make the decision as per Documentation/CodingStyle. Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Darren Etheridge 提交于
Clean up the code, so that the names of the various clock variables are consistent to it is clear what variable is associated with what clock. Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Darren Etheridge 提交于
Based on original patch by: Afzal Mohammed <afzal@ti.com> LCDC IP has a clock divider to adjust pixel clock, this limits pixel clock range to fck/255 - fck/2(fck - rate of input clock to LCDC IP). In the case of AM335x, where this IP is present, default fck is not sufficient to provide normal pixel clock rates, hence rendering this driver unusable on AM335x. If input clock too is configurable, allowable range of pixel clock would increase. Here initially it is checked whether with present fck, divider in IP could be configured to obtain required rate, if not, fck is adjusted. This makes it usable on AM335x. Note: Another solution would be to model an inherited basic clock divider of CCF, an advantage would be a better possible resolution for pixel clk. And trying to instantiate a CCF clock would mean that to be consistent, 3 bits being turned on to enable clocks of LCDC IP would have to be modeled as gate clocks. Now that would bring in a total of 4 clocks, including necessity to create a new inherited divider clock, and that mean a branch of clock tree would be present in LCDC driver. This would add complexity to LCDC driver bringing in considerable amount of clock handling code, and this would not bring in much advantage for existing use cases other than providing a higher resolution of pixel clock. And existing use cases work without relying on clock modeling. Another fact is that out of the two platform's using this driver DaVinci is not yet converted to CCF. In future if higher resolution of pixel clock is required, and probably after DaVinci is CCF'ed, modeling clock nodes inside driver may be considered. v2: purely cosmetic changes to try and clarify what variables are being used for in the clock rate / divider calculations Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Afzal Mohammed 提交于
Move panel detection to a separate function, this helps in readability as well as makes DT support cleaner. Signed-off-by: NAfzal Mohammed <afzal@ti.com> Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Afzal Mohammed 提交于
Ensure that platform data contains pointer for lcd_ctrl_config. Signed-off-by: NAfzal Mohammed <afzal@ti.com> Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Darren Etheridge 提交于
Replace existing resource handling in the driver with managed device resource. v2: implement some changes as recommended by Prabhakar Lad <prabhakar.csengg@gmail.com> Signed-off-by: NLad, Prabhakar <prabhakar.csengg@gmail.com> Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Afzal Mohammed 提交于
The interrupt handler explicitly has code that handles the sync lost interrupt. However the sync lost interrupt is never actually being enabled in the LCD controller, therefore this interrupt code path is not being exercised. This fix simply enables the generation of the sync lost interrupt by the LCD controller so it can be dealt with appropriately by the interrupt handler. Signed-off-by: NAfzal Mohammed <afzal@ti.com> Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Darren Etheridge 提交于
Based on original patch by: Manjunathappa, Prakash <prakash.pm@ti.com> and Afzal Mohammed <afzal@ti.com> Set only LCD_V2_TFT_24BPP_MODE bit for 24bpp and LCD_V2_TFT_24BPP_UNPACK bit along with LCD_V2_TFT_24BPP_MODE for 32bpp configuration. Patch is tested on am335x-evm for 24bpp and da850-evm for 16bpp configurations. v2: removes confusing fall through in case statement for pixel depth configuration. Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Darren Etheridge 提交于
Change the lcd_disable_raster funtion from using a bool to an enum as the function is very confusing with the current api. This helps make it clearer what the parameter is really doing. Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Darren Etheridge 提交于
v1: original from Afzal Mohammed <afzal@ti.com> fb_set_par helps in runtime configuration of lcd controller like changing resolution, pixel clock etc. (eg. using fbset utility) Reconfigure lcd controller based on information passed by framework. Enable raster back if it was already enabled. As fb_set_par would get invoked indirectly from probe via fb_set_var, remove existing lcdc initialization in probe and do lcdc reset in probe so that reset happens only at the begining. v2: changes from Darren Etheridge <detheridge@ti.com> remove unnecessary conditional branch where we attempt to disable something that we already checked to see if it was disabled. Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Afzal Mohammed 提交于
Update "var" pixclock with the value that is configurable in hardware. This lets user know the actual pixclock. Signed-off-by: NAfzal Mohammed <afzal@ti.com> Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Afzal Mohammed 提交于
store struct device pointer so that dev_dbg/err can be used outside of probe. Signed-off-by: NAfzal Mohammed <afzal@ti.com> Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Darren Etheridge 提交于
Based on original patch by: Afzal Mohammed <afzal@ti.com> Use the new modedb field to store pix clk. Reorganize existing clock divider functions with names now corresponding to what they do, add common function prefix. Fix existing panel modedb pixclock to be in ps instead of Hz. This needed a change in the way clock divider is calculated. As modedb pixclock information is now in ps, override on "var" pixclock over modedb to var conversion is removed. v2: Changed pixel clock configuration to use KHZ2PICOS macro Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Afzal Mohammed 提交于
store lcd clk rate always, i.e. irrespective of whether CPUFREQ is enabled or not. This can be used to get clk rate directly instead of enquiring with clock framework with clk handle every time. Signed-off-by: NAfzal Mohammed <afzal@ti.com> Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Afzal Mohammed 提交于
store current videomode and controller data so that reconfiguring can be done easily. Reconfiguring would be required in fb_set_par, which is going to be added soon. If these details are not stored, the work probe does to retrieve these information would have to repeated at the place of reconfiguring and modifying platform data would be necessary to handle controller data changes like bpp. Signed-off-by: NAfzal Mohammed <afzal@ti.com> Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Afzal Mohammed 提交于
modedb helper now updates "var" information based on the detected panel, remove the unnecessary initialization. Signed-off-by: NAfzal Mohammed <afzal@ti.com> Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Afzal Mohammed 提交于
modedb structure is now used to store panel information, run modedb helper over it for initial update of "var" information instead of equating each fields. While at it, remove redundant update of bits_per_pixel. Note: pixclock is overridden with proper value using an existing code as currently modedb is having it in Hz instead of ps, this would be fixed in a later change and this overide would be removed. Signed-off-by: NAfzal Mohammed <afzal@ti.com> Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Afzal Mohammed 提交于
lcd_reset function doesn't require any arguement, remove it. Signed-off-by: NAfzal Mohammed <afzal@ti.com> Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Afzal Mohammed 提交于
Check whether "struct fb_var_screeninfo" fields are sane, if not update it to be within allowed limits. If user sends down buggy "var" values, this will bring those within allowable limits. And fb_set_par is not supposed to change "var" values, fb_check_var has to ensure that values are proper. Signed-off-by: NAfzal Mohammed <afzal@ti.com> Signed-off-by: NDarren Etheridge <detheridge@ti.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
- 06 8月, 2013 1 次提交
-
-
由 Mythri P K 提交于
ti_hdmi_4xxx_basic_configure() is supposed to initialize the AVI infoframe data in the ip_data container. However, the function actually takes a copy of the infoframe from the ip_data, and then goes on initializing that copy. The initialized data is never copied back to the ip_data container, thus the infoframe in ip_data is left always zero. Afaik, this doesn't really cause any issues in the current mainline, as we don't use the advanced features offered by the AVI infoframe. This patch fixes the initialization of the AVI infoframe. Signed-off-by: NMythri P K <mythripk@ti.com> [tomi.valkeinen@ti.com: updated the description] Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
- 02 8月, 2013 2 次提交
-
-
由 Alexandre Belloni 提交于
Add support for the Himax HX8369 controller as it is quite similar to the hx8357. Signed-off-by: NAlexandre Belloni <alexandre.belloni@free-electrons.com> Signed-off-by: NMaxime Ripard <maxime.ripard@free-electrons.com> Acked-by: NJingoo Han <jg1.han@samsung.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Maxime Ripard 提交于
The IM pins of the HX8357 controller are used to define the interface used to feed pixel stream to the LCD panel. Most of the time, these pins are directly routed to either the ground or the VCC to set their values. Remove the need to assign GPIOs to these pins when we are in such a case. Signed-off-by: NMaxime Ripard <maxime.ripard@free-electrons.com> Acked-by: NJingoo Han <jg1.han@samsung.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
- 26 7月, 2013 6 次提交
-
-
由 Alexandre Courbot 提交于
A framebuffer of this format is set up by SHIELD's bootloader. Signed-off-by: NAlexandre Courbot <acourbot@nvidia.com> Acked-by: NOlof Johansson <olof@lixom.net> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Shingo Nakao 提交于
When backlight turns on early from display, a white line can be seen on the screen. Therefore make sure backlight is off when we are under an fb blank event. Signed-off-by: NShingo Nakao <shingo.x.nakao@sonymobile.com> Cc: Milo Kim <milo.kim@ti.com> Cc: Richard Purdie <rpurdie@rpsys.net> Signed-off-by: NOskar Andero <oskar.andero@sonymobile.com> Acked-by: NMilo Kim <milo.kim@ti.com> Acked-by: NJingoo Han <jg1.han@samsung.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Michael Opdenacker 提交于
This patch proposes to remove the FB_NUC900_DEBUG kernel configuration parameter defined in drivers/video/Kconfig, but used nowhere in the makefiles and source code. Signed-off-by: NMichael Opdenacker <michael.opdenacker@free-electrons.com> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Alexandru Juncu 提交于
Signed-off-by: NAlexandru Juncu <alexj@rosedu.org> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Fabio Estevam 提交于
Since commit ab78029e (drivers/pinctrl: grab default handles from device core) we can rely on device core for handling pinctrl, so remove devm_pinctrl_get_select_default() from the driver. Signed-off-by: NFabio Estevam <fabio.estevam@freescale.com> Acked-by: NShawn Guo <shawn.guo@linaro.org> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
由 Greg Kroah-Hartman 提交于
The dev_attrs field of struct class is going away soon, dev_groups should be used instead. This converts the video output class code to use the correct field. Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com> Cc: Tomi Valkeinen <tomi.valkeinen@ti.com> Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
-
- 22 7月, 2013 2 次提交
-
-
由 Linus Torvalds 提交于
-
git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm由 Linus Torvalds 提交于
Pull ACPI video support fixes from Rafael Wysocki: "I'm sending a separate pull request for this as it may be somewhat controversial. The breakage addressed here is not really new and the fixes may not satisfy all users of the affected systems, but we've had so much back and forth dance in this area over the last several weeks that I think it's time to actually make some progress. The source of the problem is that about a year ago we started to tell BIOSes that we're compatible with Windows 8, which we really need to do, because some systems shipping with Windows 8 are tested with it and nothing else, so if we tell their BIOSes that we aren't compatible with Windows 8, we expose our users to untested BIOS/AML code paths. However, as it turns out, some Windows 8-specific AML code paths are not tested either, because Windows 8 actually doesn't use the ACPI methods containing them, so if we declare Windows 8 compatibility and attempt to use those ACPI methods, things break. That occurs mostly in the backlight support area where in particular the _BCM and _BQC methods are plain unusable on some systems if the OS declares Windows 8 compatibility. [ The additional twist is that they actually become usable if the OS says it is not compatible with Windows 8, but that may cause problems to show up elsewhere ] Investigation carried out by Matthew Garrett indicates that what Windows 8 does about backlight is to leave backlight control up to individual graphics drivers. At least there's evidence that it does that if the Intel graphics driver is used, so we've decided to follow Windows 8 in that respect and allow i915 to control backlight (Daniel likes that part). The first commit from Aaron Lu makes ACPICA export the variable from which we can infer whether or not the BIOS believes that we are compatible with Windows 8. The second commit from Matthew Garrett prepares the ACPI video driver by making it initialize the ACPI backlight even if it is not going to be used afterward (that is needed for backlight control to work on Thinkpads). The third commit implements the actual workaround making i915 take over backlight control if the firmware thinks it's dealing with Windows 8 and is based on the work of multiple developers, including Matthew Garrett, Chun-Yi Lee, Seth Forshee, and Aaron Lu. The final commit from Aaron Lu makes us follow Windows 8 by informing the firmware through the _DOS method that it should not carry out automatic brightness changes, so that brightness can be controlled by GUI. Hopefully, this approach will allow us to avoid using blacklists of systems that should not declare Windows 8 compatibility just to avoid backlight control problems in the future. - Change from Aaron Lu makes ACPICA export a variable which can be used by driver code to determine whether or not the BIOS believes that we are compatible with Windows 8. - Change from Matthew Garrett makes the ACPI video driver initialize the ACPI backlight even if it is not going to be used afterward (that is needed for backlight control to work on Thinkpads). - Fix from Rafael J Wysocki implements Windows 8 backlight support workaround making i915 take over bakclight control if the firmware thinks it's dealing with Windows 8. Based on the work of multiple developers including Matthew Garrett, Chun-Yi Lee, Seth Forshee, and Aaron Lu. - Fix from Aaron Lu makes the kernel follow Windows 8 by informing the firmware through the _DOS method that it should not carry out automatic brightness changes, so that brightness can be controlled by GUI" * tag 'acpi-video-3.11' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: ACPI / video: no automatic brightness changes by win8-compatible firmware ACPI / video / i915: No ACPI backlight if firmware expects Windows 8 ACPI / video: Always call acpi_video_init_brightness() on init ACPICA: expose OSI version
-
- 21 7月, 2013 3 次提交
-
-
git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4由 Linus Torvalds 提交于
Pull ext[34] tmpfile bugfix from Ted Ts'o: "Fix regression caused by commit af51a2ac which added ->tmpfile() support (along with a similar fix for ext3)" * tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: ext3: fix a BUG when opening a file with O_TMPFILE flag ext4: fix a BUG when opening a file with O_TMPFILE flag
-
由 Zheng Liu 提交于
When we try to open a file with O_TMPFILE flag, we will trigger a bug. The root cause is that in ext4_orphan_add() we check ->i_nlink == 0 and this check always fails because we set ->i_nlink = 1 in inode_init_always(). We can use the following program to trigger it: int main(int argc, char *argv[]) { int fd; fd = open(argv[1], O_TMPFILE, 0666); if (fd < 0) { perror("open "); return -1; } close(fd); return 0; } The oops message looks like this: kernel: kernel BUG at fs/ext3/namei.c:1992! kernel: invalid opcode: 0000 [#1] SMP kernel: Modules linked in: ext4 jbd2 crc16 cpufreq_ondemand ipv6 dm_mirror dm_region_hash dm_log dm_mod parport_pc parport serio_raw sg dcdbas pcspkr i2c_i801 ehci_pci ehci_hcd button acpi_cpufreq mperf e1000e ptp pps_core ttm drm_kms_helper drm hwmon i2c_algo_bit i2c_core ext3 jbd sd_mod ahci libahci libata scsi_mod uhci_hcd kernel: CPU: 0 PID: 2882 Comm: tst_tmpfile Not tainted 3.11.0-rc1+ #4 kernel: Hardware name: Dell Inc. OptiPlex 780 /0V4W66, BIOS A05 08/11/2010 kernel: task: ffff880112d30050 ti: ffff8801124d4000 task.ti: ffff8801124d4000 kernel: RIP: 0010:[<ffffffffa00db5ae>] [<ffffffffa00db5ae>] ext3_orphan_add+0x6a/0x1eb [ext3] kernel: RSP: 0018:ffff8801124d5cc8 EFLAGS: 00010202 kernel: RAX: 0000000000000000 RBX: ffff880111510128 RCX: ffff8801114683a0 kernel: RDX: 0000000000000000 RSI: ffff880111510128 RDI: ffff88010fcf65a8 kernel: RBP: ffff8801124d5d18 R08: 0080000000000000 R09: ffffffffa00d3b7f kernel: R10: ffff8801114683a0 R11: ffff8801032a2558 R12: 0000000000000000 kernel: R13: ffff88010fcf6800 R14: ffff8801032a2558 R15: ffff8801115100d8 kernel: FS: 00007f5d172b5700(0000) GS:ffff880117c00000(0000) knlGS:0000000000000000 kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b kernel: CR2: 00007f5d16df15d0 CR3: 0000000110b1d000 CR4: 00000000000407f0 kernel: Stack: kernel: 000000000000000c ffff8801048a7dc8 ffff8801114685a8 ffffffffa00b80d7 kernel: ffff8801124d5e38 ffff8801032a2558 ffff88010ce24d68 0000000000000000 kernel: ffff88011146b300 ffff8801124d5d44 ffff8801124d5d78 ffffffffa00db7e1 kernel: Call Trace: kernel: [<ffffffffa00b80d7>] ? journal_start+0x8c/0xbd [jbd] kernel: [<ffffffffa00db7e1>] ext3_tmpfile+0xb2/0x13b [ext3] kernel: [<ffffffff821076f8>] path_openat+0x11f/0x5e7 kernel: [<ffffffff821c86b4>] ? list_del+0x11/0x30 kernel: [<ffffffff82065fa2>] ? __dequeue_entity+0x33/0x38 kernel: [<ffffffff82107cd5>] do_filp_open+0x3f/0x8d kernel: [<ffffffff82112532>] ? __alloc_fd+0x50/0x102 kernel: [<ffffffff820f9296>] do_sys_open+0x13b/0x1cd kernel: [<ffffffff820f935c>] SyS_open+0x1e/0x20 kernel: [<ffffffff82398c02>] system_call_fastpath+0x16/0x1b kernel: Code: 39 c7 0f 85 67 01 00 00 0f b7 03 25 00 f0 00 00 3d 00 40 00 00 74 18 3d 00 80 00 00 74 11 3d 00 a0 00 00 74 0a 83 7b 48 00 74 04 <0f> 0b eb fe 49 8b 85 50 03 00 00 4c 89 f6 48 c7 c7 c0 99 0e a0 kernel: RIP [<ffffffffa00db5ae>] ext3_orphan_add+0x6a/0x1eb [ext3] kernel: RSP <ffff8801124d5cc8> Here we couldn't call clear_nlink() directly because in d_tmpfile() we will call inode_dec_link_count() to decrease ->i_nlink. So this commit tries to call d_tmpfile() before ext4_orphan_add() to fix this problem. Signed-off-by: NZheng Liu <wenqing.lz@taobao.com> Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu> Cc: Jan Kara <jack@suse.cz> Cc: Al Viro <viro@zeniv.linux.org.uk>
-
由 Zheng Liu 提交于
When we try to open a file with O_TMPFILE flag, we will trigger a bug. The root cause is that in ext4_orphan_add() we check ->i_nlink == 0 and this check always fails because we set ->i_nlink = 1 in inode_init_always(). We can use the following program to trigger it: int main(int argc, char *argv[]) { int fd; fd = open(argv[1], O_TMPFILE, 0666); if (fd < 0) { perror("open "); return -1; } close(fd); return 0; } The oops message looks like this: kernel BUG at fs/ext4/namei.c:2572! invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC Modules linked in: dlci bridge stp hidp cmtp kernelcapi l2tp_ppp l2tp_netlink l2tp_core sctp libcrc32c rfcomm tun fuse nfnetli nk can_raw ipt_ULOG can_bcm x25 scsi_transport_iscsi ipx p8023 p8022 appletalk phonet psnap vmw_vsock_vmci_transport af_key vmw_vmci rose vsock atm can netrom ax25 af_rxrpc ir da pppoe pppox ppp_generic slhc bluetooth nfc rfkill rds caif_socket caif crc_ccitt af_802154 llc2 llc snd_hda_codec_realtek snd_hda_intel snd_hda_codec serio_raw snd_pcm pcsp kr edac_core snd_page_alloc snd_timer snd soundcore r8169 mii sr_mod cdrom pata_atiixp radeon backlight drm_kms_helper ttm CPU: 1 PID: 1812571 Comm: trinity-child2 Not tainted 3.11.0-rc1+ #12 Hardware name: Gigabyte Technology Co., Ltd. GA-MA78GM-S2H/GA-MA78GM-S2H, BIOS F12a 04/23/2010 task: ffff88007dfe69a0 ti: ffff88010f7b6000 task.ti: ffff88010f7b6000 RIP: 0010:[<ffffffff8125ce69>] [<ffffffff8125ce69>] ext4_orphan_add+0x299/0x2b0 RSP: 0018:ffff88010f7b7cf8 EFLAGS: 00010202 RAX: 0000000000000000 RBX: ffff8800966d3020 RCX: 0000000000000000 RDX: 0000000000000000 RSI: ffff88007dfe70b8 RDI: 0000000000000001 RBP: ffff88010f7b7d40 R08: ffff880126a3c4e0 R09: ffff88010f7b7ca0 R10: 0000000000000000 R11: 0000000000000000 R12: ffff8801271fd668 R13: ffff8800966d2f78 R14: ffff88011d7089f0 R15: ffff88007dfe69a0 FS: 00007f70441a3740(0000) GS:ffff88012a800000(0000) knlGS:00000000f77c96c0 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000002834000 CR3: 0000000107964000 CR4: 00000000000007e0 DR0: 0000000000780000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600 Stack: 0000000000002000 00000020810b6dde 0000000000000000 ffff88011d46db00 ffff8800966d3020 ffff88011d7089f0 ffff88009c7f4c10 ffff88010f7b7f2c ffff88007dfe69a0 ffff88010f7b7da8 ffffffff8125cfac ffff880100000004 Call Trace: [<ffffffff8125cfac>] ext4_tmpfile+0x12c/0x180 [<ffffffff811cba78>] path_openat+0x238/0x700 [<ffffffff8100afc4>] ? native_sched_clock+0x24/0x80 [<ffffffff811cc647>] do_filp_open+0x47/0xa0 [<ffffffff811db73f>] ? __alloc_fd+0xaf/0x200 [<ffffffff811ba2e4>] do_sys_open+0x124/0x210 [<ffffffff81010725>] ? syscall_trace_enter+0x25/0x290 [<ffffffff811ba3ee>] SyS_open+0x1e/0x20 [<ffffffff816ca8d4>] tracesys+0xdd/0xe2 [<ffffffff81001001>] ? start_thread_common.constprop.6+0x1/0xa0 Code: 04 00 00 00 89 04 24 31 c0 e8 c4 77 04 00 e9 43 fe ff ff 66 25 00 d0 66 3d 00 80 0f 84 0e fe ff ff 83 7b 48 00 0f 84 04 fe ff ff <0f> 0b 49 8b 8c 24 50 07 00 00 e9 88 fe ff ff 0f 1f 84 00 00 00 Here we couldn't call clear_nlink() directly because in d_tmpfile() we will call inode_dec_link_count() to decrease ->i_nlink. So this commit tries to call d_tmpfile() before ext4_orphan_add() to fix this problem. Reported-by: NDave Jones <davej@redhat.com> Signed-off-by: NZheng Liu <wenqing.lz@taobao.com> Tested-by: NDarrick J. Wong <darrick.wong@oracle.com> Tested-by: NDave Jones <davej@redhat.com> Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu> Acked-by: NAl Viro <viro@zeniv.linux.org.uk>
-