Skip to content
Snippets Groups Projects
Select Git revision
  • f9652e10c12b43d9bb957269745cf2fa5682fa92
  • vme-testing default
  • ci-test
  • master
  • remoteproc
  • am625-sk-ov5640
  • pcal6534-upstreaming
  • lps22df-upstreaming
  • msc-upstreaming
  • imx8mp
  • iio/noa1305
  • vme-next
  • vme-next-4.14-rc4
  • v4.14-rc4
  • v4.14-rc3
  • v4.14-rc2
  • v4.14-rc1
  • v4.13
  • vme-next-4.13-rc7
  • v4.13-rc7
  • v4.13-rc6
  • v4.13-rc5
  • v4.13-rc4
  • v4.13-rc3
  • v4.13-rc2
  • v4.13-rc1
  • v4.12
  • v4.12-rc7
  • v4.12-rc6
  • v4.12-rc5
  • v4.12-rc4
  • v4.12-rc3
32 results

open.c

Blame
  • open.c 24.60 KiB
    /*
     *  linux/fs/open.c
     *
     *  Copyright (C) 1991, 1992  Linus Torvalds
     */
    
    #include <linux/string.h>
    #include <linux/mm.h>
    #include <linux/file.h>
    #include <linux/fdtable.h>
    #include <linux/fsnotify.h>
    #include <linux/module.h>
    #include <linux/tty.h>
    #include <linux/namei.h>
    #include <linux/backing-dev.h>
    #include <linux/capability.h>
    #include <linux/securebits.h>
    #include <linux/security.h>
    #include <linux/mount.h>
    #include <linux/fcntl.h>
    #include <linux/slab.h>
    #include <asm/uaccess.h>
    #include <linux/fs.h>
    #include <linux/personality.h>
    #include <linux/pagemap.h>
    #include <linux/syscalls.h>
    #include <linux/rcupdate.h>
    #include <linux/audit.h>
    #include <linux/falloc.h>
    #include <linux/fs_struct.h>
    #include <linux/ima.h>
    #include <linux/dnotify.h>
    #include <linux/compat.h>
    
    #include "internal.h"
    
    int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
    	struct file *filp)
    {
    	int ret;
    	struct iattr newattrs;
    
    	/* Not pretty: "inode->i_size" shouldn't really be signed. But it is. */
    	if (length < 0)
    		return -EINVAL;
    
    	newattrs.ia_size = length;
    	newattrs.ia_valid = ATTR_SIZE | time_attrs;
    	if (filp) {
    		newattrs.ia_file = filp;
    		newattrs.ia_valid |= ATTR_FILE;
    	}
    
    	/* Remove suid/sgid on truncate too */
    	ret = should_remove_suid(dentry);
    	if (ret)
    		newattrs.ia_valid |= ret | ATTR_FORCE;
    
    	mutex_lock(&dentry->d_inode->i_mutex);
    	ret = notify_change(dentry, &newattrs);
    	mutex_unlock(&dentry->d_inode->i_mutex);
    	return ret;
    }
    
    long vfs_truncate(struct path *path, loff_t length)
    {
    	struct inode *inode;
    	long error;
    
    	inode = path->dentry->d_inode;