Merge branch 'master'; commit 'v2.6.38-rc7' into next
This commit is contained in:
13
fs/open.c
13
fs/open.c
@@ -223,7 +223,12 @@ int do_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
|
||||
return -EINVAL;
|
||||
|
||||
/* Return error if mode is not supported */
|
||||
if (mode && !(mode & FALLOC_FL_KEEP_SIZE))
|
||||
if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* Punch hole must have keep size set */
|
||||
if ((mode & FALLOC_FL_PUNCH_HOLE) &&
|
||||
!(mode & FALLOC_FL_KEEP_SIZE))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!(file->f_mode & FMODE_WRITE))
|
||||
@@ -250,10 +255,10 @@ int do_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
|
||||
if (((offset + len) > inode->i_sb->s_maxbytes) || ((offset + len) < 0))
|
||||
return -EFBIG;
|
||||
|
||||
if (!inode->i_op->fallocate)
|
||||
if (!file->f_op->fallocate)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return inode->i_op->fallocate(inode, mode, offset, len);
|
||||
return file->f_op->fallocate(file, mode, offset, len);
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE(fallocate)(int fd, int mode, loff_t offset, loff_t len)
|
||||
@@ -786,6 +791,8 @@ struct file *nameidata_to_filp(struct nameidata *nd)
|
||||
|
||||
/* Pick up the filp from the open intent */
|
||||
filp = nd->intent.open.file;
|
||||
nd->intent.open.file = NULL;
|
||||
|
||||
/* Has the filesystem initialised the file for us? */
|
||||
if (filp->f_path.dentry == NULL) {
|
||||
path_get(&nd->path);
|
||||
|
Reference in New Issue
Block a user