Function report |
Source Code:fs\namei.c |
Create Date:2022-07-28 20:05:13 |
Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
home page | Tree |
Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:Handle the last step of open()
Proto:static int do_last(struct nameidata *nd, struct file *file, const struct open_flags *op)
Type:int
Parameter:
Type | Parameter | Name |
---|---|---|
struct nameidata * | nd | |
struct file * | file | |
const struct open_flags * | op |
3208 | will_truncate = (open_flag & O_TRUNC) != 0 |
3209 | bool got_write = false |
3216 | flags &= ~rnal use only |
3220 | error = handle_dots(nd, last_type) |
3221 | If Value for the false possibility is greater at compile time(error) Then Return error |
3223 | Go to finish_open |
3227 | If name[len] Then flags |= llow links at the end | quire a directory |
3231 | If Value is more likely to compile time(error > 0) Then Go to finish_lookup |
3238 | BUG_ON(flags & RCU pathwalk mode; semi-internal ) |
3239 | Else |
3250 | audit_inode(name, dir, dentry represents the parent ) |
3252 | If Value for the false possibility is greater at compile time(name[len]) Then Return -EISDIR |
3257 | error = mnt_want_write(mnt) |
3266 | If open_flag & O_CREAT Then inode_lock( Where the name belongs to - NULL is * negative ) |
3271 | If open_flag & O_CREAT Then inode_unlock( Where the name belongs to - NULL is * negative ) |
3279 | If f_mode & FMODE_OPENED Then |
3280 | If f_mode & FMODE_CREATED || Not S_ISREG(i_mode) Then will_truncate = false |
3284 | audit_inode(name, dentry, 0) |
3285 | Go to opened |
3288 | If f_mode & FMODE_CREATED Then |
3291 | will_truncate = false |
3292 | acc_mode = 0 |
3293 | path_to_nameidata( & path, nd) |
3294 | Go to finish_open_created |
3302 | If got_write Then |
3303 | mnt_drop_write(mnt) |
3304 | got_write = false |
3308 | If Value for the false possibility is greater at compile time(error < 0) Then Return error |
3314 | audit_inode(name, dentry, 0) |
3317 | path_to_nameidata( & path, nd) |
3318 | Return -EEXIST |
3321 | seq = 0 |
3323 | finish_lookup : |
3325 | If Value for the false possibility is greater at compile time(error) Then Return error |
3327 | finish_open : |
3332 | audit_inode(name, dentry, 0) |
3337 | error = may_create_in_sticky - Check whether an O_CREAT open in a sticky directory* should be allowed, or not, on files that already* exist |
3339 | If Value for the false possibility is greater at compile time(error) Then Go to out |
3343 | If flags & quire a directory && Not d_can_lookup(dentry) Then Go to out |
3345 | If Not d_is_reg(dentry) Then will_truncate = false |
3348 | If will_truncate Then |
3354 | finish_open_created : |
3358 | BUG_ON(f_mode & FMODE_OPENED) |
3359 | error = vfs_open - open the file at the given path*@path: path to open*@file: newly allocated file with f_flag initialized*@cred: credentials to use |
3362 | opened : |
3363 | error = ima_file_check(file, acc_mode) |
3364 | If Not error && will_truncate Then error = handle_truncate(file) |
3366 | out : |
3367 | If Value for the false possibility is greater at compile time(error > 0) Then |
3371 | If got_write Then mnt_drop_write(mnt) |
3373 | Return error |
Name | Describe |
---|---|
path_openat |
Source code conversion tool public plug-in interface | X |
---|---|
Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |