VisionFive2 Linux kernel

StarFive Tech Linux Kernel for VisionFive (JH7110) boards (mirror)

More than 9999 Commits   32 Branches   54 Tags
7336d0e654f7a fs/gfs2/file.c     (Thomas Gleixner     2019-05-31 01:09:56 -0700    1) // SPDX-License-Identifier: GPL-2.0-only
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000    2) /*
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000    3)  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
3a8a9a1034813 fs/gfs2/ops_file.c (Steven Whitehouse   2006-05-18 15:09:15 -0400    4)  * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000    5)  */
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000    6) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000    7) #include <linux/slab.h>
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000    8) #include <linux/spinlock.h>
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200    9) #include <linux/compat.h>
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   10) #include <linux/completion.h>
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   11) #include <linux/buffer_head.h>
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   12) #include <linux/pagemap.h>
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   13) #include <linux/uio.h>
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   14) #include <linux/blkdev.h>
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   15) #include <linux/mm.h>
f58ba889106af fs/gfs2/ops_file.c (Miklos Szeredi      2008-07-02 21:12:01 +0200   16) #include <linux/mount.h>
18ec7d5c3f434 fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-08 11:50:51 +0000   17) #include <linux/fs.h>
5c676f6d359b0 fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-27 17:23:27 -0500   18) #include <linux/gfs2_ondisk.h>
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100   19) #include <linux/falloc.h>
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100   20) #include <linux/swap.h>
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500   21) #include <linux/crc32.h>
33c3de32872ef fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-30 10:14:32 -0500   22) #include <linux/writeback.h>
7c0f6ba682b9c fs/gfs2/file.c     (Linus Torvalds      2016-12-24 11:46:01 -0800   23) #include <linux/uaccess.h>
f057f6cdf6417 fs/gfs2/ops_file.c (Steven Whitehouse   2009-01-12 10:43:39 +0000   24) #include <linux/dlm.h>
f057f6cdf6417 fs/gfs2/ops_file.c (Steven Whitehouse   2009-01-12 10:43:39 +0000   25) #include <linux/dlm_plock.h>
2ddfbdd6848d4 fs/gfs2/file.c     (Bob Peterson        2014-08-20 12:44:45 -0400   26) #include <linux/delay.h>
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100   27) #include <linux/backing-dev.h>
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200   28) #include <linux/fileattr.h>
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   29) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   30) #include "gfs2.h"
5c676f6d359b0 fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-27 17:23:27 -0500   31) #include "incore.h"
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   32) #include "bmap.h"
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100   33) #include "aops.h"
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   34) #include "dir.h"
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   35) #include "glock.h"
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   36) #include "glops.h"
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   37) #include "inode.h"
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   38) #include "log.h"
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   39) #include "meta_io.h"
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   40) #include "quota.h"
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   41) #include "rgrp.h"
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   42) #include "trans.h"
5c676f6d359b0 fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-27 17:23:27 -0500   43) #include "util.h"
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   44) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   45) /**
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   46)  * gfs2_llseek - seek to a location in a file
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   47)  * @file: the file
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   48)  * @offset: the offset
965c8e59cfcf8 fs/gfs2/file.c     (Andrew Morton       2012-12-17 15:59:39 -0800   49)  * @whence: Where to seek from (SEEK_SET, SEEK_CUR, or SEEK_END)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   50)  *
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   51)  * SEEK_END requires the glock for the file because it references the
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   52)  * file's size.
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   53)  *
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   54)  * Returns: The new offset, or errno
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   55)  */
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   56) 
965c8e59cfcf8 fs/gfs2/file.c     (Andrew Morton       2012-12-17 15:59:39 -0800   57) static loff_t gfs2_llseek(struct file *file, loff_t offset, int whence)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   58) {
feaa7bba026c1 fs/gfs2/ops_file.c (Steven Whitehouse   2006-06-14 15:32:57 -0400   59) 	struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   60) 	struct gfs2_holder i_gh;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   61) 	loff_t error;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   62) 
965c8e59cfcf8 fs/gfs2/file.c     (Andrew Morton       2012-12-17 15:59:39 -0800   63) 	switch (whence) {
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   64) 	case SEEK_END:
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   65) 		error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY,
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   66) 					   &i_gh);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   67) 		if (!error) {
965c8e59cfcf8 fs/gfs2/file.c     (Andrew Morton       2012-12-17 15:59:39 -0800   68) 			error = generic_file_llseek(file, offset, whence);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   69) 			gfs2_glock_dq_uninit(&i_gh);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   70) 		}
9453615a1a7ef fs/gfs2/file.c     (Steven Whitehouse   2011-08-23 10:19:25 +0100   71) 		break;
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   72) 
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   73) 	case SEEK_DATA:
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   74) 		error = gfs2_seek_data(file, offset);
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   75) 		break;
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   76) 
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   77) 	case SEEK_HOLE:
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   78) 		error = gfs2_seek_hole(file, offset);
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   79) 		break;
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   80) 
9453615a1a7ef fs/gfs2/file.c     (Steven Whitehouse   2011-08-23 10:19:25 +0100   81) 	case SEEK_CUR:
9453615a1a7ef fs/gfs2/file.c     (Steven Whitehouse   2011-08-23 10:19:25 +0100   82) 	case SEEK_SET:
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   83) 		/*
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   84) 		 * These don't reference inode->i_size and don't depend on the
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   85) 		 * block mapping, so we don't need the glock.
3a27411cb4bc3 fs/gfs2/file.c     (Andreas Gruenbacher 2017-03-15 19:12:59 +0100   86) 		 */
965c8e59cfcf8 fs/gfs2/file.c     (Andrew Morton       2012-12-17 15:59:39 -0800   87) 		error = generic_file_llseek(file, offset, whence);
9453615a1a7ef fs/gfs2/file.c     (Steven Whitehouse   2011-08-23 10:19:25 +0100   88) 		break;
9453615a1a7ef fs/gfs2/file.c     (Steven Whitehouse   2011-08-23 10:19:25 +0100   89) 	default:
9453615a1a7ef fs/gfs2/file.c     (Steven Whitehouse   2011-08-23 10:19:25 +0100   90) 		error = -EINVAL;
9453615a1a7ef fs/gfs2/file.c     (Steven Whitehouse   2011-08-23 10:19:25 +0100   91) 	}
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   92) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   93) 	return error;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   94) }
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   95) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   96) /**
d81a8ef59802d fs/gfs2/file.c     (Al Viro             2013-05-16 14:14:48 -0400   97)  * gfs2_readdir - Iterator for a directory
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000   98)  * @file: The directory to read from
d81a8ef59802d fs/gfs2/file.c     (Al Viro             2013-05-16 14:14:48 -0400   99)  * @ctx: What to feed directory entries to
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  100)  *
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  101)  * Returns: errno
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  102)  */
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  103) 
d81a8ef59802d fs/gfs2/file.c     (Al Viro             2013-05-16 14:14:48 -0400  104) static int gfs2_readdir(struct file *file, struct dir_context *ctx)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  105) {
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  106) 	struct inode *dir = file->f_mapping->host;
feaa7bba026c1 fs/gfs2/ops_file.c (Steven Whitehouse   2006-06-14 15:32:57 -0400  107) 	struct gfs2_inode *dip = GFS2_I(dir);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  108) 	struct gfs2_holder d_gh;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  109) 	int error;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  110) 
d81a8ef59802d fs/gfs2/file.c     (Al Viro             2013-05-16 14:14:48 -0400  111) 	error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh);
d81a8ef59802d fs/gfs2/file.c     (Al Viro             2013-05-16 14:14:48 -0400  112) 	if (error)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  113) 		return error;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  114) 
d81a8ef59802d fs/gfs2/file.c     (Al Viro             2013-05-16 14:14:48 -0400  115) 	error = gfs2_dir_read(dir, ctx, &file->f_ra);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  116) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  117) 	gfs2_glock_dq_uninit(&d_gh);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  118) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  119) 	return error;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  120) }
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  121) 
c551f66c5dfef fs/gfs2/file.c     (Lee Jones           2021-03-30 17:44:29 +0100  122) /*
c551f66c5dfef fs/gfs2/file.c     (Lee Jones           2021-03-30 17:44:29 +0100  123)  * struct fsflag_gfs2flag
128e5ebaf8abb fs/gfs2/ops_file.c (Steven Whitehouse   2006-10-02 11:24:43 -0400  124)  *
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  125)  * The FS_JOURNAL_DATA_FL flag maps to GFS2_DIF_INHERIT_JDATA for directories,
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  126)  * and to GFS2_DIF_JDATA for non-directories.
128e5ebaf8abb fs/gfs2/ops_file.c (Steven Whitehouse   2006-10-02 11:24:43 -0400  127)  */
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  128) static struct {
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  129) 	u32 fsflag;
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  130) 	u32 gfsflag;
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  131) } fsflag_gfs2flag[] = {
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  132) 	{FS_SYNC_FL, GFS2_DIF_SYNC},
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  133) 	{FS_IMMUTABLE_FL, GFS2_DIF_IMMUTABLE},
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  134) 	{FS_APPEND_FL, GFS2_DIF_APPENDONLY},
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  135) 	{FS_NOATIME_FL, GFS2_DIF_NOATIME},
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  136) 	{FS_INDEX_FL, GFS2_DIF_EXHASH},
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  137) 	{FS_TOPDIR_FL, GFS2_DIF_TOPDIR},
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  138) 	{FS_JOURNAL_DATA_FL, GFS2_DIF_JDATA | GFS2_DIF_INHERIT_JDATA},
7ea9ea832212c fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-31 15:01:28 -0500  139) };
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  140) 
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  141) static inline u32 gfs2_gfsflags_to_fsflags(struct inode *inode, u32 gfsflags)
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  142) {
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  143) 	int i;
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  144) 	u32 fsflags = 0;
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  145) 
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  146) 	if (S_ISDIR(inode->i_mode))
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  147) 		gfsflags &= ~GFS2_DIF_JDATA;
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  148) 	else
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  149) 		gfsflags &= ~GFS2_DIF_INHERIT_JDATA;
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  150) 
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  151) 	for (i = 0; i < ARRAY_SIZE(fsflag_gfs2flag); i++)
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  152) 		if (gfsflags & fsflag_gfs2flag[i].gfsflag)
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  153) 			fsflags |= fsflag_gfs2flag[i].fsflag;
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  154) 	return fsflags;
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  155) }
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  156) 
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  157) int gfs2_fileattr_get(struct dentry *dentry, struct fileattr *fa)
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  158) {
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  159) 	struct inode *inode = d_inode(dentry);
feaa7bba026c1 fs/gfs2/ops_file.c (Steven Whitehouse   2006-06-14 15:32:57 -0400  160) 	struct gfs2_inode *ip = GFS2_I(inode);
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  161) 	struct gfs2_holder gh;
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  162) 	int error;
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  163) 	u32 fsflags;
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  164) 
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  165) 	if (d_is_special(dentry))
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  166) 		return -ENOTTY;
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  167) 
719ee344675c2 fs/gfs2/ops_file.c (Steven Whitehouse   2008-09-18 13:53:59 +0100  168) 	gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
719ee344675c2 fs/gfs2/ops_file.c (Steven Whitehouse   2008-09-18 13:53:59 +0100  169) 	error = gfs2_glock_nq(&gh);
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  170) 	if (error)
9c7fe83530a35 fs/gfs2/file.c     (Daniel DeFreez      2016-04-19 19:57:45 -0400  171) 		goto out_uninit;
907b9bceb41fa fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-25 09:26:04 -0400  172) 
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  173) 	fsflags = gfs2_gfsflags_to_fsflags(inode, ip->i_diskflags);
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  174) 
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  175) 	fileattr_fill_flags(fa, fsflags);
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  176) 
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  177) 	gfs2_glock_dq(&gh);
9c7fe83530a35 fs/gfs2/file.c     (Daniel DeFreez      2016-04-19 19:57:45 -0400  178) out_uninit:
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  179) 	gfs2_holder_uninit(&gh);
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  180) 	return error;
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  181) }
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  182) 
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  183) void gfs2_set_inode_flags(struct inode *inode)
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  184) {
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  185) 	struct gfs2_inode *ip = GFS2_I(inode);
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  186) 	unsigned int flags = inode->i_flags;
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  187) 
9964afbb79732 fs/gfs2/file.c     (Steven Whitehouse   2011-06-16 14:06:55 +0100  188) 	flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC|S_NOSEC);
9964afbb79732 fs/gfs2/file.c     (Steven Whitehouse   2011-06-16 14:06:55 +0100  189) 	if ((ip->i_eattr == 0) && !is_sxid(inode->i_mode))
01e64ee40ad74 fs/gfs2/file.c     (Benjamin Marzinski  2015-05-05 12:25:48 -0500  190) 		flags |= S_NOSEC;
383f01fbf4a70 fs/gfs2/ops_file.c (Steven Whitehouse   2008-11-04 10:05:22 +0000  191) 	if (ip->i_diskflags & GFS2_DIF_IMMUTABLE)
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  192) 		flags |= S_IMMUTABLE;
383f01fbf4a70 fs/gfs2/ops_file.c (Steven Whitehouse   2008-11-04 10:05:22 +0000  193) 	if (ip->i_diskflags & GFS2_DIF_APPENDONLY)
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  194) 		flags |= S_APPEND;
383f01fbf4a70 fs/gfs2/ops_file.c (Steven Whitehouse   2008-11-04 10:05:22 +0000  195) 	if (ip->i_diskflags & GFS2_DIF_NOATIME)
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  196) 		flags |= S_NOATIME;
383f01fbf4a70 fs/gfs2/ops_file.c (Steven Whitehouse   2008-11-04 10:05:22 +0000  197) 	if (ip->i_diskflags & GFS2_DIF_SYNC)
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  198) 		flags |= S_SYNC;
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  199) 	inode->i_flags = flags;
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  200) }
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  201) 
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  202) /* Flags that can be set by user space */
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  203) #define GFS2_FLAGS_USER_SET (GFS2_DIF_JDATA|			\
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  204) 			     GFS2_DIF_IMMUTABLE|		\
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  205) 			     GFS2_DIF_APPENDONLY|		\
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  206) 			     GFS2_DIF_NOATIME|			\
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  207) 			     GFS2_DIF_SYNC|			\
23d0bb834e264 fs/gfs2/file.c     (Steven Whitehouse   2012-05-28 15:26:56 +0100  208) 			     GFS2_DIF_TOPDIR|			\
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  209) 			     GFS2_DIF_INHERIT_JDATA)
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  210) 
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  211) /**
9dd868e1c009f fs/gfs2/file.c     (Fabian Frederick    2014-05-15 18:57:08 +0200  212)  * do_gfs2_set_flags - set flags on an inode
9dd868e1c009f fs/gfs2/file.c     (Fabian Frederick    2014-05-15 18:57:08 +0200  213)  * @filp: file pointer
9dd868e1c009f fs/gfs2/file.c     (Fabian Frederick    2014-05-15 18:57:08 +0200  214)  * @reqflags: The flags to set
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  215)  * @mask: Indicates which flags are valid
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  216)  * @fsflags: The FS_* inode flags passed in
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  217)  *
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  218)  */
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  219) static int do_gfs2_set_flags(struct inode *inode, u32 reqflags, u32 mask,
5aca284210ce8 fs/gfs2/file.c     (Darrick J. Wong     2019-07-01 08:25:34 -0700  220) 			     const u32 fsflags)
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  221) {
feaa7bba026c1 fs/gfs2/ops_file.c (Steven Whitehouse   2006-06-14 15:32:57 -0400  222) 	struct gfs2_inode *ip = GFS2_I(inode);
feaa7bba026c1 fs/gfs2/ops_file.c (Steven Whitehouse   2006-06-14 15:32:57 -0400  223) 	struct gfs2_sbd *sdp = GFS2_SB(inode);
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  224) 	struct buffer_head *bh;
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  225) 	struct gfs2_holder gh;
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  226) 	int error;
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  227) 	u32 new_flags, flags;
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  228) 
f58ba889106af fs/gfs2/ops_file.c (Miklos Szeredi      2008-07-02 21:12:01 +0200  229) 	error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
f58ba889106af fs/gfs2/ops_file.c (Miklos Szeredi      2008-07-02 21:12:01 +0200  230) 	if (error)
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  231) 		return error;
7df0e0397b9a1 fs/gfs2/file.c     (Steven Whitehouse   2010-05-24 14:36:48 +0100  232) 
7df0e0397b9a1 fs/gfs2/file.c     (Steven Whitehouse   2010-05-24 14:36:48 +0100  233) 	error = 0;
383f01fbf4a70 fs/gfs2/ops_file.c (Steven Whitehouse   2008-11-04 10:05:22 +0000  234) 	flags = ip->i_diskflags;
55eccc6d00cea fs/gfs2/ops_file.c (Steven Whitehouse   2006-04-04 14:29:30 -0400  235) 	new_flags = (flags & ~mask) | (reqflags & mask);
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  236) 	if ((new_flags ^ flags) == 0)
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  237) 		goto out;
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  238) 
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  239) 	error = -EPERM;
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  240) 	if (IS_IMMUTABLE(inode) && (new_flags & GFS2_DIF_IMMUTABLE))
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  241) 		goto out;
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  242) 	if (IS_APPEND(inode) && (new_flags & GFS2_DIF_APPENDONLY))
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  243) 		goto out;
b9cb981310bc2 fs/gfs2/ops_file.c (Steven Whitehouse   2006-05-12 17:07:56 -0400  244) 	if (!IS_IMMUTABLE(inode)) {
549c7297717c3 fs/gfs2/file.c     (Christian Brauner   2021-01-21 14:19:43 +0100  245) 		error = gfs2_permission(&init_user_ns, inode, MAY_WRITE);
b9cb981310bc2 fs/gfs2/ops_file.c (Steven Whitehouse   2006-05-12 17:07:56 -0400  246) 		if (error)
b9cb981310bc2 fs/gfs2/ops_file.c (Steven Whitehouse   2006-05-12 17:07:56 -0400  247) 			goto out;
b9cb981310bc2 fs/gfs2/ops_file.c (Steven Whitehouse   2006-05-12 17:07:56 -0400  248) 	}
5561093e2cac9 fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-17 08:47:38 +0100  249) 	if ((flags ^ new_flags) & GFS2_DIF_JDATA) {
cc555b09d8c38 fs/gfs2/file.c     (Bob Peterson        2017-09-20 08:30:04 -0500  250) 		if (new_flags & GFS2_DIF_JDATA)
c1696fb85d331 fs/gfs2/file.c     (Bob Peterson        2018-01-17 00:01:33 +0100  251) 			gfs2_log_flush(sdp, ip->i_gl,
805c090750a31 fs/gfs2/file.c     (Bob Peterson        2018-01-08 10:34:17 -0500  252) 				       GFS2_LOG_HEAD_FLUSH_NORMAL |
805c090750a31 fs/gfs2/file.c     (Bob Peterson        2018-01-08 10:34:17 -0500  253) 				       GFS2_LFC_SET_FLAGS);
5561093e2cac9 fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-17 08:47:38 +0100  254) 		error = filemap_fdatawrite(inode->i_mapping);
5561093e2cac9 fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-17 08:47:38 +0100  255) 		if (error)
5561093e2cac9 fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-17 08:47:38 +0100  256) 			goto out;
5561093e2cac9 fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-17 08:47:38 +0100  257) 		error = filemap_fdatawait(inode->i_mapping);
5561093e2cac9 fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-17 08:47:38 +0100  258) 		if (error)
5561093e2cac9 fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-17 08:47:38 +0100  259) 			goto out;
cc555b09d8c38 fs/gfs2/file.c     (Bob Peterson        2017-09-20 08:30:04 -0500  260) 		if (new_flags & GFS2_DIF_JDATA)
cc555b09d8c38 fs/gfs2/file.c     (Bob Peterson        2017-09-20 08:30:04 -0500  261) 			gfs2_ordered_del_inode(ip);
5561093e2cac9 fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-17 08:47:38 +0100  262) 	}
55eccc6d00cea fs/gfs2/ops_file.c (Steven Whitehouse   2006-04-04 14:29:30 -0400  263) 	error = gfs2_trans_begin(sdp, RES_DINODE, 0);
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  264) 	if (error)
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  265) 		goto out;
55eccc6d00cea fs/gfs2/ops_file.c (Steven Whitehouse   2006-04-04 14:29:30 -0400  266) 	error = gfs2_meta_inode_buffer(ip, &bh);
55eccc6d00cea fs/gfs2/ops_file.c (Steven Whitehouse   2006-04-04 14:29:30 -0400  267) 	if (error)
55eccc6d00cea fs/gfs2/ops_file.c (Steven Whitehouse   2006-04-04 14:29:30 -0400  268) 		goto out_trans_end;
9b7c2ddb453e0 fs/gfs2/file.c     (Andreas Gruenbacher 2017-09-22 08:29:19 -0500  269) 	inode->i_ctime = current_time(inode);
350a9b0a7269c fs/gfs2/file.c     (Steven Whitehouse   2012-12-14 12:36:02 +0000  270) 	gfs2_trans_add_meta(ip->i_gl, bh);
383f01fbf4a70 fs/gfs2/ops_file.c (Steven Whitehouse   2008-11-04 10:05:22 +0000  271) 	ip->i_diskflags = new_flags;
539e5d6b7ae86 fs/gfs2/ops_file.c (Steven Whitehouse   2006-10-31 15:07:05 -0500  272) 	gfs2_dinode_out(ip, bh->b_data);
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  273) 	brelse(bh);
6b124d8dba1f4 fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-08 12:51:06 -0500  274) 	gfs2_set_inode_flags(inode);
5561093e2cac9 fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-17 08:47:38 +0100  275) 	gfs2_set_aops(inode);
55eccc6d00cea fs/gfs2/ops_file.c (Steven Whitehouse   2006-04-04 14:29:30 -0400  276) out_trans_end:
55eccc6d00cea fs/gfs2/ops_file.c (Steven Whitehouse   2006-04-04 14:29:30 -0400  277) 	gfs2_trans_end(sdp);
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  278) out:
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  279) 	gfs2_glock_dq_uninit(&gh);
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  280) 	return error;
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  281) }
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  282) 
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  283) int gfs2_fileattr_set(struct user_namespace *mnt_userns,
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  284) 		      struct dentry *dentry, struct fileattr *fa)
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  285) {
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  286) 	struct inode *inode = d_inode(dentry);
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  287) 	u32 fsflags = fa->flags, gfsflags = 0;
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  288) 	u32 mask;
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  289) 	int i;
7df0e0397b9a1 fs/gfs2/file.c     (Steven Whitehouse   2010-05-24 14:36:48 +0100  290) 
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  291) 	if (d_is_special(dentry))
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  292) 		return -ENOTTY;
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  293) 
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  294) 	if (fileattr_has_fsx(fa))
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  295) 		return -EOPNOTSUPP;
7df0e0397b9a1 fs/gfs2/file.c     (Steven Whitehouse   2010-05-24 14:36:48 +0100  296) 
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  297) 	for (i = 0; i < ARRAY_SIZE(fsflag_gfs2flag); i++) {
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  298) 		if (fsflags & fsflag_gfs2flag[i].fsflag) {
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  299) 			fsflags &= ~fsflag_gfs2flag[i].fsflag;
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  300) 			gfsflags |= fsflag_gfs2flag[i].gfsflag;
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  301) 		}
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  302) 	}
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  303) 	if (fsflags || gfsflags & ~GFS2_FLAGS_USER_SET)
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  304) 		return -EINVAL;
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  305) 
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  306) 	mask = GFS2_FLAGS_USER_SET;
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  307) 	if (S_ISDIR(inode->i_mode)) {
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  308) 		mask &= ~GFS2_DIF_JDATA;
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  309) 	} else {
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  310) 		/* The GFS2_DIF_TOPDIR flag is only valid for directories. */
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  311) 		if (gfsflags & GFS2_DIF_TOPDIR)
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  312) 			return -EINVAL;
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  313) 		mask &= ~(GFS2_DIF_TOPDIR | GFS2_DIF_INHERIT_JDATA);
b9af7ca6d37d5 fs/gfs2/ops_file.c (Steven Whitehouse   2007-07-18 11:40:06 +0100  314) 	}
b16f7e57b7811 fs/gfs2/file.c     (Andreas Gruenbacher 2017-10-09 16:15:30 +0200  315) 
88b631cbfbeb4 fs/gfs2/file.c     (Miklos Szeredi      2021-04-07 14:36:43 +0200  316) 	return do_gfs2_set_flags(inode, gfsflags, mask, fsflags);
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  317) }
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  318) 
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  319) static int gfs2_getlabel(struct file *filp, char __user *label)
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  320) {
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  321) 	struct inode *inode = file_inode(filp);
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  322) 	struct gfs2_sbd *sdp = GFS2_SB(inode);
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  323) 
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  324) 	if (copy_to_user(label, sdp->sd_sb.sb_locktable, GFS2_LOCKNAME_LEN))
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  325) 		return -EFAULT;
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  326) 
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  327) 	return 0;
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  328) }
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  329) 
b09e593d79956 fs/gfs2/ops_file.c (Steven Whitehouse   2006-04-07 11:17:32 -0400  330) static long gfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  331) {
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  332) 	switch(cmd) {
66fc061bda352 fs/gfs2/file.c     (Steven Whitehouse   2012-02-08 12:58:32 +0000  333) 	case FITRIM:
66fc061bda352 fs/gfs2/file.c     (Steven Whitehouse   2012-02-08 12:58:32 +0000  334) 		return gfs2_fitrim(filp, (void __user *)arg);
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  335) 	case FS_IOC_GETFSLABEL:
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  336) 		return gfs2_getlabel(filp, (char __user *)arg);
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  337) 	}
6ddc5c3ddf256 fs/gfs2/file.c     (Steve Whitehouse    2018-10-08 14:32:35 -0500  338) 
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  339) 	return -ENOTTY;
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  340) }
71b86f562b5eb fs/gfs2/ops_file.c (Steven Whitehouse   2006-03-28 14:14:04 -0500  341) 
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  342) #ifdef CONFIG_COMPAT
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  343) static long gfs2_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  344) {
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  345) 	switch(cmd) {
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  346) 	/* Keep this list in sync with gfs2_ioctl */
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  347) 	case FITRIM:
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  348) 	case FS_IOC_GETFSLABEL:
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  349) 		break;
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  350) 	default:
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  351) 		return -ENOIOCTLCMD;
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  352) 	}
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  353) 
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  354) 	return gfs2_ioctl(filp, cmd, (unsigned long)compat_ptr(arg));
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  355) }
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  356) #else
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  357) #define gfs2_compat_ioctl NULL
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  358) #endif
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200  359) 
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  360) /**
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  361)  * gfs2_size_hint - Give a hint to the size of a write request
9dd868e1c009f fs/gfs2/file.c     (Fabian Frederick    2014-05-15 18:57:08 +0200  362)  * @filep: The struct file
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  363)  * @offset: The file offset of the write
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  364)  * @size: The length of the write
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  365)  *
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  366)  * When we are about to do a write, this function records the total
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  367)  * write size in order to provide a suitable hint to the lower layers
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  368)  * about how many blocks will be required.
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  369)  *
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  370)  */
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  371) 
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  372) static void gfs2_size_hint(struct file *filep, loff_t offset, size_t size)
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  373) {
496ad9aa8ef44 fs/gfs2/file.c     (Al Viro             2013-01-23 17:07:38 -0500  374) 	struct inode *inode = file_inode(filep);
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  375) 	struct gfs2_sbd *sdp = GFS2_SB(inode);
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  376) 	struct gfs2_inode *ip = GFS2_I(inode);
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  377) 	size_t blks = (size + sdp->sd_sb.sb_bsize - 1) >> sdp->sd_sb.sb_bsize_shift;
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  378) 	int hint = min_t(size_t, INT_MAX, blks);
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  379) 
21f09c4395c95 fs/gfs2/file.c     (Andreas Gruenbacher 2018-08-30 16:01:50 +0100  380) 	if (hint > atomic_read(&ip->i_sizehint))
21f09c4395c95 fs/gfs2/file.c     (Andreas Gruenbacher 2018-08-30 16:01:50 +0100  381) 		atomic_set(&ip->i_sizehint, hint);
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  382) }
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  383) 
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  384) /**
35af80aef99b3 fs/gfs2/file.c     (Christoph Hellwig   2019-07-01 23:54:38 +0200  385)  * gfs2_allocate_page_backing - Allocate blocks for a write fault
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  386)  * @page: The (locked) page to allocate backing for
f53056c430632 fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-07 18:06:14 +0000  387)  * @length: Size of the allocation
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  388)  *
35af80aef99b3 fs/gfs2/file.c     (Christoph Hellwig   2019-07-01 23:54:38 +0200  389)  * We try to allocate all the blocks required for the page in one go.  This
35af80aef99b3 fs/gfs2/file.c     (Christoph Hellwig   2019-07-01 23:54:38 +0200  390)  * might fail for various reasons, so we keep trying until all the blocks to
35af80aef99b3 fs/gfs2/file.c     (Christoph Hellwig   2019-07-01 23:54:38 +0200  391)  * back this page are allocated.  If some of the blocks are already allocated,
35af80aef99b3 fs/gfs2/file.c     (Christoph Hellwig   2019-07-01 23:54:38 +0200  392)  * that is ok too.
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  393)  */
f53056c430632 fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-07 18:06:14 +0000  394) static int gfs2_allocate_page_backing(struct page *page, unsigned int length)
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  395) {
35af80aef99b3 fs/gfs2/file.c     (Christoph Hellwig   2019-07-01 23:54:38 +0200  396) 	u64 pos = page_offset(page);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  397) 
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  398) 	do {
35af80aef99b3 fs/gfs2/file.c     (Christoph Hellwig   2019-07-01 23:54:38 +0200  399) 		struct iomap iomap = { };
35af80aef99b3 fs/gfs2/file.c     (Christoph Hellwig   2019-07-01 23:54:38 +0200  400) 
54992257fe4bb fs/gfs2/file.c     (Andreas Gruenbacher 2021-03-27 21:56:40 +0100  401) 		if (gfs2_iomap_alloc(page->mapping->host, pos, length, &iomap))
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  402) 			return -EIO;
35af80aef99b3 fs/gfs2/file.c     (Christoph Hellwig   2019-07-01 23:54:38 +0200  403) 
f53056c430632 fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-07 18:06:14 +0000  404) 		if (length < iomap.length)
f53056c430632 fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-07 18:06:14 +0000  405) 			iomap.length = length;
f53056c430632 fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-07 18:06:14 +0000  406) 		length -= iomap.length;
35af80aef99b3 fs/gfs2/file.c     (Christoph Hellwig   2019-07-01 23:54:38 +0200  407) 		pos += iomap.length;
f53056c430632 fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-07 18:06:14 +0000  408) 	} while (length > 0);
35af80aef99b3 fs/gfs2/file.c     (Christoph Hellwig   2019-07-01 23:54:38 +0200  409) 
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  410) 	return 0;
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  411) }
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  412) 
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  413) /**
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  414)  * gfs2_page_mkwrite - Make a shared, mmap()ed, page writable
9dd868e1c009f fs/gfs2/file.c     (Fabian Frederick    2014-05-15 18:57:08 +0200  415)  * @vmf: The virtual memory fault containing the page to become writable
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  416)  *
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  417)  * When the page becomes writable, we need to ensure that we have
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  418)  * blocks allocated on disk to back that page.
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  419)  */
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  420) 
109dbb1e6f27f fs/gfs2/file.c     (Souptick Joarder    2018-07-02 22:16:13 +0530  421) static vm_fault_t gfs2_page_mkwrite(struct vm_fault *vmf)
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  422) {
c2ec175c39f62 fs/gfs2/ops_file.c (Nicholas Piggin     2009-03-31 15:23:21 -0700  423) 	struct page *page = vmf->page;
11bac80004499 fs/gfs2/file.c     (Dave Jiang          2017-02-24 14:56:41 -0800  424) 	struct inode *inode = file_inode(vmf->vma->vm_file);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  425) 	struct gfs2_inode *ip = GFS2_I(inode);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  426) 	struct gfs2_sbd *sdp = GFS2_SB(inode);
7b9cff467144c fs/gfs2/file.c     (Steven Whitehouse   2013-10-02 11:13:25 +0100  427) 	struct gfs2_alloc_parms ap = { .aflags = 0, };
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  428) 	u64 offset = page_offset(page);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  429) 	unsigned int data_blocks, ind_blocks, rblocks;
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  430) 	struct gfs2_holder gh;
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  431) 	unsigned int length;
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  432) 	loff_t size;
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  433) 	int ret;
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  434) 
39263d5e71d0f fs/gfs2/file.c     (Jan Kara            2012-06-12 16:20:41 +0200  435) 	sb_start_pagefault(inode->i_sb);
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  436) 
719ee344675c2 fs/gfs2/ops_file.c (Steven Whitehouse   2008-09-18 13:53:59 +0100  437) 	gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
719ee344675c2 fs/gfs2/ops_file.c (Steven Whitehouse   2008-09-18 13:53:59 +0100  438) 	ret = gfs2_glock_nq(&gh);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  439) 	if (ret)
2b3dcf35810ff fs/gfs2/file.c     (Bob Peterson        2013-05-28 10:04:44 -0400  440) 		goto out_uninit;
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  441) 
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  442) 	/* Check page index against inode size */
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  443) 	size = i_size_read(inode);
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  444) 	if (offset >= size) {
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  445) 		ret = -EINVAL;
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  446) 		goto out_unlock;
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  447) 	}
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  448) 
d7c436cd605eb fs/gfs2/file.c     (Andreas Gruenbacher 2016-09-26 13:20:19 -0500  449) 	/* Update file times before taking page lock */
11bac80004499 fs/gfs2/file.c     (Dave Jiang          2017-02-24 14:56:41 -0800  450) 	file_update_time(vmf->vma->vm_file);
d7c436cd605eb fs/gfs2/file.c     (Andreas Gruenbacher 2016-09-26 13:20:19 -0500  451) 
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  452) 	/* page is wholly or partially inside EOF */
396a707096cec fs/gfs2/file.c     (Andreas Gruenbacher 2021-06-21 22:28:50 +0200  453) 	if (size - offset < PAGE_SIZE)
396a707096cec fs/gfs2/file.c     (Andreas Gruenbacher 2021-06-21 22:28:50 +0200  454) 		length = size - offset;
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  455) 	else
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  456) 		length = PAGE_SIZE;
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  457) 
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  458) 	gfs2_size_hint(vmf->vma->vm_file, offset, length);
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  459) 
9c538837d8445 fs/gfs2/ops_file.c (Steven Whitehouse   2009-03-19 13:15:44 +0000  460) 	set_bit(GLF_DIRTY, &ip->i_gl->gl_flags);
9c538837d8445 fs/gfs2/ops_file.c (Steven Whitehouse   2009-03-19 13:15:44 +0000  461) 	set_bit(GIF_SW_PAGED, &ip->i_flags);
9c538837d8445 fs/gfs2/ops_file.c (Steven Whitehouse   2009-03-19 13:15:44 +0000  462) 
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  463) 	/*
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  464) 	 * iomap_writepage / iomap_writepages currently don't support inline
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  465) 	 * files, so always unstuff here.
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  466) 	 */
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  467) 
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  468) 	if (!gfs2_is_stuffed(ip) &&
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  469) 	    !gfs2_write_alloc_required(ip, offset, length)) {
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  470) 		lock_page(page);
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  471) 		if (!PageUptodate(page) || page->mapping != inode->i_mapping) {
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  472) 			ret = -EAGAIN;
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  473) 			unlock_page(page);
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  474) 		}
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  475) 		goto out_unlock;
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  476) 	}
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  477) 
5407e24229408 fs/gfs2/file.c     (Bob Peterson        2012-05-18 09:28:23 -0400  478) 	ret = gfs2_rindex_update(sdp);
5407e24229408 fs/gfs2/file.c     (Bob Peterson        2012-05-18 09:28:23 -0400  479) 	if (ret)
6dbd822487d0a fs/gfs2/ops_file.c (Steven Whitehouse   2008-01-10 15:18:55 +0000  480) 		goto out_unlock;
6dbd822487d0a fs/gfs2/ops_file.c (Steven Whitehouse   2008-01-10 15:18:55 +0000  481) 
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  482) 	gfs2_write_calc_reserv(ip, length, &data_blocks, &ind_blocks);
7b9cff467144c fs/gfs2/file.c     (Steven Whitehouse   2013-10-02 11:13:25 +0100  483) 	ap.target = data_blocks + ind_blocks;
b8fbf471edb3d fs/gfs2/file.c     (Abhi Das            2015-03-18 12:03:41 -0500  484) 	ret = gfs2_quota_lock_check(ip, &ap);
b8fbf471edb3d fs/gfs2/file.c     (Abhi Das            2015-03-18 12:03:41 -0500  485) 	if (ret)
b8fbf471edb3d fs/gfs2/file.c     (Abhi Das            2015-03-18 12:03:41 -0500  486) 		goto out_unlock;
7b9cff467144c fs/gfs2/file.c     (Steven Whitehouse   2013-10-02 11:13:25 +0100  487) 	ret = gfs2_inplace_reserve(ip, &ap);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  488) 	if (ret)
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  489) 		goto out_quota_unlock;
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  490) 
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  491) 	rblocks = RES_DINODE + ind_blocks;
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  492) 	if (gfs2_is_jdata(ip))
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  493) 		rblocks += data_blocks ? data_blocks : 1;
bf97b6734e027 fs/gfs2/file.c     (Benjamin Marzinski  2010-09-27 16:00:04 -0500  494) 	if (ind_blocks || data_blocks) {
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  495) 		rblocks += RES_STATFS + RES_QUOTA;
71f890f7f758f fs/gfs2/file.c     (Steven Whitehouse   2012-07-30 14:53:19 +0100  496) 		rblocks += gfs2_rg_blocks(ip, data_blocks + ind_blocks);
bf97b6734e027 fs/gfs2/file.c     (Benjamin Marzinski  2010-09-27 16:00:04 -0500  497) 	}
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  498) 	ret = gfs2_trans_begin(sdp, rblocks, 0);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  499) 	if (ret)
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  500) 		goto out_trans_fail;
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  501) 
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  502) 	lock_page(page);
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  503) 	ret = -EAGAIN;
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  504) 	/* If truncated, we must retry the operation, we may have raced
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  505) 	 * with the glock demotion code.
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  506) 	 */
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  507) 	if (!PageUptodate(page) || page->mapping != inode->i_mapping)
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  508) 		goto out_trans_end;
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  509) 
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  510) 	/* Unstuff, if required, and allocate backing blocks for page */
b7fe2e391ee7b fs/gfs2/ops_file.c (Steven Whitehouse   2008-01-17 15:12:03 +0000  511) 	ret = 0;
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  512) 	if (gfs2_is_stuffed(ip))
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  513) 		ret = gfs2_unstuff_dinode(ip, page);
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  514) 	if (ret == 0)
184b4e60853df fs/gfs2/file.c     (Andreas Gruenbacher 2019-11-06 14:09:25 +0000  515) 		ret = gfs2_allocate_page_backing(page, length);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  516) 
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  517) out_trans_end:
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  518) 	if (ret)
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  519) 		unlock_page(page);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  520) 	gfs2_trans_end(sdp);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  521) out_trans_fail:
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  522) 	gfs2_inplace_release(ip);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  523) out_quota_unlock:
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  524) 	gfs2_quota_unlock(ip);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  525) out_unlock:
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  526) 	gfs2_glock_dq(&gh);
2b3dcf35810ff fs/gfs2/file.c     (Bob Peterson        2013-05-28 10:04:44 -0400  527) out_uninit:
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  528) 	gfs2_holder_uninit(&gh);
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  529) 	if (ret == 0) {
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  530) 		set_page_dirty(page);
1d1d1a767206f fs/gfs2/file.c     (Darrick J. Wong     2013-02-21 16:42:51 -0800  531) 		wait_for_stable_page(page);
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  532) 	}
39263d5e71d0f fs/gfs2/file.c     (Jan Kara            2012-06-12 16:20:41 +0200  533) 	sb_end_pagefault(inode->i_sb);
13d921e37174e fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 15:12:51 +0100  534) 	return block_page_mkwrite_return(ret);
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  535) }
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  536) 
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  537) static vm_fault_t gfs2_fault(struct vm_fault *vmf)
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  538) {
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  539) 	struct inode *inode = file_inode(vmf->vma->vm_file);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  540) 	struct gfs2_inode *ip = GFS2_I(inode);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  541) 	struct gfs2_holder gh;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  542) 	vm_fault_t ret;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  543) 	int err;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  544) 
d5b8145455c62 fs/gfs2/file.c     (Andreas Gruenbacher 2021-06-01 22:53:27 +0200  545) 	gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  546) 	err = gfs2_glock_nq(&gh);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  547) 	if (err) {
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  548) 		ret = block_page_mkwrite_return(err);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  549) 		goto out_uninit;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  550) 	}
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  551) 	ret = filemap_fault(vmf);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  552) 	gfs2_glock_dq(&gh);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  553) out_uninit:
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  554) 	gfs2_holder_uninit(&gh);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  555) 	return ret;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  556) }
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  557) 
f0f37e2f77731 fs/gfs2/file.c     (Alexey Dobriyan     2009-09-27 22:29:37 +0400  558) static const struct vm_operations_struct gfs2_vm_ops = {
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  559) 	.fault = gfs2_fault,
f1820361f83d5 fs/gfs2/file.c     (Kirill A. Shutemov  2014-04-07 15:37:19 -0700  560) 	.map_pages = filemap_map_pages,
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  561) 	.page_mkwrite = gfs2_page_mkwrite,
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  562) };
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  563) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  564) /**
c551f66c5dfef fs/gfs2/file.c     (Lee Jones           2021-03-30 17:44:29 +0100  565)  * gfs2_mmap
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  566)  * @file: The file to map
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  567)  * @vma: The VMA which described the mapping
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  568)  *
48bf2b1711dc4 fs/gfs2/ops_file.c (Steven Whitehouse   2009-04-29 13:59:35 +0100  569)  * There is no need to get a lock here unless we should be updating
48bf2b1711dc4 fs/gfs2/ops_file.c (Steven Whitehouse   2009-04-29 13:59:35 +0100  570)  * atime. We ignore any locking errors since the only consequence is
48bf2b1711dc4 fs/gfs2/ops_file.c (Steven Whitehouse   2009-04-29 13:59:35 +0100  571)  * a missed atime update (which will just be deferred until later).
48bf2b1711dc4 fs/gfs2/ops_file.c (Steven Whitehouse   2009-04-29 13:59:35 +0100  572)  *
48bf2b1711dc4 fs/gfs2/ops_file.c (Steven Whitehouse   2009-04-29 13:59:35 +0100  573)  * Returns: 0
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  574)  */
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  575) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  576) static int gfs2_mmap(struct file *file, struct vm_area_struct *vma)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  577) {
feaa7bba026c1 fs/gfs2/ops_file.c (Steven Whitehouse   2006-06-14 15:32:57 -0400  578) 	struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  579) 
b9c93bb7deadc fs/gfs2/file.c     (Steven Whitehouse   2011-02-02 14:48:10 +0000  580) 	if (!(file->f_flags & O_NOATIME) &&
b9c93bb7deadc fs/gfs2/file.c     (Steven Whitehouse   2011-02-02 14:48:10 +0000  581) 	    !IS_NOATIME(&ip->i_inode)) {
48bf2b1711dc4 fs/gfs2/ops_file.c (Steven Whitehouse   2009-04-29 13:59:35 +0100  582) 		struct gfs2_holder i_gh;
48bf2b1711dc4 fs/gfs2/ops_file.c (Steven Whitehouse   2009-04-29 13:59:35 +0100  583) 		int error;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  584) 
3d1626889a64b fs/gfs2/file.c     (Benjamin Marzinski  2012-11-06 00:49:28 -0600  585) 		error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY,
3d1626889a64b fs/gfs2/file.c     (Benjamin Marzinski  2012-11-06 00:49:28 -0600  586) 					   &i_gh);
b9c93bb7deadc fs/gfs2/file.c     (Steven Whitehouse   2011-02-02 14:48:10 +0000  587) 		if (error)
b9c93bb7deadc fs/gfs2/file.c     (Steven Whitehouse   2011-02-02 14:48:10 +0000  588) 			return error;
3d1626889a64b fs/gfs2/file.c     (Benjamin Marzinski  2012-11-06 00:49:28 -0600  589) 		/* grab lock to update inode */
3d1626889a64b fs/gfs2/file.c     (Benjamin Marzinski  2012-11-06 00:49:28 -0600  590) 		gfs2_glock_dq_uninit(&i_gh);
3d1626889a64b fs/gfs2/file.c     (Benjamin Marzinski  2012-11-06 00:49:28 -0600  591) 		file_accessed(file);
48bf2b1711dc4 fs/gfs2/ops_file.c (Steven Whitehouse   2009-04-29 13:59:35 +0100  592) 	}
3cc3f710ce0ef fs/gfs2/ops_file.c (Steven Whitehouse   2007-10-15 15:40:33 +0100  593) 	vma->vm_ops = &gfs2_vm_ops;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  594) 
48bf2b1711dc4 fs/gfs2/ops_file.c (Steven Whitehouse   2009-04-29 13:59:35 +0100  595) 	return 0;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  596) }
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  597) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  598) /**
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  599)  * gfs2_open_common - This is common to open and atomic_open
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  600)  * @inode: The inode being opened
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  601)  * @file: The file being opened
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  602)  *
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  603)  * This maybe called under a glock or not depending upon how it has
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  604)  * been called. We must always be called under a glock for regular
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  605)  * files, however. For other file types, it does not matter whether
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  606)  * we hold the glock or not.
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  607)  *
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  608)  * Returns: Error code or 0 for success
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  609)  */
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  610) 
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  611) int gfs2_open_common(struct inode *inode, struct file *file)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  612) {
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  613) 	struct gfs2_file *fp;
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  614) 	int ret;
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  615) 
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  616) 	if (S_ISREG(inode->i_mode)) {
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  617) 		ret = generic_file_open(inode, file);
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  618) 		if (ret)
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  619) 			return ret;
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  620) 	}
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  621) 
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  622) 	fp = kzalloc(sizeof(struct gfs2_file), GFP_NOFS);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  623) 	if (!fp)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  624) 		return -ENOMEM;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  625) 
f55ab26a8f92a fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-21 12:51:39 +0000  626) 	mutex_init(&fp->f_fl_mutex);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  627) 
feaa7bba026c1 fs/gfs2/ops_file.c (Steven Whitehouse   2006-06-14 15:32:57 -0400  628) 	gfs2_assert_warn(GFS2_SB(inode), !file->private_data);
5c676f6d359b0 fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-27 17:23:27 -0500  629) 	file->private_data = fp;
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600  630) 	if (file->f_mode & FMODE_WRITE) {
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600  631) 		ret = gfs2_qa_get(GFS2_I(inode));
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600  632) 		if (ret)
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600  633) 			goto fail;
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600  634) 	}
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  635) 	return 0;
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600  636) 
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600  637) fail:
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600  638) 	kfree(file->private_data);
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600  639) 	file->private_data = NULL;
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600  640) 	return ret;
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  641) }
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  642) 
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  643) /**
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  644)  * gfs2_open - open a file
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  645)  * @inode: the inode to open
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  646)  * @file: the struct file for this opening
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  647)  *
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  648)  * After atomic_open, this function is only used for opening files
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  649)  * which are already cached. We must still get the glock for regular
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  650)  * files to ensure that we have the file size uptodate for the large
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  651)  * file check which is in the common code. That is only an issue for
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  652)  * regular files though.
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  653)  *
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  654)  * Returns: errno
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  655)  */
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  656) 
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  657) static int gfs2_open(struct inode *inode, struct file *file)
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  658) {
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  659) 	struct gfs2_inode *ip = GFS2_I(inode);
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  660) 	struct gfs2_holder i_gh;
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  661) 	int error;
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  662) 	bool need_unlock = false;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  663) 
b60623c238b6a fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-01 12:22:46 -0500  664) 	if (S_ISREG(ip->i_inode.i_mode)) {
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  665) 		error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY,
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  666) 					   &i_gh);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  667) 		if (error)
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  668) 			return error;
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  669) 		need_unlock = true;
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  670) 	}
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  671) 
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  672) 	error = gfs2_open_common(inode, file);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  673) 
6d4ade986f9c8 fs/gfs2/file.c     (Steven Whitehouse   2013-06-14 11:17:15 +0100  674) 	if (need_unlock)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  675) 		gfs2_glock_dq_uninit(&i_gh);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  676) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  677) 	return error;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  678) }
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  679) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  680) /**
df3fd117f9802 fs/gfs2/file.c     (Bob Peterson        2012-04-11 12:56:41 -0400  681)  * gfs2_release - called to close a struct file
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  682)  * @inode: the inode the struct file belongs to
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  683)  * @file: the struct file being closed
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  684)  *
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  685)  * Returns: errno
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  686)  */
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  687) 
df3fd117f9802 fs/gfs2/file.c     (Bob Peterson        2012-04-11 12:56:41 -0400  688) static int gfs2_release(struct inode *inode, struct file *file)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  689) {
0a305e496059a fs/gfs2/file.c     (Bob Peterson        2012-06-06 11:17:59 +0100  690) 	struct gfs2_inode *ip = GFS2_I(inode);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  691) 
8e2e00473598d fs/gfs2/file.c     (Bob Peterson        2012-07-19 08:12:40 -0400  692) 	kfree(file->private_data);
5c676f6d359b0 fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-27 17:23:27 -0500  693) 	file->private_data = NULL;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  694) 
0ec9b9ea4f833 fs/gfs2/file.c     (Andreas Gruenbacher 2020-10-21 16:37:54 +0200  695) 	if (gfs2_rs_active(&ip->i_res))
1595548fe72ca fs/gfs2/file.c     (Andreas Gruenbacher 2020-03-06 10:32:35 -0600  696) 		gfs2_rs_delete(ip, &inode->i_writecount);
0ec9b9ea4f833 fs/gfs2/file.c     (Andreas Gruenbacher 2020-10-21 16:37:54 +0200  697) 	if (file->f_mode & FMODE_WRITE)
1595548fe72ca fs/gfs2/file.c     (Andreas Gruenbacher 2020-03-06 10:32:35 -0600  698) 		gfs2_qa_put(ip);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  699) 	return 0;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  700) }
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  701) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  702) /**
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  703)  * gfs2_fsync - sync the dirty data for a file (across the cluster)
02c24a82187d5 fs/gfs2/file.c     (Josef Bacik         2011-07-16 20:44:56 -0400  704)  * @file: the file that points to the dentry
02c24a82187d5 fs/gfs2/file.c     (Josef Bacik         2011-07-16 20:44:56 -0400  705)  * @start: the start position in the file to sync
02c24a82187d5 fs/gfs2/file.c     (Josef Bacik         2011-07-16 20:44:56 -0400  706)  * @end: the end position in the file to sync
dba898b02defa fs/gfs2/file.c     (Steven Whitehouse   2011-04-14 09:54:02 +0100  707)  * @datasync: set if we can ignore timestamp changes
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  708)  *
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  709)  * We split the data flushing here so that we don't wait for the data
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  710)  * until after we've also sent the metadata to disk. Note that for
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  711)  * data=ordered, we will write & wait for the data at the log flush
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  712)  * stage anyway, so this is unlikely to make much of a difference
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  713)  * except in the data=writeback case.
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  714)  *
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  715)  * If the fdatawrite fails due to any reason except -EIO, we will
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  716)  * continue the remainder of the fsync, although we'll still report
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  717)  * the error at the end. This is to match filemap_write_and_wait_range()
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  718)  * behaviour.
34126f9f41901 fs/gfs2/ops_file.c (Steven Whitehouse   2006-12-07 09:13:14 -0500  719)  *
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  720)  * Returns: errno
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  721)  */
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  722) 
02c24a82187d5 fs/gfs2/file.c     (Josef Bacik         2011-07-16 20:44:56 -0400  723) static int gfs2_fsync(struct file *file, loff_t start, loff_t end,
02c24a82187d5 fs/gfs2/file.c     (Josef Bacik         2011-07-16 20:44:56 -0400  724) 		      int datasync)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  725) {
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  726) 	struct address_space *mapping = file->f_mapping;
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  727) 	struct inode *inode = mapping->host;
3aac630b5ce18 fs/gfs2/file.c     (Eric Biggers        2021-01-12 11:02:52 -0800  728) 	int sync_state = inode->i_state & I_DIRTY;
dba898b02defa fs/gfs2/file.c     (Steven Whitehouse   2011-04-14 09:54:02 +0100  729) 	struct gfs2_inode *ip = GFS2_I(inode);
87654896ca619 fs/gfs2/file.c     (Steven Whitehouse   2011-11-08 14:04:20 +0000  730) 	int ret = 0, ret1 = 0;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  731) 
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  732) 	if (mapping->nrpages) {
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  733) 		ret1 = filemap_fdatawrite_range(mapping, start, end);
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  734) 		if (ret1 == -EIO)
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  735) 			return ret1;
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  736) 	}
02c24a82187d5 fs/gfs2/file.c     (Josef Bacik         2011-07-16 20:44:56 -0400  737) 
0c9018097fe29 fs/gfs2/file.c     (Benjamin Marzinski  2013-09-03 16:59:42 -0500  738) 	if (!gfs2_is_jdata(ip))
0c9018097fe29 fs/gfs2/file.c     (Benjamin Marzinski  2013-09-03 16:59:42 -0500  739) 		sync_state &= ~I_DIRTY_PAGES;
dba898b02defa fs/gfs2/file.c     (Steven Whitehouse   2011-04-14 09:54:02 +0100  740) 	if (datasync)
3aac630b5ce18 fs/gfs2/file.c     (Eric Biggers        2021-01-12 11:02:52 -0800  741) 		sync_state &= ~I_DIRTY_SYNC;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  742) 
dba898b02defa fs/gfs2/file.c     (Steven Whitehouse   2011-04-14 09:54:02 +0100  743) 	if (sync_state) {
dba898b02defa fs/gfs2/file.c     (Steven Whitehouse   2011-04-14 09:54:02 +0100  744) 		ret = sync_inode_metadata(inode, 1);
b5b24d7aeb960 fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 10:33:25 +0100  745) 		if (ret)
dba898b02defa fs/gfs2/file.c     (Steven Whitehouse   2011-04-14 09:54:02 +0100  746) 			return ret;
f18185291d605 fs/gfs2/file.c     (Steven Whitehouse   2011-08-05 10:12:47 +0100  747) 		if (gfs2_is_jdata(ip))
d07a6ac7b6f87 fs/gfs2/file.c     (Jeff Layton         2017-07-07 15:20:53 -0400  748) 			ret = file_write_and_wait(file);
d07a6ac7b6f87 fs/gfs2/file.c     (Jeff Layton         2017-07-07 15:20:53 -0400  749) 		if (ret)
d07a6ac7b6f87 fs/gfs2/file.c     (Jeff Layton         2017-07-07 15:20:53 -0400  750) 			return ret;
b5b24d7aeb960 fs/gfs2/file.c     (Steven Whitehouse   2011-09-07 10:33:25 +0100  751) 		gfs2_ail_flush(ip->i_gl, 1);
33c3de32872ef fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-30 10:14:32 -0500  752) 	}
33c3de32872ef fs/gfs2/ops_file.c (Steven Whitehouse   2006-11-30 10:14:32 -0500  753) 
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  754) 	if (mapping->nrpages)
d07a6ac7b6f87 fs/gfs2/file.c     (Jeff Layton         2017-07-07 15:20:53 -0400  755) 		ret = file_fdatawait_range(file, start, end);
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  756) 
2f0264d592e34 fs/gfs2/file.c     (Steven Whitehouse   2011-07-27 10:58:48 +0100  757) 	return ret ? ret : ret1;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  758) }
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000  759) 
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  760) static ssize_t gfs2_file_direct_read(struct kiocb *iocb, struct iov_iter *to,
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  761) 				     struct gfs2_holder *gh)
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  762) {
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  763) 	struct file *file = iocb->ki_filp;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  764) 	struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  765) 	size_t count = iov_iter_count(to);
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  766) 	ssize_t ret;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  767) 
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  768) 	if (!count)
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  769) 		return 0; /* skip atime */
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  770) 
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  771) 	gfs2_holder_init(ip->i_gl, LM_ST_DEFERRED, 0, gh);
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  772) 	ret = gfs2_glock_nq(gh);
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  773) 	if (ret)
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  774) 		goto out_uninit;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  775) 
2f63296578cad fs/gfs2/file.c     (Christoph Hellwig   2021-01-23 10:06:09 -0800  776) 	ret = iomap_dio_rw(iocb, to, &gfs2_iomap_ops, NULL, 0);
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  777) 	gfs2_glock_dq(gh);
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  778) out_uninit:
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  779) 	gfs2_holder_uninit(gh);
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  780) 	return ret;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  781) }
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  782) 
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  783) static ssize_t gfs2_file_direct_write(struct kiocb *iocb, struct iov_iter *from,
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  784) 				      struct gfs2_holder *gh)
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  785) {
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  786) 	struct file *file = iocb->ki_filp;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  787) 	struct inode *inode = file->f_mapping->host;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  788) 	struct gfs2_inode *ip = GFS2_I(inode);
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  789) 	size_t len = iov_iter_count(from);
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  790) 	loff_t offset = iocb->ki_pos;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  791) 	ssize_t ret;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  792) 
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  793) 	/*
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  794) 	 * Deferred lock, even if its a write, since we do no allocation on
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  795) 	 * this path. All we need to change is the atime, and this lock mode
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  796) 	 * ensures that other nodes have flushed their buffered read caches
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  797) 	 * (i.e. their page cache entries for this inode). We do not,
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  798) 	 * unfortunately, have the option of only flushing a range like the
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  799) 	 * VFS does.
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  800) 	 */
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  801) 	gfs2_holder_init(ip->i_gl, LM_ST_DEFERRED, 0, gh);
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  802) 	ret = gfs2_glock_nq(gh);
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  803) 	if (ret)
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  804) 		goto out_uninit;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  805) 
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  806) 	/* Silently fall back to buffered I/O when writing beyond EOF */
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  807) 	if (offset + len > i_size_read(&ip->i_inode))
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  808) 		goto out;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  809) 
2f63296578cad fs/gfs2/file.c     (Christoph Hellwig   2021-01-23 10:06:09 -0800  810) 	ret = iomap_dio_rw(iocb, from, &gfs2_iomap_ops, NULL, 0);
60263d5889e6d fs/gfs2/file.c     (Christoph Hellwig   2020-07-23 22:45:59 -0700  811) 	if (ret == -ENOTBLK)
60263d5889e6d fs/gfs2/file.c     (Christoph Hellwig   2020-07-23 22:45:59 -0700  812) 		ret = 0;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  813) out:
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  814) 	gfs2_glock_dq(gh);
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  815) out_uninit:
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  816) 	gfs2_holder_uninit(gh);
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  817) 	return ret;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  818) }
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  819) 
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  820) static ssize_t gfs2_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  821) {
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  822) 	struct gfs2_inode *ip;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  823) 	struct gfs2_holder gh;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  824) 	size_t written = 0;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  825) 	ssize_t ret;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  826) 
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  827) 	if (iocb->ki_flags & IOCB_DIRECT) {
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  828) 		ret = gfs2_file_direct_read(iocb, to, &gh);
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  829) 		if (likely(ret != -ENOTBLK))
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  830) 			return ret;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  831) 		iocb->ki_flags &= ~IOCB_DIRECT;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  832) 	}
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  833) 	iocb->ki_flags |= IOCB_NOIO;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  834) 	ret = generic_file_read_iter(iocb, to);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  835) 	iocb->ki_flags &= ~IOCB_NOIO;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  836) 	if (ret >= 0) {
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  837) 		if (!iov_iter_count(to))
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  838) 			return ret;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  839) 		written = ret;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  840) 	} else {
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  841) 		if (ret != -EAGAIN)
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  842) 			return ret;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  843) 		if (iocb->ki_flags & IOCB_NOWAIT)
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  844) 			return ret;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  845) 	}
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  846) 	ip = GFS2_I(iocb->ki_filp->f_mapping->host);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  847) 	gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  848) 	ret = gfs2_glock_nq(&gh);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  849) 	if (ret)
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  850) 		goto out_uninit;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  851) 	ret = generic_file_read_iter(iocb, to);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  852) 	if (ret > 0)
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  853) 		written += ret;
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  854) 	gfs2_glock_dq(&gh);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  855) out_uninit:
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  856) 	gfs2_holder_uninit(&gh);
20f829999c38b fs/gfs2/file.c     (Andreas Gruenbacher 2020-07-01 19:25:19 +0200  857) 	return written ? written : ret;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  858) }
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  859) 
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  860) /**
da56e45b6ee83 fs/gfs2/file.c     (Al Viro             2014-04-03 14:11:01 -0400  861)  * gfs2_file_write_iter - Perform a write to a file
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  862)  * @iocb: The io context
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  863)  * @from: The data to write
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  864)  *
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  865)  * We have to do a lock/unlock here to refresh the inode size for
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  866)  * O_APPEND writes, otherwise we can land up writing at the wrong
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  867)  * offset. There is still a race, but provided the app is using its
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  868)  * own file locking, this will make O_APPEND work as expected.
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  869)  *
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  870)  */
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  871) 
da56e45b6ee83 fs/gfs2/file.c     (Al Viro             2014-04-03 14:11:01 -0400  872) static ssize_t gfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  873) {
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  874) 	struct file *file = iocb->ki_filp;
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  875) 	struct inode *inode = file_inode(file);
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  876) 	struct gfs2_inode *ip = GFS2_I(inode);
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  877) 	struct gfs2_holder gh;
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  878) 	ssize_t ret;
0a305e496059a fs/gfs2/file.c     (Bob Peterson        2012-06-06 11:17:59 +0100  879) 
da56e45b6ee83 fs/gfs2/file.c     (Al Viro             2014-04-03 14:11:01 -0400  880) 	gfs2_size_hint(file, iocb->ki_pos, iov_iter_count(from));
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100  881) 
2ba48ce513c4e fs/gfs2/file.c     (Al Viro             2015-04-09 13:52:01 -0400  882) 	if (iocb->ki_flags & IOCB_APPEND) {
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  883) 		ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  884) 		if (ret)
4bd684bc0143b fs/gfs2/file.c     (Andreas Gruenbacher 2020-03-06 10:51:41 -0600  885) 			return ret;
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  886) 		gfs2_glock_dq_uninit(&gh);
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  887) 	}
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  888) 
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  889) 	inode_lock(inode);
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  890) 	ret = generic_write_checks(iocb, from);
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  891) 	if (ret <= 0)
4c0e8dda608a5 fs/gfs2/file.c     (Christoph Hellwig   2020-01-15 16:38:29 +0100  892) 		goto out_unlock;
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  893) 
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  894) 	ret = file_remove_privs(file);
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  895) 	if (ret)
4c0e8dda608a5 fs/gfs2/file.c     (Christoph Hellwig   2020-01-15 16:38:29 +0100  896) 		goto out_unlock;
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  897) 
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  898) 	ret = file_update_time(file);
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  899) 	if (ret)
4c0e8dda608a5 fs/gfs2/file.c     (Christoph Hellwig   2020-01-15 16:38:29 +0100  900) 		goto out_unlock;
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  901) 
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  902) 	if (iocb->ki_flags & IOCB_DIRECT) {
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  903) 		struct address_space *mapping = file->f_mapping;
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  904) 		ssize_t buffered, ret2;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  905) 
4c5c3010408d8 fs/gfs2/file.c     (Andreas Gruenbacher 2020-06-29 17:47:15 -0500  906) 		ret = gfs2_file_direct_write(iocb, from, &gh);
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  907) 		if (ret < 0 || !iov_iter_count(from))
4c0e8dda608a5 fs/gfs2/file.c     (Christoph Hellwig   2020-01-15 16:38:29 +0100  908) 			goto out_unlock;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  909) 
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  910) 		iocb->ki_flags |= IOCB_DSYNC;
4c0e8dda608a5 fs/gfs2/file.c     (Christoph Hellwig   2020-01-15 16:38:29 +0100  911) 		current->backing_dev_info = inode_to_bdi(inode);
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  912) 		buffered = iomap_file_buffered_write(iocb, from, &gfs2_iomap_ops);
4c0e8dda608a5 fs/gfs2/file.c     (Christoph Hellwig   2020-01-15 16:38:29 +0100  913) 		current->backing_dev_info = NULL;
43a511c44e58e fs/gfs2/file.c     (Andreas Gruenbacher 2021-05-10 12:25:59 +0200  914) 		if (unlikely(buffered <= 0)) {
43a511c44e58e fs/gfs2/file.c     (Andreas Gruenbacher 2021-05-10 12:25:59 +0200  915) 			if (!ret)
43a511c44e58e fs/gfs2/file.c     (Andreas Gruenbacher 2021-05-10 12:25:59 +0200  916) 				ret = buffered;
4c0e8dda608a5 fs/gfs2/file.c     (Christoph Hellwig   2020-01-15 16:38:29 +0100  917) 			goto out_unlock;
43a511c44e58e fs/gfs2/file.c     (Andreas Gruenbacher 2021-05-10 12:25:59 +0200  918) 		}
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  919) 
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  920) 		/*
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  921) 		 * We need to ensure that the page cache pages are written to
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  922) 		 * disk and invalidated to preserve the expected O_DIRECT
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  923) 		 * semantics.  If the writeback or invalidate fails, only report
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  924) 		 * the direct I/O range as we don't know if the buffered pages
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  925) 		 * made it to disk.
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  926) 		 */
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  927) 		iocb->ki_pos += buffered;
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  928) 		ret2 = generic_write_sync(iocb, buffered);
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  929) 		invalidate_mapping_pages(mapping,
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  930) 				(iocb->ki_pos - buffered) >> PAGE_SHIFT,
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  931) 				(iocb->ki_pos - 1) >> PAGE_SHIFT);
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  932) 		if (!ret || ret2 > 0)
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  933) 			ret += ret2;
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  934) 	} else {
4c0e8dda608a5 fs/gfs2/file.c     (Christoph Hellwig   2020-01-15 16:38:29 +0100  935) 		current->backing_dev_info = inode_to_bdi(inode);
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  936) 		ret = iomap_file_buffered_write(iocb, from, &gfs2_iomap_ops);
4c0e8dda608a5 fs/gfs2/file.c     (Christoph Hellwig   2020-01-15 16:38:29 +0100  937) 		current->backing_dev_info = NULL;
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  938) 		if (likely(ret > 0)) {
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  939) 			iocb->ki_pos += ret;
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  940) 			ret = generic_write_sync(iocb, ret);
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  941) 		}
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100  942) 	}
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  943) 
4c0e8dda608a5 fs/gfs2/file.c     (Christoph Hellwig   2020-01-15 16:38:29 +0100  944) out_unlock:
64bc06bb32ee9 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 15:04:04 +0100  945) 	inode_unlock(inode);
6e5e41e2dc4e4 fs/gfs2/file.c     (Andreas Gruenbacher 2020-01-14 17:12:18 +0100  946) 	return ret;
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  947) }
56aa616a03fec fs/gfs2/file.c     (Steven Whitehouse   2009-12-08 10:25:33 +0000  948) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  949) static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len,
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  950) 			   int mode)
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  951) {
fffb64127adc3 fs/gfs2/file.c     (Andreas Gruenbacher 2018-03-29 06:50:32 -0700  952) 	struct super_block *sb = inode->i_sb;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  953) 	struct gfs2_inode *ip = GFS2_I(inode);
fffb64127adc3 fs/gfs2/file.c     (Andreas Gruenbacher 2018-03-29 06:50:32 -0700  954) 	loff_t end = offset + len;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  955) 	struct buffer_head *dibh;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  956) 	int error;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  957) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  958) 	error = gfs2_meta_inode_buffer(ip, &dibh);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  959) 	if (unlikely(error))
64dd153c83743 fs/gfs2/file.c     (Benjamin Marzinski  2011-09-12 18:15:24 -0500  960) 		return error;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  961) 
350a9b0a7269c fs/gfs2/file.c     (Steven Whitehouse   2012-12-14 12:36:02 +0000  962) 	gfs2_trans_add_meta(ip->i_gl, dibh);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  963) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  964) 	if (gfs2_is_stuffed(ip)) {
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  965) 		error = gfs2_unstuff_dinode(ip, NULL);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  966) 		if (unlikely(error))
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  967) 			goto out;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  968) 	}
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  969) 
fffb64127adc3 fs/gfs2/file.c     (Andreas Gruenbacher 2018-03-29 06:50:32 -0700  970) 	while (offset < end) {
c25892827c799 fs/gfs2/file.c     (Andreas Gruenbacher 2018-07-06 23:05:41 +0100  971) 		struct iomap iomap = { };
c25892827c799 fs/gfs2/file.c     (Andreas Gruenbacher 2018-07-06 23:05:41 +0100  972) 
54992257fe4bb fs/gfs2/file.c     (Andreas Gruenbacher 2021-03-27 21:56:40 +0100  973) 		error = gfs2_iomap_alloc(inode, offset, end - offset, &iomap);
fffb64127adc3 fs/gfs2/file.c     (Andreas Gruenbacher 2018-03-29 06:50:32 -0700  974) 		if (error)
64dd153c83743 fs/gfs2/file.c     (Benjamin Marzinski  2011-09-12 18:15:24 -0500  975) 			goto out;
fffb64127adc3 fs/gfs2/file.c     (Andreas Gruenbacher 2018-03-29 06:50:32 -0700  976) 		offset = iomap.offset + iomap.length;
d505a96a3b16f fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-24 10:43:49 +0100  977) 		if (!(iomap.flags & IOMAP_F_NEW))
64dd153c83743 fs/gfs2/file.c     (Benjamin Marzinski  2011-09-12 18:15:24 -0500  978) 			continue;
fffb64127adc3 fs/gfs2/file.c     (Andreas Gruenbacher 2018-03-29 06:50:32 -0700  979) 		error = sb_issue_zeroout(sb, iomap.addr >> inode->i_blkbits,
fffb64127adc3 fs/gfs2/file.c     (Andreas Gruenbacher 2018-03-29 06:50:32 -0700  980) 					 iomap.length >> inode->i_blkbits,
fffb64127adc3 fs/gfs2/file.c     (Andreas Gruenbacher 2018-03-29 06:50:32 -0700  981) 					 GFP_NOFS);
fffb64127adc3 fs/gfs2/file.c     (Andreas Gruenbacher 2018-03-29 06:50:32 -0700  982) 		if (error) {
fffb64127adc3 fs/gfs2/file.c     (Andreas Gruenbacher 2018-03-29 06:50:32 -0700  983) 			fs_err(GFS2_SB(inode), "Failed to zero data buffers\n");
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  984) 			goto out;
64dd153c83743 fs/gfs2/file.c     (Benjamin Marzinski  2011-09-12 18:15:24 -0500  985) 		}
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  986) 	}
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  987) out:
64dd153c83743 fs/gfs2/file.c     (Benjamin Marzinski  2011-09-12 18:15:24 -0500  988) 	brelse(dibh);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  989) 	return error;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100  990) }
f3b64b57c044f fs/gfs2/file.c     (Andreas Gruenbacher 2019-08-31 21:29:12 +0100  991) 
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500  992) /**
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500  993)  * calc_max_reserv() - Reverse of write_calc_reserv. Given a number of
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500  994)  *                     blocks, determine how many bytes can be written.
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500  995)  * @ip:          The inode in question.
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500  996)  * @len:         Max cap of bytes. What we return in *len must be <= this.
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500  997)  * @data_blocks: Compute and return the number of data blocks needed
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500  998)  * @ind_blocks:  Compute and return the number of indirect blocks needed
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500  999)  * @max_blocks:  The total blocks available to work with.
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1000)  *
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1001)  * Returns: void, but @len, @data_blocks and @ind_blocks are filled in.
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1002)  */
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1003) static void calc_max_reserv(struct gfs2_inode *ip, loff_t *len,
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1004) 			    unsigned int *data_blocks, unsigned int *ind_blocks,
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1005) 			    unsigned int max_blocks)
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1006) {
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1007) 	loff_t max = *len;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1008) 	const struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1009) 	unsigned int tmp, max_data = max_blocks - 3 * (sdp->sd_max_height - 1);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1010) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1011) 	for (tmp = max_data; tmp > sdp->sd_diptrs;) {
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1012) 		tmp = DIV_ROUND_UP(tmp, sdp->sd_inptrs);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1013) 		max_data -= tmp;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1014) 	}
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1015) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1016) 	*data_blocks = max_data;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1017) 	*ind_blocks = max_blocks - max_data;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1018) 	*len = ((loff_t)max_data - 3) << sdp->sd_sb.sb_bsize_shift;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1019) 	if (*len > max) {
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1020) 		*len = max;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1021) 		gfs2_write_calc_reserv(ip, max, data_blocks, ind_blocks);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1022) 	}
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1023) }
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1024) 
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1025) static long __gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1026) {
496ad9aa8ef44 fs/gfs2/file.c     (Al Viro             2013-01-23 17:07:38 -0500 1027) 	struct inode *inode = file_inode(file);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1028) 	struct gfs2_sbd *sdp = GFS2_SB(inode);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1029) 	struct gfs2_inode *ip = GFS2_I(inode);
7b9cff467144c fs/gfs2/file.c     (Steven Whitehouse   2013-10-02 11:13:25 +0100 1030) 	struct gfs2_alloc_parms ap = { .aflags = 0, };
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1031) 	unsigned int data_blocks = 0, ind_blocks = 0, rblocks;
174d1232ebc84 fs/gfs2/file.c     (Andreas Gruenbacher 2018-02-20 08:03:24 -0700 1032) 	loff_t bytes, max_bytes, max_blks;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1033) 	int error;
4442f2e03ed96 fs/gfs2/file.c     (Steven Whitehouse   2011-11-21 10:01:25 +0000 1034) 	const loff_t pos = offset;
4442f2e03ed96 fs/gfs2/file.c     (Steven Whitehouse   2011-11-21 10:01:25 +0000 1035) 	const loff_t count = len;
6905d9e4dda61 fs/gfs2/file.c     (Benjamin Marzinski  2011-04-26 01:13:24 -0500 1036) 	loff_t bsize_mask = ~((loff_t)sdp->sd_sb.sb_bsize - 1);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1037) 	loff_t next = (offset + len - 1) >> sdp->sd_sb.sb_bsize_shift;
64dd153c83743 fs/gfs2/file.c     (Benjamin Marzinski  2011-09-12 18:15:24 -0500 1038) 	loff_t max_chunk_size = UINT_MAX & bsize_mask;
a0846a534c5fb fs/gfs2/file.c     (Bob Peterson        2014-02-06 10:43:50 -0500 1039) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1040) 	next = (next + 1) << sdp->sd_sb.sb_bsize_shift;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1041) 
6905d9e4dda61 fs/gfs2/file.c     (Benjamin Marzinski  2011-04-26 01:13:24 -0500 1042) 	offset &= bsize_mask;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1043) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1044) 	len = next - offset;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1045) 	bytes = sdp->sd_max_rg_data * sdp->sd_sb.sb_bsize / 2;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1046) 	if (!bytes)
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1047) 		bytes = UINT_MAX;
6905d9e4dda61 fs/gfs2/file.c     (Benjamin Marzinski  2011-04-26 01:13:24 -0500 1048) 	bytes &= bsize_mask;
6905d9e4dda61 fs/gfs2/file.c     (Benjamin Marzinski  2011-04-26 01:13:24 -0500 1049) 	if (bytes == 0)
6905d9e4dda61 fs/gfs2/file.c     (Benjamin Marzinski  2011-04-26 01:13:24 -0500 1050) 		bytes = sdp->sd_sb.sb_bsize;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1051) 
da1dfb6af849c fs/gfs2/file.c     (Steven Whitehouse   2012-07-26 11:30:54 +0100 1052) 	gfs2_size_hint(file, offset, len);
8e2e00473598d fs/gfs2/file.c     (Bob Peterson        2012-07-19 08:12:40 -0400 1053) 
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1054) 	gfs2_write_calc_reserv(ip, PAGE_SIZE, &data_blocks, &ind_blocks);
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1055) 	ap.min_target = data_blocks + ind_blocks;
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1056) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1057) 	while (len > 0) {
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1058) 		if (len < bytes)
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1059) 			bytes = len;
58a7d5fb8e312 fs/gfs2/file.c     (Benjamin Marzinski  2012-03-08 13:16:32 -0600 1060) 		if (!gfs2_write_alloc_required(ip, offset, bytes)) {
58a7d5fb8e312 fs/gfs2/file.c     (Benjamin Marzinski  2012-03-08 13:16:32 -0600 1061) 			len -= bytes;
58a7d5fb8e312 fs/gfs2/file.c     (Benjamin Marzinski  2012-03-08 13:16:32 -0600 1062) 			offset += bytes;
58a7d5fb8e312 fs/gfs2/file.c     (Benjamin Marzinski  2012-03-08 13:16:32 -0600 1063) 			continue;
58a7d5fb8e312 fs/gfs2/file.c     (Benjamin Marzinski  2012-03-08 13:16:32 -0600 1064) 		}
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1065) 
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1066) 		/* We need to determine how many bytes we can actually
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1067) 		 * fallocate without exceeding quota or going over the
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1068) 		 * end of the fs. We start off optimistically by assuming
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1069) 		 * we can write max_bytes */
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1070) 		max_bytes = (len > max_chunk_size) ? max_chunk_size : len;
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1071) 
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1072) 		/* Since max_bytes is most likely a theoretical max, we
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1073) 		 * calculate a more realistic 'bytes' to serve as a good
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1074) 		 * starting point for the number of bytes we may be able
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1075) 		 * to write */
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1076) 		gfs2_write_calc_reserv(ip, bytes, &data_blocks, &ind_blocks);
7b9cff467144c fs/gfs2/file.c     (Steven Whitehouse   2013-10-02 11:13:25 +0100 1077) 		ap.target = data_blocks + ind_blocks;
b8fbf471edb3d fs/gfs2/file.c     (Abhi Das            2015-03-18 12:03:41 -0500 1078) 
b8fbf471edb3d fs/gfs2/file.c     (Abhi Das            2015-03-18 12:03:41 -0500 1079) 		error = gfs2_quota_lock_check(ip, &ap);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1080) 		if (error)
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1081) 			return error;
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1082) 		/* ap.allowed tells us how many blocks quota will allow
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1083) 		 * us to write. Check if this reduces max_blks */
174d1232ebc84 fs/gfs2/file.c     (Andreas Gruenbacher 2018-02-20 08:03:24 -0700 1084) 		max_blks = UINT_MAX;
174d1232ebc84 fs/gfs2/file.c     (Andreas Gruenbacher 2018-02-20 08:03:24 -0700 1085) 		if (ap.allowed)
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1086) 			max_blks = ap.allowed;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1087) 
7b9cff467144c fs/gfs2/file.c     (Steven Whitehouse   2013-10-02 11:13:25 +0100 1088) 		error = gfs2_inplace_reserve(ip, &ap);
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1089) 		if (error)
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1090) 			goto out_qunlock;
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1091) 
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1092) 		/* check if the selected rgrp limits our max_blks further */
725d0e9d464d5 fs/gfs2/file.c     (Andreas Gruenbacher 2018-10-02 14:59:54 +0100 1093) 		if (ip->i_res.rs_reserved < max_blks)
725d0e9d464d5 fs/gfs2/file.c     (Andreas Gruenbacher 2018-10-02 14:59:54 +0100 1094) 			max_blks = ip->i_res.rs_reserved;
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1095) 
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1096) 		/* Almost done. Calculate bytes that can be written using
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1097) 		 * max_blks. We also recompute max_bytes, data_blocks and
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1098) 		 * ind_blocks */
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1099) 		calc_max_reserv(ip, &max_bytes, &data_blocks,
d9be0cda774e7 fs/gfs2/file.c     (Abhi Das            2015-03-18 12:05:15 -0500 1100) 				&ind_blocks, max_blks);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1101) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1102) 		rblocks = RES_DINODE + ind_blocks + RES_STATFS + RES_QUOTA +
71f890f7f758f fs/gfs2/file.c     (Steven Whitehouse   2012-07-30 14:53:19 +0100 1103) 			  RES_RG_HDR + gfs2_rg_blocks(ip, data_blocks + ind_blocks);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1104) 		if (gfs2_is_jdata(ip))
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1105) 			rblocks += data_blocks ? data_blocks : 1;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1106) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1107) 		error = gfs2_trans_begin(sdp, rblocks,
45eb05042d566 fs/gfs2/file.c     (Andreas Gruenbacher 2019-09-02 17:31:06 +0100 1108) 					 PAGE_SIZE >> inode->i_blkbits);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1109) 		if (error)
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1110) 			goto out_trans_fail;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1111) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1112) 		error = fallocate_chunk(inode, offset, max_bytes, mode);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1113) 		gfs2_trans_end(sdp);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1114) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1115) 		if (error)
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1116) 			goto out_trans_fail;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1117) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1118) 		len -= max_bytes;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1119) 		offset += max_bytes;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1120) 		gfs2_inplace_release(ip);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1121) 		gfs2_quota_unlock(ip);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1122) 	}
4442f2e03ed96 fs/gfs2/file.c     (Steven Whitehouse   2011-11-21 10:01:25 +0000 1123) 
0a6a4abc84668 fs/gfs2/file.c     (Andreas Gruenbacher 2019-08-08 19:29:54 +0100 1124) 	if (!(mode & FALLOC_FL_KEEP_SIZE) && (pos + count) > inode->i_size)
1885867b84d58 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:04 +0000 1125) 		i_size_write(inode, pos + count);
0a6a4abc84668 fs/gfs2/file.c     (Andreas Gruenbacher 2019-08-08 19:29:54 +0100 1126) 	file_update_time(file);
0a6a4abc84668 fs/gfs2/file.c     (Andreas Gruenbacher 2019-08-08 19:29:54 +0100 1127) 	mark_inode_dirty(inode);
1885867b84d58 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:04 +0000 1128) 
dde0c2e798482 fs/gfs2/file.c     (Christoph Hellwig   2016-04-07 08:52:00 -0700 1129) 	if ((file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host))
dde0c2e798482 fs/gfs2/file.c     (Christoph Hellwig   2016-04-07 08:52:00 -0700 1130) 		return vfs_fsync_range(file, pos, pos + count - 1,
dde0c2e798482 fs/gfs2/file.c     (Christoph Hellwig   2016-04-07 08:52:00 -0700 1131) 			       (file->f_flags & __O_SYNC) ? 0 : 1);
dde0c2e798482 fs/gfs2/file.c     (Christoph Hellwig   2016-04-07 08:52:00 -0700 1132) 	return 0;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1133) 
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1134) out_trans_fail:
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1135) 	gfs2_inplace_release(ip);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1136) out_qunlock:
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1137) 	gfs2_quota_unlock(ip);
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1138) 	return error;
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1139) }
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1140) 
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1141) static long gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1142) {
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1143) 	struct inode *inode = file_inode(file);
d4d7fc12b642a fs/gfs2/file.c     (Andrew Price        2017-04-05 11:45:26 -0400 1144) 	struct gfs2_sbd *sdp = GFS2_SB(inode);
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1145) 	struct gfs2_inode *ip = GFS2_I(inode);
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1146) 	struct gfs2_holder gh;
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1147) 	int ret;
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1148) 
4e56a6411fbce fs/gfs2/file.c     (Andreas Gruenbacher 2017-12-14 17:11:03 +0100 1149) 	if (mode & ~(FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE))
d4d7fc12b642a fs/gfs2/file.c     (Andrew Price        2017-04-05 11:45:26 -0400 1150) 		return -EOPNOTSUPP;
d4d7fc12b642a fs/gfs2/file.c     (Andrew Price        2017-04-05 11:45:26 -0400 1151) 	/* fallocate is needed by gfs2_grow to reserve space in the rindex */
d4d7fc12b642a fs/gfs2/file.c     (Andrew Price        2017-04-05 11:45:26 -0400 1152) 	if (gfs2_is_jdata(ip) && inode != sdp->sd_rindex)
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1153) 		return -EOPNOTSUPP;
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1154) 
5955102c9984f fs/gfs2/file.c     (Al Viro             2016-01-22 15:40:57 -0500 1155) 	inode_lock(inode);
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1156) 
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1157) 	gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1158) 	ret = gfs2_glock_nq(&gh);
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1159) 	if (ret)
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1160) 		goto out_uninit;
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1161) 
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1162) 	if (!(mode & FALLOC_FL_KEEP_SIZE) &&
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1163) 	    (offset + len) > inode->i_size) {
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1164) 		ret = inode_newsize_ok(inode, offset + len);
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1165) 		if (ret)
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1166) 			goto out_unlock;
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1167) 	}
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1168) 
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1169) 	ret = get_write_access(inode);
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1170) 	if (ret)
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1171) 		goto out_unlock;
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1172) 
4e56a6411fbce fs/gfs2/file.c     (Andreas Gruenbacher 2017-12-14 17:11:03 +0100 1173) 	if (mode & FALLOC_FL_PUNCH_HOLE) {
4e56a6411fbce fs/gfs2/file.c     (Andreas Gruenbacher 2017-12-14 17:11:03 +0100 1174) 		ret = __gfs2_punch_hole(file, offset, len);
4e56a6411fbce fs/gfs2/file.c     (Andreas Gruenbacher 2017-12-14 17:11:03 +0100 1175) 	} else {
4e56a6411fbce fs/gfs2/file.c     (Andreas Gruenbacher 2017-12-14 17:11:03 +0100 1176) 		ret = __gfs2_fallocate(file, mode, offset, len);
4e56a6411fbce fs/gfs2/file.c     (Andreas Gruenbacher 2017-12-14 17:11:03 +0100 1177) 		if (ret)
4e56a6411fbce fs/gfs2/file.c     (Andreas Gruenbacher 2017-12-14 17:11:03 +0100 1178) 			gfs2_rs_deltree(&ip->i_res);
4e56a6411fbce fs/gfs2/file.c     (Andreas Gruenbacher 2017-12-14 17:11:03 +0100 1179) 	}
a097dc7e24cba fs/gfs2/file.c     (Bob Peterson        2015-07-16 08:28:04 -0500 1180) 
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1181) 	put_write_access(inode);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1182) out_unlock:
a0846a534c5fb fs/gfs2/file.c     (Bob Peterson        2014-02-06 10:43:50 -0500 1183) 	gfs2_glock_dq(&gh);
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1184) out_uninit:
a0846a534c5fb fs/gfs2/file.c     (Bob Peterson        2014-02-06 10:43:50 -0500 1185) 	gfs2_holder_uninit(&gh);
5955102c9984f fs/gfs2/file.c     (Al Viro             2016-01-22 15:40:57 -0500 1186) 	inode_unlock(inode);
9c9f1159a54c6 fs/gfs2/file.c     (Andrew Price        2014-11-12 17:24:03 +0000 1187) 	return ret;
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1188) }
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1189) 
f1ea6f4ec0a48 fs/gfs2/file.c     (Bob Peterson        2015-02-24 07:22:28 -0600 1190) static ssize_t gfs2_file_splice_write(struct pipe_inode_info *pipe,
f1ea6f4ec0a48 fs/gfs2/file.c     (Bob Peterson        2015-02-24 07:22:28 -0600 1191) 				      struct file *out, loff_t *ppos,
f1ea6f4ec0a48 fs/gfs2/file.c     (Bob Peterson        2015-02-24 07:22:28 -0600 1192) 				      size_t len, unsigned int flags)
f1ea6f4ec0a48 fs/gfs2/file.c     (Bob Peterson        2015-02-24 07:22:28 -0600 1193) {
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600 1194) 	ssize_t ret;
f1ea6f4ec0a48 fs/gfs2/file.c     (Bob Peterson        2015-02-24 07:22:28 -0600 1195) 
f1ea6f4ec0a48 fs/gfs2/file.c     (Bob Peterson        2015-02-24 07:22:28 -0600 1196) 	gfs2_size_hint(out, *ppos, len);
f1ea6f4ec0a48 fs/gfs2/file.c     (Bob Peterson        2015-02-24 07:22:28 -0600 1197) 
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600 1198) 	ret = iter_file_splice_write(pipe, out, ppos, len, flags);
2fba46a04c383 fs/gfs2/file.c     (Bob Peterson        2020-02-27 12:47:53 -0600 1199) 	return ret;
f1ea6f4ec0a48 fs/gfs2/file.c     (Bob Peterson        2015-02-24 07:22:28 -0600 1200) }
f1ea6f4ec0a48 fs/gfs2/file.c     (Bob Peterson        2015-02-24 07:22:28 -0600 1201) 
f057f6cdf6417 fs/gfs2/ops_file.c (Steven Whitehouse   2009-01-12 10:43:39 +0000 1202) #ifdef CONFIG_GFS2_FS_LOCKING_DLM
f057f6cdf6417 fs/gfs2/ops_file.c (Steven Whitehouse   2009-01-12 10:43:39 +0000 1203) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1204) /**
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1205)  * gfs2_lock - acquire/release a posix lock on a file
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1206)  * @file: the file pointer
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1207)  * @cmd: either modify or retrieve lock state, possibly wait
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1208)  * @fl: type and range of lock
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1209)  *
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1210)  * Returns: errno
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1211)  */
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1212) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1213) static int gfs2_lock(struct file *file, int cmd, struct file_lock *fl)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1214) {
feaa7bba026c1 fs/gfs2/ops_file.c (Steven Whitehouse   2006-06-14 15:32:57 -0400 1215) 	struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);
feaa7bba026c1 fs/gfs2/ops_file.c (Steven Whitehouse   2006-06-14 15:32:57 -0400 1216) 	struct gfs2_sbd *sdp = GFS2_SB(file->f_mapping->host);
f057f6cdf6417 fs/gfs2/ops_file.c (Steven Whitehouse   2009-01-12 10:43:39 +0000 1217) 	struct lm_lockstruct *ls = &sdp->sd_lockstruct;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1218) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1219) 	if (!(fl->fl_flags & FL_POSIX))
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1220) 		return -ENOLCK;
720e7749279bd fs/gfs2/file.c     (Sachin Prabhu       2010-03-11 12:24:45 -0500 1221) 	if (__mandatory_lock(&ip->i_inode) && fl->fl_type != F_UNLCK)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1222) 		return -ENOLCK;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1223) 
586759f03e2e9 fs/gfs2/ops_file.c (Marc Eshel          2006-11-14 16:37:25 -0500 1224) 	if (cmd == F_CANCELLK) {
586759f03e2e9 fs/gfs2/ops_file.c (Marc Eshel          2006-11-14 16:37:25 -0500 1225) 		/* Hack: */
586759f03e2e9 fs/gfs2/ops_file.c (Marc Eshel          2006-11-14 16:37:25 -0500 1226) 		cmd = F_SETLK;
586759f03e2e9 fs/gfs2/ops_file.c (Marc Eshel          2006-11-14 16:37:25 -0500 1227) 		fl->fl_type = F_UNLCK;
586759f03e2e9 fs/gfs2/ops_file.c (Marc Eshel          2006-11-14 16:37:25 -0500 1228) 	}
eb43e660c0940 fs/gfs2/file.c     (Bob Peterson        2019-11-14 09:52:15 -0500 1229) 	if (unlikely(gfs2_withdrawn(sdp))) {
c2952d202f710 fs/gfs2/file.c     (Steven Whitehouse   2013-03-14 15:49:59 +0000 1230) 		if (fl->fl_type == F_UNLCK)
4f6563677ae83 fs/gfs2/file.c     (Benjamin Coddington 2015-10-22 13:38:14 -0400 1231) 			locks_lock_file_wait(file, fl);
f057f6cdf6417 fs/gfs2/ops_file.c (Steven Whitehouse   2009-01-12 10:43:39 +0000 1232) 		return -EIO;
c2952d202f710 fs/gfs2/file.c     (Steven Whitehouse   2013-03-14 15:49:59 +0000 1233) 	}
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1234) 	if (IS_GETLK(cmd))
f057f6cdf6417 fs/gfs2/ops_file.c (Steven Whitehouse   2009-01-12 10:43:39 +0000 1235) 		return dlm_posix_get(ls->ls_dlm, ip->i_no_addr, file, fl);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1236) 	else if (fl->fl_type == F_UNLCK)
f057f6cdf6417 fs/gfs2/ops_file.c (Steven Whitehouse   2009-01-12 10:43:39 +0000 1237) 		return dlm_posix_unlock(ls->ls_dlm, ip->i_no_addr, file, fl);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1238) 	else
f057f6cdf6417 fs/gfs2/ops_file.c (Steven Whitehouse   2009-01-12 10:43:39 +0000 1239) 		return dlm_posix_lock(ls->ls_dlm, ip->i_no_addr, file, cmd, fl);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1240) }
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1241) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1242) static int do_flock(struct file *file, int cmd, struct file_lock *fl)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1243) {
5c676f6d359b0 fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-27 17:23:27 -0500 1244) 	struct gfs2_file *fp = file->private_data;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1245) 	struct gfs2_holder *fl_gh = &fp->f_fl_gh;
496ad9aa8ef44 fs/gfs2/file.c     (Al Viro             2013-01-23 17:07:38 -0500 1246) 	struct gfs2_inode *ip = GFS2_I(file_inode(file));
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1247) 	struct gfs2_glock *gl;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1248) 	unsigned int state;
b58bf407ca466 fs/gfs2/file.c     (Bob Peterson        2015-07-24 09:45:43 -0500 1249) 	u16 flags;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1250) 	int error = 0;
2ddfbdd6848d4 fs/gfs2/file.c     (Bob Peterson        2014-08-20 12:44:45 -0400 1251) 	int sleeptime;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1252) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1253) 	state = (fl->fl_type == F_WRLCK) ? LM_ST_EXCLUSIVE : LM_ST_SHARED;
2ddfbdd6848d4 fs/gfs2/file.c     (Bob Peterson        2014-08-20 12:44:45 -0400 1254) 	flags = (IS_SETLKW(cmd) ? 0 : LM_FLAG_TRY_1CB) | GL_EXACT;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1255) 
f55ab26a8f92a fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-21 12:51:39 +0000 1256) 	mutex_lock(&fp->f_fl_mutex);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1257) 
283c9a97be1d7 fs/gfs2/file.c     (Andreas Gruenbacher 2017-07-17 13:39:15 -0500 1258) 	if (gfs2_holder_initialized(fl_gh)) {
4d62d3f70b9b2 fs/gfs2/file.c     (NeilBrown           2018-11-30 10:04:08 +1100 1259) 		struct file_lock request;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1260) 		if (fl_gh->gh_state == state)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1261) 			goto out;
4d62d3f70b9b2 fs/gfs2/file.c     (NeilBrown           2018-11-30 10:04:08 +1100 1262) 		locks_init_lock(&request);
4d62d3f70b9b2 fs/gfs2/file.c     (NeilBrown           2018-11-30 10:04:08 +1100 1263) 		request.fl_type = F_UNLCK;
4d62d3f70b9b2 fs/gfs2/file.c     (NeilBrown           2018-11-30 10:04:08 +1100 1264) 		request.fl_flags = FL_FLOCK;
4d62d3f70b9b2 fs/gfs2/file.c     (NeilBrown           2018-11-30 10:04:08 +1100 1265) 		locks_lock_file_wait(file, &request);
5bef3e7cf18c5 fs/gfs2/file.c     (Bob Peterson        2014-06-26 10:46:25 -0400 1266) 		gfs2_glock_dq(fl_gh);
b4c20166dcfca fs/gfs2/ops_file.c (Abhijith Das        2007-09-13 23:35:27 -0500 1267) 		gfs2_holder_reinit(state, flags, fl_gh);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1268) 	} else {
6802e3400ff45 fs/gfs2/ops_file.c (Steven Whitehouse   2008-05-21 17:03:22 +0100 1269) 		error = gfs2_glock_get(GFS2_SB(&ip->i_inode), ip->i_no_addr,
6802e3400ff45 fs/gfs2/ops_file.c (Steven Whitehouse   2008-05-21 17:03:22 +0100 1270) 				       &gfs2_flock_glops, CREATE, &gl);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1271) 		if (error)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1272) 			goto out;
b4c20166dcfca fs/gfs2/ops_file.c (Abhijith Das        2007-09-13 23:35:27 -0500 1273) 		gfs2_holder_init(gl, state, flags, fl_gh);
b4c20166dcfca fs/gfs2/ops_file.c (Abhijith Das        2007-09-13 23:35:27 -0500 1274) 		gfs2_glock_put(gl);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1275) 	}
2ddfbdd6848d4 fs/gfs2/file.c     (Bob Peterson        2014-08-20 12:44:45 -0400 1276) 	for (sleeptime = 1; sleeptime <= 4; sleeptime <<= 1) {
2ddfbdd6848d4 fs/gfs2/file.c     (Bob Peterson        2014-08-20 12:44:45 -0400 1277) 		error = gfs2_glock_nq(fl_gh);
2ddfbdd6848d4 fs/gfs2/file.c     (Bob Peterson        2014-08-20 12:44:45 -0400 1278) 		if (error != GLR_TRYFAILED)
2ddfbdd6848d4 fs/gfs2/file.c     (Bob Peterson        2014-08-20 12:44:45 -0400 1279) 			break;
2ddfbdd6848d4 fs/gfs2/file.c     (Bob Peterson        2014-08-20 12:44:45 -0400 1280) 		fl_gh->gh_flags = LM_FLAG_TRY | GL_EXACT;
2ddfbdd6848d4 fs/gfs2/file.c     (Bob Peterson        2014-08-20 12:44:45 -0400 1281) 		fl_gh->gh_error = 0;
2ddfbdd6848d4 fs/gfs2/file.c     (Bob Peterson        2014-08-20 12:44:45 -0400 1282) 		msleep(sleeptime);
2ddfbdd6848d4 fs/gfs2/file.c     (Bob Peterson        2014-08-20 12:44:45 -0400 1283) 	}
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1284) 	if (error) {
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1285) 		gfs2_holder_uninit(fl_gh);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1286) 		if (error == GLR_TRYFAILED)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1287) 			error = -EAGAIN;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1288) 	} else {
4f6563677ae83 fs/gfs2/file.c     (Benjamin Coddington 2015-10-22 13:38:14 -0400 1289) 		error = locks_lock_file_wait(file, fl);
feaa7bba026c1 fs/gfs2/ops_file.c (Steven Whitehouse   2006-06-14 15:32:57 -0400 1290) 		gfs2_assert_warn(GFS2_SB(&ip->i_inode), !error);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1291) 	}
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1292) 
420b9e5e45d33 fs/gfs2/ops_file.c (Steven Whitehouse   2006-07-31 15:42:17 -0400 1293) out:
f55ab26a8f92a fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-21 12:51:39 +0000 1294) 	mutex_unlock(&fp->f_fl_mutex);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1295) 	return error;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1296) }
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1297) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1298) static void do_unflock(struct file *file, struct file_lock *fl)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1299) {
5c676f6d359b0 fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-27 17:23:27 -0500 1300) 	struct gfs2_file *fp = file->private_data;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1301) 	struct gfs2_holder *fl_gh = &fp->f_fl_gh;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1302) 
f55ab26a8f92a fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-21 12:51:39 +0000 1303) 	mutex_lock(&fp->f_fl_mutex);
4f6563677ae83 fs/gfs2/file.c     (Benjamin Coddington 2015-10-22 13:38:14 -0400 1304) 	locks_lock_file_wait(file, fl);
6df9f9a253c7d fs/gfs2/file.c     (Andreas Gruenbacher 2016-06-17 07:31:27 -0500 1305) 	if (gfs2_holder_initialized(fl_gh)) {
2ddfbdd6848d4 fs/gfs2/file.c     (Bob Peterson        2014-08-20 12:44:45 -0400 1306) 		gfs2_glock_dq(fl_gh);
0a33443b38746 fs/gfs2/file.c     (Steven Whitehouse   2011-03-09 11:14:32 +0000 1307) 		gfs2_holder_uninit(fl_gh);
0a33443b38746 fs/gfs2/file.c     (Steven Whitehouse   2011-03-09 11:14:32 +0000 1308) 	}
f55ab26a8f92a fs/gfs2/ops_file.c (Steven Whitehouse   2006-02-21 12:51:39 +0000 1309) 	mutex_unlock(&fp->f_fl_mutex);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1310) }
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1311) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1312) /**
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1313)  * gfs2_flock - acquire/release a flock lock on a file
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1314)  * @file: the file pointer
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1315)  * @cmd: either modify or retrieve lock state, possibly wait
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1316)  * @fl: type and range of lock
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1317)  *
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1318)  * Returns: errno
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1319)  */
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1320) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1321) static int gfs2_flock(struct file *file, int cmd, struct file_lock *fl)
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1322) {
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1323) 	if (!(fl->fl_flags & FL_FLOCK))
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1324) 		return -ENOLCK;
a12af1ebe675e fs/gfs2/file.c     (Abhijith Das        2009-06-01 12:30:03 -0500 1325) 	if (fl->fl_type & LOCK_MAND)
a12af1ebe675e fs/gfs2/file.c     (Abhijith Das        2009-06-01 12:30:03 -0500 1326) 		return -EOPNOTSUPP;
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1327) 
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1328) 	if (fl->fl_type == F_UNLCK) {
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1329) 		do_unflock(file, fl);
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1330) 		return 0;
d00223f169317 fs/gfs2/ops_file.c (Steven Whitehouse   2006-10-02 10:28:05 -0400 1331) 	} else {
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1332) 		return do_flock(file, cmd, fl);
d00223f169317 fs/gfs2/ops_file.c (Steven Whitehouse   2006-10-02 10:28:05 -0400 1333) 	}
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1334) }
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1335) 
10d2198805d7f fs/gfs2/ops_file.c (Christoph Hellwig   2009-04-07 19:42:17 +0200 1336) const struct file_operations gfs2_file_fops = {
26c1a57412b59 fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-04 15:32:10 -0400 1337) 	.llseek		= gfs2_llseek,
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100 1338) 	.read_iter	= gfs2_file_read_iter,
da56e45b6ee83 fs/gfs2/file.c     (Al Viro             2014-04-03 14:11:01 -0400 1339) 	.write_iter	= gfs2_file_write_iter,
81214bab582ee fs/gfs2/file.c     (Christoph Hellwig   2018-12-04 11:12:08 -0700 1340) 	.iopoll		= iomap_dio_iopoll,
26c1a57412b59 fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-04 15:32:10 -0400 1341) 	.unlocked_ioctl	= gfs2_ioctl,
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200 1342) 	.compat_ioctl	= gfs2_compat_ioctl,
26c1a57412b59 fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-04 15:32:10 -0400 1343) 	.mmap		= gfs2_mmap,
26c1a57412b59 fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-04 15:32:10 -0400 1344) 	.open		= gfs2_open,
df3fd117f9802 fs/gfs2/file.c     (Bob Peterson        2012-04-11 12:56:41 -0400 1345) 	.release	= gfs2_release,
26c1a57412b59 fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-04 15:32:10 -0400 1346) 	.fsync		= gfs2_fsync,
26c1a57412b59 fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-04 15:32:10 -0400 1347) 	.lock		= gfs2_lock,
26c1a57412b59 fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-04 15:32:10 -0400 1348) 	.flock		= gfs2_flock,
82c156f853840 fs/gfs2/file.c     (Al Viro             2016-09-22 23:35:42 -0400 1349) 	.splice_read	= generic_file_splice_read,
f42a69fadc4b9 fs/gfs2/file.c     (Bob Peterson        2015-02-19 08:02:16 -0600 1350) 	.splice_write	= gfs2_file_splice_write,
1c994a0909a55 fs/gfs2/file.c     (Jeff Layton         2014-08-27 06:49:41 -0400 1351) 	.setlease	= simple_nosetlease,
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1352) 	.fallocate	= gfs2_fallocate,
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1353) };
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1354) 
10d2198805d7f fs/gfs2/ops_file.c (Christoph Hellwig   2009-04-07 19:42:17 +0200 1355) const struct file_operations gfs2_dir_fops = {
1d1bb236bc2ff fs/gfs2/file.c     (Al Viro             2016-05-12 17:00:20 -0400 1356) 	.iterate_shared	= gfs2_readdir,
26c1a57412b59 fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-04 15:32:10 -0400 1357) 	.unlocked_ioctl	= gfs2_ioctl,
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200 1358) 	.compat_ioctl	= gfs2_compat_ioctl,
26c1a57412b59 fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-04 15:32:10 -0400 1359) 	.open		= gfs2_open,
df3fd117f9802 fs/gfs2/file.c     (Bob Peterson        2012-04-11 12:56:41 -0400 1360) 	.release	= gfs2_release,
26c1a57412b59 fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-04 15:32:10 -0400 1361) 	.fsync		= gfs2_fsync,
26c1a57412b59 fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-04 15:32:10 -0400 1362) 	.lock		= gfs2_lock,
26c1a57412b59 fs/gfs2/ops_file.c (Steven Whitehouse   2006-09-04 15:32:10 -0400 1363) 	.flock		= gfs2_flock,
6038f373a3dc1 fs/gfs2/file.c     (Arnd Bergmann       2010-08-15 18:52:59 +0200 1364) 	.llseek		= default_llseek,
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1365) };
b3b94faa5fe59 fs/gfs2/ops_file.c (David Teigland      2006-01-16 16:50:04 +0000 1366) 
f057f6cdf6417 fs/gfs2/ops_file.c (Steven Whitehouse   2009-01-12 10:43:39 +0000 1367) #endif /* CONFIG_GFS2_FS_LOCKING_DLM */
f057f6cdf6417 fs/gfs2/ops_file.c (Steven Whitehouse   2009-01-12 10:43:39 +0000 1368) 
10d2198805d7f fs/gfs2/ops_file.c (Christoph Hellwig   2009-04-07 19:42:17 +0200 1369) const struct file_operations gfs2_file_fops_nolock = {
c97bfe4351771 fs/gfs2/ops_file.c (Wendy Cheng         2007-11-29 17:56:51 -0500 1370) 	.llseek		= gfs2_llseek,
967bcc91b0449 fs/gfs2/file.c     (Andreas Gruenbacher 2018-06-19 15:08:02 +0100 1371) 	.read_iter	= gfs2_file_read_iter,
da56e45b6ee83 fs/gfs2/file.c     (Al Viro             2014-04-03 14:11:01 -0400 1372) 	.write_iter	= gfs2_file_write_iter,
81214bab582ee fs/gfs2/file.c     (Christoph Hellwig   2018-12-04 11:12:08 -0700 1373) 	.iopoll		= iomap_dio_iopoll,
c97bfe4351771 fs/gfs2/ops_file.c (Wendy Cheng         2007-11-29 17:56:51 -0500 1374) 	.unlocked_ioctl	= gfs2_ioctl,
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200 1375) 	.compat_ioctl	= gfs2_compat_ioctl,
c97bfe4351771 fs/gfs2/ops_file.c (Wendy Cheng         2007-11-29 17:56:51 -0500 1376) 	.mmap		= gfs2_mmap,
c97bfe4351771 fs/gfs2/ops_file.c (Wendy Cheng         2007-11-29 17:56:51 -0500 1377) 	.open		= gfs2_open,
df3fd117f9802 fs/gfs2/file.c     (Bob Peterson        2012-04-11 12:56:41 -0400 1378) 	.release	= gfs2_release,
c97bfe4351771 fs/gfs2/ops_file.c (Wendy Cheng         2007-11-29 17:56:51 -0500 1379) 	.fsync		= gfs2_fsync,
82c156f853840 fs/gfs2/file.c     (Al Viro             2016-09-22 23:35:42 -0400 1380) 	.splice_read	= generic_file_splice_read,
f42a69fadc4b9 fs/gfs2/file.c     (Bob Peterson        2015-02-19 08:02:16 -0600 1381) 	.splice_write	= gfs2_file_splice_write,
f057f6cdf6417 fs/gfs2/ops_file.c (Steven Whitehouse   2009-01-12 10:43:39 +0000 1382) 	.setlease	= generic_setlease,
2fe17c1075836 fs/gfs2/file.c     (Christoph Hellwig   2011-01-14 13:07:43 +0100 1383) 	.fallocate	= gfs2_fallocate,
c97bfe4351771 fs/gfs2/ops_file.c (Wendy Cheng         2007-11-29 17:56:51 -0500 1384) };
c97bfe4351771 fs/gfs2/ops_file.c (Wendy Cheng         2007-11-29 17:56:51 -0500 1385) 
10d2198805d7f fs/gfs2/ops_file.c (Christoph Hellwig   2009-04-07 19:42:17 +0200 1386) const struct file_operations gfs2_dir_fops_nolock = {
1d1bb236bc2ff fs/gfs2/file.c     (Al Viro             2016-05-12 17:00:20 -0400 1387) 	.iterate_shared	= gfs2_readdir,
c97bfe4351771 fs/gfs2/ops_file.c (Wendy Cheng         2007-11-29 17:56:51 -0500 1388) 	.unlocked_ioctl	= gfs2_ioctl,
8d0980704842e fs/gfs2/file.c     (Arnd Bergmann       2019-06-03 13:40:01 +0200 1389) 	.compat_ioctl	= gfs2_compat_ioctl,
c97bfe4351771 fs/gfs2/ops_file.c (Wendy Cheng         2007-11-29 17:56:51 -0500 1390) 	.open		= gfs2_open,
df3fd117f9802 fs/gfs2/file.c     (Bob Peterson        2012-04-11 12:56:41 -0400 1391) 	.release	= gfs2_release,
c97bfe4351771 fs/gfs2/ops_file.c (Wendy Cheng         2007-11-29 17:56:51 -0500 1392) 	.fsync		= gfs2_fsync,
6038f373a3dc1 fs/gfs2/file.c     (Arnd Bergmann       2010-08-15 18:52:59 +0200 1393) 	.llseek		= default_llseek,
c97bfe4351771 fs/gfs2/ops_file.c (Wendy Cheng         2007-11-29 17:56:51 -0500 1394) };
c97bfe4351771 fs/gfs2/ops_file.c (Wendy Cheng         2007-11-29 17:56:51 -0500 1395)