{ "results": [ { "index": 0, "function": "__might_resched.cold", "module": "vmlinux", "function_type": "normal", "address_computed": "0xffffffff8121acd0", "address_formatted": "0xffffffff8121acd0 (0xffffffff8121aae4 + 0x1ec)", "addr2line_address": "0xffffffff8121acd0", "source": { "primary": { "function": "__might_resched", "file": "kernel/sched/core.c", "line": 9163 }, "inlined_frames": [] }, "function_source": { "file": "kernel/sched/core.c", "start_line": 9115, "end_line": 9164, "code": "\nvoid __might_resched(const char *file, int line, unsigned int offsets)\n{\n\t/* Ratelimiting timestamp: */\n\tstatic unsigned long prev_jiffy;\n\n\tunsigned long preempt_disable_ip;\n\n\t/* WARN_ON_ONCE() by default, no rate limit required: */\n\trcu_sleep_check();\n\n\tif ((resched_offsets_ok(offsets) && !irqs_disabled() &&\n\t !is_idle_task(current) && !current->non_block_count) ||\n\t system_state == SYSTEM_BOOTING || system_state > SYSTEM_RUNNING ||\n\t oops_in_progress)\n\t\treturn;\n\n\tif (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)\n\t\treturn;\n\tprev_jiffy = jiffies;\n\n\t/* Save this before calling printk(), since that will clobber it: */\n\tpreempt_disable_ip = get_preempt_disable_ip(current);\n\n\tpr_err(\"BUG: sleeping function called from invalid context at %s:%d\\n\",\n\t file, line);\n\tpr_err(\"in_atomic(): %d, irqs_disabled(): %d, non_block: %d, pid: %d, name: %s\\n\",\n\t in_atomic(), irqs_disabled(), current->non_block_count,\n\t current->pid, current->comm);\n\tpr_err(\"preempt_count: %x, expected: %x\\n\", preempt_count(),\n\t offsets & MIGHT_RESCHED_PREEMPT_MASK);\n\n\tif (IS_ENABLED(CONFIG_PREEMPT_RCU)) {\n\t\tpr_err(\"RCU nest depth: %d, expected: %u\\n\",\n\t\t rcu_preempt_depth(), offsets >> MIGHT_RESCHED_RCU_SHIFT);\n\t}\n\n\tif (task_stack_end_corrupted(current))\n\t\tpr_emerg(\"Thread overran stack, or stack corrupted\\n\");\n\n\tdebug_show_held_locks(current);\n\tif (irqs_disabled())\n\t\tprint_irqtrace_events(current);\n\n\tprint_preempt_disable_ip(offsets & MIGHT_RESCHED_PREEMPT_MASK,\n\t\t\t\t preempt_disable_ip);\n\n\tdump_stack();\n\tadd_taint(TAINT_WARN, LOCKDEP_STILL_OK);\n}\n" }, "git_blame_hashes": [ "1c3c5eab171590f86edd8d31389d61dd1efe3037", "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "312364f3534cc974b79a96d062bde2386315201f", "50e081b96e35e43b65591f40f7376204decd1cb5", "8d713b699e84aade6b64e241a35f22e166fc8174", "a45ed302b6e6fe5b03166321c08b4f2ad4a92a35", "a8b686b3af4419f92e0ea5be1c76fb68363df8e6", "aef745fca016aea45adae5c98e8698904dd8ad51", "d1c6d149cf04d6c7c3c3ebf4b66c82500cbcf6e1", "d1ccc66df8bfe30ee2533ceef40633d65154b43d", "f0b22e39e3409109d40ef036b1f46b419e82f58e" ], "blame_details": [ { "hash": "50e081b96e35e43b65591f40f7376204decd1cb5", "subject": "sched: Make RCU nest depth distinct in __might_resched()", "link": "https://lkml.kernel.org/r/20210923165358.243232823@linutronix.de" }, { "hash": "8d713b699e84aade6b64e241a35f22e166fc8174", "subject": "sched: Make might_sleep() output less confusing", "link": "https://lkml.kernel.org/r/20210923165358.181022656@linutronix.de" }, { "hash": "a45ed302b6e6fe5b03166321c08b4f2ad4a92a35", "subject": "sched: Cleanup might_sleep() printks", "link": "https://lkml.kernel.org/r/20210923165358.117496067@linutronix.de" }, { "hash": "312364f3534cc974b79a96d062bde2386315201f", "subject": "kernel.h: Add non_block_start/end()", "link": "https://lore.kernel.org/r/20190826201425.17547-4-daniel.vetter@ffwll.ch" }, { "hash": "1c3c5eab171590f86edd8d31389d61dd1efe3037", "subject": "sched/core: Enable might_sleep() and smp_processor_id() checks early", "link": "http://lkml.kernel.org/r/20170516184736.272225698@linutronix.de" }, { "hash": "d1ccc66df8bfe30ee2533ceef40633d65154b43d", "subject": "sched/core: Clean up comments" }, { "hash": "f0b22e39e3409109d40ef036b1f46b419e82f58e", "subject": "sched/debug: Add taint on \"BUG: Sleeping function called from invalid context\"", "link": "http://lkml.kernel.org/r/1469216762-19626-1-git-send-email-vegard.nossum@oracle.com" }, { "hash": "d1c6d149cf04d6c7c3c3ebf4b66c82500cbcf6e1", "subject": "sched/debug: Make the \"Preemption disabled at ...\" message more useful" }, { "hash": "a8b686b3af4419f92e0ea5be1c76fb68363df8e6", "subject": "sched/debug: Check for stack overflow in ___might_sleep()", "link": "http://lkml.kernel.org/r/5490B158.4060005@redhat.com" }, { "hash": "aef745fca016aea45adae5c98e8698904dd8ad51", "subject": "sched: clean up __might_sleep()" }, { "hash": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "subject": "Linux-2.6.12-rc2" } ], "recent_commits": [ { "hash": "50e081b96e35e", "subject": "sched: Make RCU nest depth distinct in __might_resched()" }, { "hash": "8d713b699e84a", "subject": "sched: Make might_sleep() output less confusing" }, { "hash": "a45ed302b6e6f", "subject": "sched: Cleanup might_sleep() printks" }, { "hash": "874f670e6088d", "subject": "sched: Clean up the might_sleep() underscore zoo" }, { "hash": "2062a4e8ae9f4", "subject": "kallsyms/printk: add loglvl to print_ip_sym()" }, { "hash": "312364f3534cc", "subject": "kernel.h: Add non_block_start/end()" }, { "hash": "1c3c5eab17159", "subject": "sched/core: Enable might_sleep() and smp_processor_id() checks early" }, { "hash": "d1ccc66df8bfe", "subject": "sched/core: Clean up comments" }, { "hash": "f0b22e39e3409", "subject": "sched/debug: Add taint on \"BUG: Sleeping function called from invalid context\"" }, { "hash": "d1c6d149cf04d", "subject": "sched/debug: Make the \"Preemption disabled at ...\" message more useful" } ], "disasm": "ffffffff8121ac86:\tjne ffffffff8121ac95 <__might_resched.cold+0x1b1>\nffffffff8121ac88:\tmov %gs:0x12f23388(%rip),%rdi # ffffffff9413e018 \nffffffff8121ac90:\tcall ffffffff81e49010 \nffffffff8121ac95:\tmov %gs:0x12f23394(%rip),%eax # ffffffff9413e030 <__preempt_count>\nffffffff8121ac9c:\tand $0x7fffffff,%eax\nffffffff8121aca1:\tcmp %eax,%r12d\nffffffff8121aca4:\tje ffffffff8121accb <__might_resched.cold+0x1e7>\nffffffff8121aca6:\tmov $0xffffffff8bae91c0,%rdi\nffffffff8121acad:\tcall ffffffff81224e30 <_printk>\nffffffff8121acb2:\tmov %r15,%rcx\nffffffff8121acb5:\tmov %r15,%rdx\nffffffff8121acb8:\tmov $0xffffffff8bae9200,%rsi\nffffffff8121acbf:\tmov $0xffffffff8bae9240,%rdi\nffffffff8121acc6:\tcall ffffffff81224e30 <_printk>\nffffffff8121accb:\tcall ffffffff8175b130 \nffffffff8121acd0:\txor %esi,%esi <<< crash\nffffffff8121acd2:\tmov $0x9,%edi\nffffffff8121acd7:\tcall ffffffff81c6db20 \nffffffff8121acdc:\tjmp ffffffff81d54d18 <__might_resched+0x108>\nffffffff8121ace1:\tcall ffffffff82758a80 <__asan_report_load8_noabort>\nffffffff8121ace6:\tjmp ffffffff8121ab13 <__might_resched.cold+0x2f>" }, { "index": 1, "function": "shmem_undo_range", "module": "vmlinux", "function_type": "normal", "address_computed": "0xffffffff8250f297", "address_formatted": "0xffffffff8250f297 (0xffffffff8250ee50 + 0x447)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0xffffffff8250f296", "source": { "primary": { "function": "shmem_undo_range", "file": "mm/shmem.c", "line": 1150 }, "inlined_frames": [] }, "function_source": null, "note": "function boundary heuristic misfired (extracted >150 lines) for mm/shmem.c:1150" }, { "index": 2, "function": "shmem_evict_inode", "module": "vmlinux", "function_type": "normal", "address_computed": "0xffffffff825108a3", "address_formatted": "0xffffffff825108a3 (0xffffffff825104b0 + 0x3f3)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0xffffffff825108a2", "source": { "primary": { "function": "shmem_truncate_range", "file": "mm/shmem.c", "line": 1277 }, "inlined_frames": [ { "function": "shmem_evict_inode", "file": "mm/shmem.c", "line": 1407 } ] }, "function_source": { "file": "mm/shmem.c", "start_line": 1274, "end_line": 1280, "code": "\nvoid shmem_truncate_range(struct inode *inode, loff_t lstart, uoff_t lend)\n{\n\tshmem_undo_range(inode, lstart, lend, false);\n\tinode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));\n\tinode_inc_iversion(inode);\n}\n" }, "git_blame_hashes": [ "1635f6a74152f1dcd1b888231609d64875f0a81a", "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "36f05cab0a2c97bda288c3b6a557ec5fb8d9bba6", "37d369fa97cc0774ea4eab726d16bcb5fbe3a104", "cf2766bb7c25baf38b1cda3360bc531ad79c33e7" ], "recent_commits": [ { "hash": "37d369fa97cc0", "subject": "fs: Add uoff_t" }, { "hash": "cf2766bb7c25b", "subject": "mm: convert to new timestamp accessors" }, { "hash": "6528733416f13", "subject": "shmem: convert to ctime accessor functions" }, { "hash": "36f05cab0a2c9", "subject": "tmpfs: add support for an i_version counter" }, { "hash": "078cd8279e659", "subject": "fs: Replace CURRENT_TIME with current_time() for inode timestamps" }, { "hash": "1635f6a74152f", "subject": "tmpfs: undo fallocation on failure" }, { "hash": "285b2c4fdd69e", "subject": "tmpfs: demolish old swap vector support" }, { "hash": "1da177e4c3f41", "subject": "Linux-2.6.12-rc2" } ] }, { "index": 3, "function": "evict", "module": "vmlinux", "function_type": "normal", "address_computed": "0xffffffff8290f9e2", "address_formatted": "0xffffffff8290f9e2 (0xffffffff8290f620 + 0x3c2)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0xffffffff8290f9e1", "source": { "primary": { "function": "evict", "file": "fs/inode.c", "line": 841 }, "inlined_frames": [] }, "function_source": { "file": "fs/inode.c", "start_line": 809, "end_line": 866, "code": " *\n * An inode must already be marked I_FREEING so that we avoid the inode being\n * moved back onto lists if we race with other code that manipulates the lists\n * (e.g. writeback_single_inode). The caller is responsible for setting this.\n *\n * An inode must already be removed from the LRU list before being evicted from\n * the cache. This should occur atomically with setting the I_FREEING state\n * flag, so no inodes here should ever be on the LRU when being evicted.\n */\nstatic void evict(struct inode *inode)\n{\n\tconst struct super_operations *op = inode->i_sb->s_op;\n\n\tBUG_ON(!(inode_state_read_once(inode) & I_FREEING));\n\tBUG_ON(!list_empty(&inode->i_lru));\n\n\tinode_io_list_del(inode);\n\tinode_sb_list_del(inode);\n\n\tspin_lock(&inode->i_lock);\n\tinode_wait_for_lru_isolating(inode);\n\n\t/*\n\t * Wait for flusher thread to be done with the inode so that filesystem\n\t * does not start destroying it while writeback is still running. Since\n\t * the inode has I_FREEING set, flusher thread won't start new work on\n\t * the inode. We just have to wait for running writeback to finish.\n\t */\n\tinode_wait_for_writeback(inode);\n\tspin_unlock(&inode->i_lock);\n\n\tif (op->evict_inode) {\n\t\top->evict_inode(inode);\n\t} else {\n\t\ttruncate_inode_pages_final(&inode->i_data);\n\t\tclear_inode(inode);\n\t}\n\tif (S_ISCHR(inode->i_mode) && inode->i_cdev)\n\t\tcd_forget(inode);\n\n\tremove_inode_hash(inode);\n\n\t/*\n\t * Wake up waiters in __wait_on_freeing_inode().\n\t *\n\t * It is an invariant that any thread we need to wake up is already\n\t * accounted for before remove_inode_hash() acquires ->i_lock -- both\n\t * sides take the lock and sleep is aborted if the inode is found\n\t * unhashed. Thus either the sleeper wins and goes off CPU, or removal\n\t * wins and the sleeper aborts after testing with the lock.\n\t *\n\t * This also means we don't need any fences for the call below.\n\t */\n\tinode_wake_up_bit(inode, __I_NEW);\n\tBUG_ON(inode_state_read_once(inode) != (I_FREEING | I_CLEAR));\n\n\tdestroy_inode(inode);\n}\n" }, "git_blame_hashes": [ "003a6607304dddb314acc475883064feeefbe2e7", "0fe340a98b584a31b07c664dc5ff0c923730581e", "169ebd90131b2ffca74bb2dbe7eeacd39fb83714", "2a0629834cd82f05d424bbc193374f9a43d1f87d", "55fa6091d83160ca772fc37cebae45d42695a708", "57510c58b5832c8cb36516cdba48543133f3ab85", "5bc9ad78c2f836bd2fe9b5c911f8499364ee5b6e", "644da5960ded137c339bc69bc2aeac54f73aad59", "661074e91b1da1ee262dfde6dd836deacccb9def", "7994e6f7254354e03028a11f98a27bd67dace9f1", "91b0abe36a7b2b3b02d7500925a5f8455334f0e5", "b2b2af8e614b4dcd8aca1369d82ce5ad0461a7b1", "b4272d4c810532e1a4dea111433a0af56d3bd2b7", "b4dbfd8653b34b0ab6c024ceda32af488c9b5602", "be7ce4161f9e6bf2497f90337d1214aa6ee06e15", "dbd5768f87ff6fb0a4fe09c4d7b6c4a24de99430", "eb7e453a83007d019d718c6b3666a1c082b676b0", "f5aa78e2be066f3801785094f1b55a3114fe461a" ], "recent_commits": [ { "hash": "003a6607304dd", "subject": "fs: push list presence check into inode_io_list_del()" }, { "hash": "f5aa78e2be066", "subject": "Manual conversion to use ->i_state accessors of all places not covered by coccinelle" }, { "hash": "b4dbfd8653b34", "subject": "Coccinelle-based conversion to use ->i_state accessors" }, { "hash": "eb7e453a83007", "subject": "fs: drop the lock trip around I_NEW wake up in evict()" }, { "hash": "45c9faf506658", "subject": "vfs: make evict() use smp_mb__after_spinlock instead of smp_mb" }, { "hash": "0fe340a98b584", "subject": "inode: port __I_NEW to var event" }, { "hash": "57510c58b5832", "subject": "vfs: drop one lock trip in evict()" }, { "hash": "2a0629834cd82", "subject": "vfs: Don't evict inode under the inode lru traversing context" }, { "hash": "5bc9ad78c2f83", "subject": "vfs: handle __wait_on_freeing_inode() and evict() race" }, { "hash": "4e7b5671c6a88", "subject": "block: remove i_bdev" } ] }, { "index": 4, "function": "iput.part.0", "module": "vmlinux", "function_type": "normal", "address_computed": "0xffffffff829113f5", "address_formatted": "0xffffffff829113f5 (0xffffffff82910df0 + 0x605)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0xffffffff829113f4", "source": { "primary": { "function": "iput_final", "file": "fs/inode.c", "line": 1960 }, "inlined_frames": [ { "function": "iput", "file": "fs/inode.c", "line": 2009 } ] }, "function_source": { "file": "fs/inode.c", "start_line": 1907, "end_line": 1961, "code": " * Called when we're dropping the last reference\n * to an inode.\n *\n * Call the FS \"drop_inode()\" function, defaulting to\n * the legacy UNIX filesystem behaviour. If it tells\n * us to evict inode, do so. Otherwise, retain inode\n * in cache if fs is alive, sync and evict if fs is\n * shutting down.\n */\nstatic void iput_final(struct inode *inode)\n{\n\tstruct super_block *sb = inode->i_sb;\n\tconst struct super_operations *op = inode->i_sb->s_op;\n\tint drop;\n\n\tWARN_ON(inode_state_read(inode) & I_NEW);\n\tVFS_BUG_ON_INODE(atomic_read(&inode->i_count) != 0, inode);\n\n\tif (op->drop_inode)\n\t\tdrop = op->drop_inode(inode);\n\telse\n\t\tdrop = inode_generic_drop(inode);\n\n\tif (!drop &&\n\t !(inode_state_read(inode) & I_DONTCACHE) &&\n\t (sb->s_flags & SB_ACTIVE)) {\n\t\t__inode_lru_list_add(inode, true);\n\t\tspin_unlock(&inode->i_lock);\n\t\treturn;\n\t}\n\n\t/*\n\t * Re-check ->i_count in case the ->drop_inode() hooks played games.\n\t * Note we only execute this if the verdict was to drop the inode.\n\t */\n\tVFS_BUG_ON_INODE(atomic_read(&inode->i_count) != 0, inode);\n\n\tif (drop) {\n\t\tinode_state_set(inode, I_FREEING);\n\t} else {\n\t\tinode_state_set(inode, I_WILL_FREE);\n\t\tspin_unlock(&inode->i_lock);\n\n\t\twrite_inode_now(inode, 1);\n\n\t\tspin_lock(&inode->i_lock);\n\t\tWARN_ON(inode_state_read(inode) & I_NEW);\n\t\tinode_state_replace(inode, I_WILL_FREE, I_FREEING);\n\t}\n\n\tinode_lru_list_del(inode);\n\tspin_unlock(&inode->i_lock);\n\n\tevict(inode);\n}\n" }, "git_blame_hashes": [ "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "250df6ed274d767da844a5d9f05720b804240197", "3f19b2ab97a97b413c24b66c67ae16daa4f56c35", "45321ac54316eaeeebde0b5f728a1791e500974c", "4c6b40877b4dc83f61a762a3a35a09dcf744b585", "7ccf19a8042e343f8159f8a5fdd6a9422aa90c78", "88149082bb8ef31b289673669e080ec6a00c2e59", "b2b2af8e614b4dcd8aca1369d82ce5ad0461a7b1", "b4dbfd8653b34b0ab6c024ceda32af488c9b5602", "be97a4b63ca8c3ed8f5c3f5606a15a8379c78afb", "e7f59097071f2e193e900093742a4be85839f3d9", "f5aa78e2be066f3801785094f1b55a3114fe461a", "f99b3917789d83ea89b24b722d784956f8289f45" ], "recent_commits": [ { "hash": "4c6b40877b4dc", "subject": "fs: cosmetic fixes to lru handling" }, { "hash": "f5aa78e2be066", "subject": "Manual conversion to use ->i_state accessors of all places not covered by coccinelle" }, { "hash": "b4dbfd8653b34", "subject": "Coccinelle-based conversion to use ->i_state accessors" }, { "hash": "be97a4b63ca8c", "subject": "fs: assert on ->i_count in iput_final()" }, { "hash": "f99b3917789d8", "subject": "fs: rename generic_delete_inode() and generic_drop_inode()" }, { "hash": "51b8c1fe250d1", "subject": "vfs: keep inodes with page cache off the inode shrinker LRU" }, { "hash": "88149082bb8ef", "subject": "fs: Handle I_DONTCACHE in iput_final() instead of generic_drop_inode()" }, { "hash": "3f19b2ab97a97", "subject": "vfs, afs, ext4: Make the inode hash table RCU searchable" }, { "hash": "1751e8a6cb935", "subject": "Rename superblock flags (MS_xyz -> SB_xyz)" }, { "hash": "563f40019d16e", "subject": "fs: don't set *REFERENCED on single use objects" } ] }, { "index": 5, "function": "iput", "module": "vmlinux", "function_type": "normal", "address_computed": "0xffffffff82911d85", "address_formatted": "0xffffffff82911d85 (0xffffffff82911d50 + 0x35)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0xffffffff82911d84", "source": { "primary": { "function": "iput", "file": "fs/inode.c", "line": 0 }, "inlined_frames": [] }, "function_source": null, "note": "addr2line returned line 0 for fs/inode.c \u2014 DWARF may be incomplete at this address" }, { "index": 6, "function": "filename_unlinkat", "module": "vmlinux", "function_type": "normal", "address_computed": "0xffffffff828d9216", "address_formatted": "0xffffffff828d9216 (0xffffffff828d8db0 + 0x466)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0xffffffff828d9215", "source": { "primary": { "function": "filename_unlinkat", "file": "fs/namei.c", "line": 5572 }, "inlined_frames": [] }, "function_source": { "file": "fs/namei.c", "start_line": 5517, "end_line": 5587, "code": "}\nEXPORT_SYMBOL(vfs_unlink);\n\n/*\n * Make sure that the actual truncation of the file will occur outside its\n * directory's i_rwsem. Truncate can take a long time if there is a lot of\n * writeout happening, and we don't want to prevent access to the directory\n * while waiting on the I/O.\n */\nint filename_unlinkat(int dfd, struct filename *name)\n{\n\tint error;\n\tstruct dentry *dentry;\n\tstruct path path;\n\tstruct qstr last;\n\tint type;\n\tstruct inode *inode;\n\tstruct delegated_inode delegated_inode = { };\n\tunsigned int lookup_flags = 0;\nretry:\n\terror = filename_parentat(dfd, name, lookup_flags, &path, &last, &type);\n\tif (error)\n\t\treturn error;\n\n\terror = -EISDIR;\n\tif (type != LAST_NORM)\n\t\tgoto exit_path_put;\n\n\terror = mnt_want_write(path.mnt);\n\tif (error)\n\t\tgoto exit_path_put;\nretry_deleg:\n\tdentry = start_dirop(path.dentry, &last, lookup_flags);\n\terror = PTR_ERR(dentry);\n\tif (IS_ERR(dentry))\n\t\tgoto exit_drop_write;\n\n\t/* Why not before? Because we want correct error value */\n\tif (unlikely(last.name[last.len])) {\n\t\tif (d_is_dir(dentry))\n\t\t\terror = -EISDIR;\n\t\telse\n\t\t\terror = -ENOTDIR;\n\t\tend_dirop(dentry);\n\t\tgoto exit_drop_write;\n\t}\n\tinode = dentry->d_inode;\n\tihold(inode);\n\terror = security_path_unlink(&path, dentry);\n\tif (error)\n\t\tgoto exit_end_dirop;\n\terror = vfs_unlink(mnt_idmap(path.mnt), path.dentry->d_inode,\n\t\t\t dentry, &delegated_inode);\nexit_end_dirop:\n\tend_dirop(dentry);\n\tiput(inode);\t/* truncate the inode here */\n\tif (is_delegated(&delegated_inode)) {\n\t\terror = break_deleg_wait(&delegated_inode);\n\t\tif (!error)\n\t\t\tgoto retry_deleg;\n\t}\nexit_drop_write:\n\tmnt_drop_write(path.mnt);\nexit_path_put:\n\tpath_put(&path);\n\tif (retry_estale(error, lookup_flags)) {\n\t\tlookup_flags |= LOOKUP_REVAL;\n\t\tgoto retry;\n\t}\n\treturn error;\n}\n" }, "git_blame_hashes": [ "0612d9fb270a474fe6a46cc5b8d3f5b71cf5f580", "0ee50b47532a81ab36046241822d1ecb4e08e76d", "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2", "2773d282cd56464f62e9b4703c41d2f733a67842", "2ad94ae654f5eb72fd3260b706aea645cf4a7791", "3661a7887462b2352ef5199a04e79c3d3c11fff3", "4037d966f034ba5da2872c413b2ec17eca867e68", "4d359507346a156491300cc193252b525892ae91", "5a14696c1795d3843673b5cf1982d0e5357a5bbf", "5d18f8133cad85ccbb7fa6fd351d75025da32504", "6521f8917082928a4cb637eb64b77b5f2f5b30fc", "6976ed2dd0d59086d16d853ac9b21776be68aaad", "b21996e36c8e3b92a84e972378bde80b43acd890", "c30dabfe5d10c5fd70d882e5afb8f59f2942b194", "c5f563f9e9e66c0ad0b23abe25165c124579b70e", "e50aae1d39ac37a95f453a699456b73dd07e3913", "f5beed755bce1791d926ded9d83640b25e14a617" ], "recent_commits": [ { "hash": "e50aae1d39ac3", "subject": "non-consuming variants of do_{unlinkat,rmdir}()" }, { "hash": "a8058f8442df3", "subject": "Merge tag 'vfs-6.19-rc1.directory.locking' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs" }, { "hash": "3661a7887462b", "subject": "VFS: tidy up do_unlinkat()" }, { "hash": "4037d966f034b", "subject": "VFS: introduce start_dirop() and end_dirop()" }, { "hash": "6976ed2dd0d59", "subject": "filelock: add struct delegated_inode" }, { "hash": "2773d282cd564", "subject": "docs/vfs: update references to i_mutex to i_rwsem" }, { "hash": "204a575e91f3d", "subject": "VFS: add common error checks to lookup_one_qstr_excl()" }, { "hash": "6036c5f131752", "subject": "fs: simplify misleading code to remove ambiguity regarding ihold()/iput()" }, { "hash": "74d7970febf7e", "subject": "ksmbd: fix racy issue from using ->d_parent and ->d_name" }, { "hash": "abf08576afe31", "subject": "fs: port vfs_*() helpers to struct mnt_idmap" } ] }, { "index": 7, "function": "__x64_sys_unlink", "module": "vmlinux", "function_type": "normal", "address_computed": "0xffffffff828d97b6", "address_formatted": "0xffffffff828d97b6 (0xffffffff828d9770 + 0x46)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0xffffffff828d97b5", "source": { "primary": { "function": "__do_sys_unlink", "file": "fs/namei.c", "line": 5603 }, "inlined_frames": [ { "function": "__se_sys_unlink", "file": "fs/namei.c", "line": 5600 }, { "function": "__x64_sys_unlink", "file": "fs/namei.c", "line": 5600 } ] }, "function_source": { "file": "fs/namei.c", "start_line": 5599, "end_line": 5604, "code": "\nSYSCALL_DEFINE1(unlink, const char __user *, pathname)\n{\n\tCLASS(filename, name)(pathname);\n\treturn filename_unlinkat(AT_FDCWD, name);\n}\n" }, "git_blame_hashes": [ "3480b25743cb7404928d57efeaa3d085708b04c2", "5590ff0d5528b60153c0b4e7b771472b5a95e297", "e50aae1d39ac37a95f453a699456b73dd07e3913" ], "recent_commits": [ { "hash": "e50aae1d39ac3", "subject": "non-consuming variants of do_{unlinkat,rmdir}()" }, { "hash": "da2f1362c8bdf", "subject": "fs: expose do_unlinkat for built-in callers" }, { "hash": "3480b25743cb7", "subject": "[CVE-2009-0029] System call wrappers part 14" }, { "hash": "5590ff0d5528b", "subject": "[PATCH] vfs: *at functions: core" } ] }, { "index": 8, "function": "do_syscall_64", "module": "vmlinux", "function_type": "normal", "address_computed": "0xffffffff8b97718b", "address_formatted": "0xffffffff8b97718b (0xffffffff8b977080 + 0x10b)", "addr2line_correction": "-1 (return address)", "addr2line_address": "0xffffffff8b97718a", "source": { "primary": { "function": "do_syscall_x64", "file": "arch/x86/entry/syscall_64.c", "line": 63 }, "inlined_frames": [ { "function": "do_syscall_64", "file": "arch/x86/entry/syscall_64.c", "line": 94 } ] }, "function_source": { "file": "arch/x86/entry/syscall_64.c", "start_line": 51, "end_line": 67, "code": "#endif\n\nstatic __always_inline bool do_syscall_x64(struct pt_regs *regs, int nr)\n{\n\t/*\n\t * Convert negative numbers to very high and thus out of range\n\t * numbers for comparisons.\n\t */\n\tunsigned int unr = nr;\n\n\tif (likely(unr < NR_syscalls)) {\n\t\tunr = array_index_nospec(unr, NR_syscalls);\n\t\tregs->ax = x64_sys_call(regs, unr);\n\t\treturn true;\n\t}\n\treturn false;\n}\n" }, "git_blame_hashes": [ "01dfb4805420291966b75b208d66c88c62579649", "21832247f2df4f636b0f2ae6939819e8dd2ed35f" ], "recent_commits": [ { "hash": "21832247f2df4", "subject": "x86/syscall/x32: Move x32 syscall table" }, { "hash": "01dfb48054202", "subject": "x86/syscall/64: Move 64-bit syscall dispatch code" } ] } ] }