xref: /openbmc/linux/fs/gfs2/inode.c (revision e15a5365)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
4  * Copyright (C) 2004-2011 Red Hat, Inc.  All rights reserved.
5  */
6 
7 #include <linux/slab.h>
8 #include <linux/spinlock.h>
9 #include <linux/completion.h>
10 #include <linux/buffer_head.h>
11 #include <linux/namei.h>
12 #include <linux/mm.h>
13 #include <linux/cred.h>
14 #include <linux/xattr.h>
15 #include <linux/posix_acl.h>
16 #include <linux/gfs2_ondisk.h>
17 #include <linux/crc32.h>
18 #include <linux/iomap.h>
19 #include <linux/security.h>
20 #include <linux/fiemap.h>
21 #include <linux/uaccess.h>
22 
23 #include "gfs2.h"
24 #include "incore.h"
25 #include "acl.h"
26 #include "bmap.h"
27 #include "dir.h"
28 #include "xattr.h"
29 #include "glock.h"
30 #include "inode.h"
31 #include "meta_io.h"
32 #include "quota.h"
33 #include "rgrp.h"
34 #include "trans.h"
35 #include "util.h"
36 #include "super.h"
37 #include "glops.h"
38 
39 static int iget_test(struct inode *inode, void *opaque)
40 {
41 	u64 no_addr = *(u64 *)opaque;
42 
43 	return GFS2_I(inode)->i_no_addr == no_addr;
44 }
45 
46 static int iget_set(struct inode *inode, void *opaque)
47 {
48 	u64 no_addr = *(u64 *)opaque;
49 
50 	GFS2_I(inode)->i_no_addr = no_addr;
51 	inode->i_ino = no_addr;
52 	return 0;
53 }
54 
55 static struct inode *gfs2_iget(struct super_block *sb, u64 no_addr)
56 {
57 	struct inode *inode;
58 
59 repeat:
60 	inode = iget5_locked(sb, no_addr, iget_test, iget_set, &no_addr);
61 	if (!inode)
62 		return inode;
63 	if (is_bad_inode(inode)) {
64 		iput(inode);
65 		goto repeat;
66 	}
67 	return inode;
68 }
69 
70 /**
71  * gfs2_set_iop - Sets inode operations
72  * @inode: The inode with correct i_mode filled in
73  *
74  * GFS2 lookup code fills in vfs inode contents based on info obtained
75  * from directory entry inside gfs2_inode_lookup().
76  */
77 
78 static void gfs2_set_iop(struct inode *inode)
79 {
80 	struct gfs2_sbd *sdp = GFS2_SB(inode);
81 	umode_t mode = inode->i_mode;
82 
83 	if (S_ISREG(mode)) {
84 		inode->i_op = &gfs2_file_iops;
85 		if (gfs2_localflocks(sdp))
86 			inode->i_fop = &gfs2_file_fops_nolock;
87 		else
88 			inode->i_fop = &gfs2_file_fops;
89 	} else if (S_ISDIR(mode)) {
90 		inode->i_op = &gfs2_dir_iops;
91 		if (gfs2_localflocks(sdp))
92 			inode->i_fop = &gfs2_dir_fops_nolock;
93 		else
94 			inode->i_fop = &gfs2_dir_fops;
95 	} else if (S_ISLNK(mode)) {
96 		inode->i_op = &gfs2_symlink_iops;
97 	} else {
98 		inode->i_op = &gfs2_file_iops;
99 		init_special_inode(inode, inode->i_mode, inode->i_rdev);
100 	}
101 }
102 
103 /**
104  * gfs2_inode_lookup - Lookup an inode
105  * @sb: The super block
106  * @type: The type of the inode
107  * @no_addr: The inode number
108  * @no_formal_ino: The inode generation number
109  * @blktype: Requested block type (GFS2_BLKST_DINODE or GFS2_BLKST_UNLINKED;
110  *           GFS2_BLKST_FREE to indicate not to verify)
111  *
112  * If @type is DT_UNKNOWN, the inode type is fetched from disk.
113  *
114  * If @blktype is anything other than GFS2_BLKST_FREE (which is used as a
115  * placeholder because it doesn't otherwise make sense), the on-disk block type
116  * is verified to be @blktype.
117  *
118  * When @no_formal_ino is non-zero, this function will return ERR_PTR(-ESTALE)
119  * if it detects that @no_formal_ino doesn't match the actual inode generation
120  * number.  However, it doesn't always know unless @type is DT_UNKNOWN.
121  *
122  * Returns: A VFS inode, or an error
123  */
124 
125 struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned int type,
126 				u64 no_addr, u64 no_formal_ino,
127 				unsigned int blktype)
128 {
129 	struct inode *inode;
130 	struct gfs2_inode *ip;
131 	struct gfs2_glock *io_gl = NULL;
132 	struct gfs2_holder i_gh;
133 	int error;
134 
135 	gfs2_holder_mark_uninitialized(&i_gh);
136 	inode = gfs2_iget(sb, no_addr);
137 	if (!inode)
138 		return ERR_PTR(-ENOMEM);
139 
140 	ip = GFS2_I(inode);
141 
142 	if (inode->i_state & I_NEW) {
143 		struct gfs2_sbd *sdp = GFS2_SB(inode);
144 
145 		error = gfs2_glock_get(sdp, no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl);
146 		if (unlikely(error))
147 			goto fail;
148 		flush_delayed_work(&ip->i_gl->gl_work);
149 
150 		error = gfs2_glock_get(sdp, no_addr, &gfs2_iopen_glops, CREATE, &io_gl);
151 		if (unlikely(error))
152 			goto fail;
153 
154 		if (type == DT_UNKNOWN || blktype != GFS2_BLKST_FREE) {
155 			/*
156 			 * The GL_SKIP flag indicates to skip reading the inode
157 			 * block.  We read the inode with gfs2_inode_refresh
158 			 * after possibly checking the block type.
159 			 */
160 			error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE,
161 						   GL_SKIP, &i_gh);
162 			if (error)
163 				goto fail;
164 
165 			error = -ESTALE;
166 			if (no_formal_ino &&
167 			    gfs2_inode_already_deleted(ip->i_gl, no_formal_ino))
168 				goto fail;
169 
170 			if (blktype != GFS2_BLKST_FREE) {
171 				error = gfs2_check_blk_type(sdp, no_addr,
172 							    blktype);
173 				if (error)
174 					goto fail;
175 			}
176 		}
177 
178 		glock_set_object(ip->i_gl, ip);
179 		set_bit(GIF_INVALID, &ip->i_flags);
180 		error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh);
181 		if (unlikely(error))
182 			goto fail;
183 		if (blktype != GFS2_BLKST_UNLINKED)
184 			gfs2_cancel_delete_work(ip->i_iopen_gh.gh_gl);
185 		glock_set_object(ip->i_iopen_gh.gh_gl, ip);
186 		gfs2_glock_put(io_gl);
187 		io_gl = NULL;
188 
189 		/* Lowest possible timestamp; will be overwritten in gfs2_dinode_in. */
190 		inode->i_atime.tv_sec = 1LL << (8 * sizeof(inode->i_atime.tv_sec) - 1);
191 		inode->i_atime.tv_nsec = 0;
192 
193 		if (type == DT_UNKNOWN) {
194 			/* Inode glock must be locked already */
195 			error = gfs2_inode_refresh(GFS2_I(inode));
196 			if (error)
197 				goto fail;
198 		} else {
199 			ip->i_no_formal_ino = no_formal_ino;
200 			inode->i_mode = DT2IF(type);
201 		}
202 
203 		if (gfs2_holder_initialized(&i_gh))
204 			gfs2_glock_dq_uninit(&i_gh);
205 
206 		gfs2_set_iop(inode);
207 	}
208 
209 	if (no_formal_ino && ip->i_no_formal_ino &&
210 	    no_formal_ino != ip->i_no_formal_ino) {
211 		error = -ESTALE;
212 		if (inode->i_state & I_NEW)
213 			goto fail;
214 		iput(inode);
215 		return ERR_PTR(error);
216 	}
217 
218 	if (inode->i_state & I_NEW)
219 		unlock_new_inode(inode);
220 
221 	return inode;
222 
223 fail:
224 	if (io_gl)
225 		gfs2_glock_put(io_gl);
226 	if (gfs2_holder_initialized(&i_gh))
227 		gfs2_glock_dq_uninit(&i_gh);
228 	iget_failed(inode);
229 	return ERR_PTR(error);
230 }
231 
232 /**
233  * gfs2_lookup_by_inum - look up an inode by inode number
234  * @sdp: The super block
235  * @no_addr: The inode number
236  * @no_formal_ino: The inode generation number (0 for any)
237  * @blktype: Requested block type (see gfs2_inode_lookup)
238  */
239 struct inode *gfs2_lookup_by_inum(struct gfs2_sbd *sdp, u64 no_addr,
240 				  u64 no_formal_ino, unsigned int blktype)
241 {
242 	struct super_block *sb = sdp->sd_vfs;
243 	struct inode *inode;
244 	int error;
245 
246 	inode = gfs2_inode_lookup(sb, DT_UNKNOWN, no_addr, no_formal_ino,
247 				  blktype);
248 	if (IS_ERR(inode))
249 		return inode;
250 
251 	if (no_formal_ino) {
252 		error = -EIO;
253 		if (GFS2_I(inode)->i_diskflags & GFS2_DIF_SYSTEM)
254 			goto fail_iput;
255 	}
256 	return inode;
257 
258 fail_iput:
259 	iput(inode);
260 	return ERR_PTR(error);
261 }
262 
263 
264 struct inode *gfs2_lookup_simple(struct inode *dip, const char *name)
265 {
266 	struct qstr qstr;
267 	struct inode *inode;
268 	gfs2_str2qstr(&qstr, name);
269 	inode = gfs2_lookupi(dip, &qstr, 1);
270 	/* gfs2_lookupi has inconsistent callers: vfs
271 	 * related routines expect NULL for no entry found,
272 	 * gfs2_lookup_simple callers expect ENOENT
273 	 * and do not check for NULL.
274 	 */
275 	if (inode == NULL)
276 		return ERR_PTR(-ENOENT);
277 	else
278 		return inode;
279 }
280 
281 
282 /**
283  * gfs2_lookupi - Look up a filename in a directory and return its inode
284  * @d_gh: An initialized holder for the directory glock
285  * @name: The name of the inode to look for
286  * @is_root: If 1, ignore the caller's permissions
287  * @i_gh: An uninitialized holder for the new inode glock
288  *
289  * This can be called via the VFS filldir function when NFS is doing
290  * a readdirplus and the inode which its intending to stat isn't
291  * already in cache. In this case we must not take the directory glock
292  * again, since the readdir call will have already taken that lock.
293  *
294  * Returns: errno
295  */
296 
297 struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
298 			   int is_root)
299 {
300 	struct super_block *sb = dir->i_sb;
301 	struct gfs2_inode *dip = GFS2_I(dir);
302 	struct gfs2_holder d_gh;
303 	int error = 0;
304 	struct inode *inode = NULL;
305 
306 	gfs2_holder_mark_uninitialized(&d_gh);
307 	if (!name->len || name->len > GFS2_FNAMESIZE)
308 		return ERR_PTR(-ENAMETOOLONG);
309 
310 	if ((name->len == 1 && memcmp(name->name, ".", 1) == 0) ||
311 	    (name->len == 2 && memcmp(name->name, "..", 2) == 0 &&
312 	     dir == d_inode(sb->s_root))) {
313 		igrab(dir);
314 		return dir;
315 	}
316 
317 	if (gfs2_glock_is_locked_by_me(dip->i_gl) == NULL) {
318 		error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh);
319 		if (error)
320 			return ERR_PTR(error);
321 	}
322 
323 	if (!is_root) {
324 		error = gfs2_permission(dir, MAY_EXEC);
325 		if (error)
326 			goto out;
327 	}
328 
329 	inode = gfs2_dir_search(dir, name, false);
330 	if (IS_ERR(inode))
331 		error = PTR_ERR(inode);
332 out:
333 	if (gfs2_holder_initialized(&d_gh))
334 		gfs2_glock_dq_uninit(&d_gh);
335 	if (error == -ENOENT)
336 		return NULL;
337 	return inode ? inode : ERR_PTR(error);
338 }
339 
340 /**
341  * create_ok - OK to create a new on-disk inode here?
342  * @dip:  Directory in which dinode is to be created
343  * @name:  Name of new dinode
344  * @mode:
345  *
346  * Returns: errno
347  */
348 
349 static int create_ok(struct gfs2_inode *dip, const struct qstr *name,
350 		     umode_t mode)
351 {
352 	int error;
353 
354 	error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC);
355 	if (error)
356 		return error;
357 
358 	/*  Don't create entries in an unlinked directory  */
359 	if (!dip->i_inode.i_nlink)
360 		return -ENOENT;
361 
362 	if (dip->i_entries == (u32)-1)
363 		return -EFBIG;
364 	if (S_ISDIR(mode) && dip->i_inode.i_nlink == (u32)-1)
365 		return -EMLINK;
366 
367 	return 0;
368 }
369 
370 static void munge_mode_uid_gid(const struct gfs2_inode *dip,
371 			       struct inode *inode)
372 {
373 	if (GFS2_SB(&dip->i_inode)->sd_args.ar_suiddir &&
374 	    (dip->i_inode.i_mode & S_ISUID) &&
375 	    !uid_eq(dip->i_inode.i_uid, GLOBAL_ROOT_UID)) {
376 		if (S_ISDIR(inode->i_mode))
377 			inode->i_mode |= S_ISUID;
378 		else if (!uid_eq(dip->i_inode.i_uid, current_fsuid()))
379 			inode->i_mode &= ~07111;
380 		inode->i_uid = dip->i_inode.i_uid;
381 	} else
382 		inode->i_uid = current_fsuid();
383 
384 	if (dip->i_inode.i_mode & S_ISGID) {
385 		if (S_ISDIR(inode->i_mode))
386 			inode->i_mode |= S_ISGID;
387 		inode->i_gid = dip->i_inode.i_gid;
388 	} else
389 		inode->i_gid = current_fsgid();
390 }
391 
392 static int alloc_dinode(struct gfs2_inode *ip, u32 flags, unsigned *dblocks)
393 {
394 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
395 	struct gfs2_alloc_parms ap = { .target = *dblocks, .aflags = flags, };
396 	int error;
397 
398 	error = gfs2_quota_lock_check(ip, &ap);
399 	if (error)
400 		goto out;
401 
402 	error = gfs2_inplace_reserve(ip, &ap);
403 	if (error)
404 		goto out_quota;
405 
406 	error = gfs2_trans_begin(sdp, (*dblocks * RES_RG_BIT) + RES_STATFS + RES_QUOTA, 0);
407 	if (error)
408 		goto out_ipreserv;
409 
410 	error = gfs2_alloc_blocks(ip, &ip->i_no_addr, dblocks, 1, &ip->i_generation);
411 	ip->i_no_formal_ino = ip->i_generation;
412 	ip->i_inode.i_ino = ip->i_no_addr;
413 	ip->i_goal = ip->i_no_addr;
414 
415 	gfs2_trans_end(sdp);
416 
417 out_ipreserv:
418 	gfs2_inplace_release(ip);
419 out_quota:
420 	gfs2_quota_unlock(ip);
421 out:
422 	return error;
423 }
424 
425 static void gfs2_init_dir(struct buffer_head *dibh,
426 			  const struct gfs2_inode *parent)
427 {
428 	struct gfs2_dinode *di = (struct gfs2_dinode *)dibh->b_data;
429 	struct gfs2_dirent *dent = (struct gfs2_dirent *)(di+1);
430 
431 	gfs2_qstr2dirent(&gfs2_qdot, GFS2_DIRENT_SIZE(gfs2_qdot.len), dent);
432 	dent->de_inum = di->di_num; /* already GFS2 endian */
433 	dent->de_type = cpu_to_be16(DT_DIR);
434 
435 	dent = (struct gfs2_dirent *)((char*)dent + GFS2_DIRENT_SIZE(1));
436 	gfs2_qstr2dirent(&gfs2_qdotdot, dibh->b_size - GFS2_DIRENT_SIZE(1) - sizeof(struct gfs2_dinode), dent);
437 	gfs2_inum_out(parent, dent);
438 	dent->de_type = cpu_to_be16(DT_DIR);
439 
440 }
441 
442 /**
443  * gfs2_init_xattr - Initialise an xattr block for a new inode
444  * @ip: The inode in question
445  *
446  * This sets up an empty xattr block for a new inode, ready to
447  * take any ACLs, LSM xattrs, etc.
448  */
449 
450 static void gfs2_init_xattr(struct gfs2_inode *ip)
451 {
452 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
453 	struct buffer_head *bh;
454 	struct gfs2_ea_header *ea;
455 
456 	bh = gfs2_meta_new(ip->i_gl, ip->i_eattr);
457 	gfs2_trans_add_meta(ip->i_gl, bh);
458 	gfs2_metatype_set(bh, GFS2_METATYPE_EA, GFS2_FORMAT_EA);
459 	gfs2_buffer_clear_tail(bh, sizeof(struct gfs2_meta_header));
460 
461 	ea = GFS2_EA_BH2FIRST(bh);
462 	ea->ea_rec_len = cpu_to_be32(sdp->sd_jbsize);
463 	ea->ea_type = GFS2_EATYPE_UNUSED;
464 	ea->ea_flags = GFS2_EAFLAG_LAST;
465 
466 	brelse(bh);
467 }
468 
469 /**
470  * init_dinode - Fill in a new dinode structure
471  * @dip: The directory this inode is being created in
472  * @ip: The inode
473  * @symname: The symlink destination (if a symlink)
474  * @bhp: The buffer head (returned to caller)
475  *
476  */
477 
478 static void init_dinode(struct gfs2_inode *dip, struct gfs2_inode *ip,
479 			const char *symname)
480 {
481 	struct gfs2_dinode *di;
482 	struct buffer_head *dibh;
483 
484 	dibh = gfs2_meta_new(ip->i_gl, ip->i_no_addr);
485 	gfs2_trans_add_meta(ip->i_gl, dibh);
486 	di = (struct gfs2_dinode *)dibh->b_data;
487 	gfs2_dinode_out(ip, di);
488 
489 	di->di_major = cpu_to_be32(MAJOR(ip->i_inode.i_rdev));
490 	di->di_minor = cpu_to_be32(MINOR(ip->i_inode.i_rdev));
491 	di->__pad1 = 0;
492 	di->__pad2 = 0;
493 	di->__pad3 = 0;
494 	memset(&di->__pad4, 0, sizeof(di->__pad4));
495 	memset(&di->di_reserved, 0, sizeof(di->di_reserved));
496 	gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
497 
498 	switch(ip->i_inode.i_mode & S_IFMT) {
499 	case S_IFDIR:
500 		gfs2_init_dir(dibh, dip);
501 		break;
502 	case S_IFLNK:
503 		memcpy(dibh->b_data + sizeof(struct gfs2_dinode), symname, ip->i_inode.i_size);
504 		break;
505 	}
506 
507 	set_buffer_uptodate(dibh);
508 	brelse(dibh);
509 }
510 
511 /**
512  * gfs2_trans_da_blocks - Calculate number of blocks to link inode
513  * @dip: The directory we are linking into
514  * @da: The dir add information
515  * @nr_inodes: The number of inodes involved
516  *
517  * This calculate the number of blocks we need to reserve in a
518  * transaction to link @nr_inodes into a directory. In most cases
519  * @nr_inodes will be 2 (the directory plus the inode being linked in)
520  * but in case of rename, 4 may be required.
521  *
522  * Returns: Number of blocks
523  */
524 
525 static unsigned gfs2_trans_da_blks(const struct gfs2_inode *dip,
526 				   const struct gfs2_diradd *da,
527 				   unsigned nr_inodes)
528 {
529 	return da->nr_blocks + gfs2_rg_blocks(dip, da->nr_blocks) +
530 	       (nr_inodes * RES_DINODE) + RES_QUOTA + RES_STATFS;
531 }
532 
533 static int link_dinode(struct gfs2_inode *dip, const struct qstr *name,
534 		       struct gfs2_inode *ip, struct gfs2_diradd *da)
535 {
536 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
537 	struct gfs2_alloc_parms ap = { .target = da->nr_blocks, };
538 	int error;
539 
540 	if (da->nr_blocks) {
541 		error = gfs2_quota_lock_check(dip, &ap);
542 		if (error)
543 			goto fail_quota_locks;
544 
545 		error = gfs2_inplace_reserve(dip, &ap);
546 		if (error)
547 			goto fail_quota_locks;
548 
549 		error = gfs2_trans_begin(sdp, gfs2_trans_da_blks(dip, da, 2), 0);
550 		if (error)
551 			goto fail_ipreserv;
552 	} else {
553 		error = gfs2_trans_begin(sdp, RES_LEAF + 2 * RES_DINODE, 0);
554 		if (error)
555 			goto fail_quota_locks;
556 	}
557 
558 	error = gfs2_dir_add(&dip->i_inode, name, ip, da);
559 
560 	gfs2_trans_end(sdp);
561 fail_ipreserv:
562 	gfs2_inplace_release(dip);
563 fail_quota_locks:
564 	gfs2_quota_unlock(dip);
565 	return error;
566 }
567 
568 static int gfs2_initxattrs(struct inode *inode, const struct xattr *xattr_array,
569 		    void *fs_info)
570 {
571 	const struct xattr *xattr;
572 	int err = 0;
573 
574 	for (xattr = xattr_array; xattr->name != NULL; xattr++) {
575 		err = __gfs2_xattr_set(inode, xattr->name, xattr->value,
576 				       xattr->value_len, 0,
577 				       GFS2_EATYPE_SECURITY);
578 		if (err < 0)
579 			break;
580 	}
581 	return err;
582 }
583 
584 /**
585  * gfs2_create_inode - Create a new inode
586  * @dir: The parent directory
587  * @dentry: The new dentry
588  * @file: If non-NULL, the file which is being opened
589  * @mode: The permissions on the new inode
590  * @dev: For device nodes, this is the device number
591  * @symname: For symlinks, this is the link destination
592  * @size: The initial size of the inode (ignored for directories)
593  *
594  * Returns: 0 on success, or error code
595  */
596 
597 static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
598 			     struct file *file,
599 			     umode_t mode, dev_t dev, const char *symname,
600 			     unsigned int size, int excl)
601 {
602 	const struct qstr *name = &dentry->d_name;
603 	struct posix_acl *default_acl, *acl;
604 	struct gfs2_holder ghs[2];
605 	struct inode *inode = NULL;
606 	struct gfs2_inode *dip = GFS2_I(dir), *ip;
607 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
608 	struct gfs2_glock *io_gl = NULL;
609 	int error, free_vfs_inode = 1;
610 	u32 aflags = 0;
611 	unsigned blocks = 1;
612 	struct gfs2_diradd da = { .bh = NULL, .save_loc = 1, };
613 
614 	if (!name->len || name->len > GFS2_FNAMESIZE)
615 		return -ENAMETOOLONG;
616 
617 	error = gfs2_qa_get(dip);
618 	if (error)
619 		return error;
620 
621 	error = gfs2_rindex_update(sdp);
622 	if (error)
623 		goto fail;
624 
625 	error = gfs2_glock_nq_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
626 	if (error)
627 		goto fail;
628 	gfs2_holder_mark_uninitialized(ghs + 1);
629 
630 	error = create_ok(dip, name, mode);
631 	if (error)
632 		goto fail_gunlock;
633 
634 	inode = gfs2_dir_search(dir, &dentry->d_name, !S_ISREG(mode) || excl);
635 	error = PTR_ERR(inode);
636 	if (!IS_ERR(inode)) {
637 		if (S_ISDIR(inode->i_mode)) {
638 			iput(inode);
639 			inode = ERR_PTR(-EISDIR);
640 			goto fail_gunlock;
641 		}
642 		d_instantiate(dentry, inode);
643 		error = 0;
644 		if (file) {
645 			if (S_ISREG(inode->i_mode))
646 				error = finish_open(file, dentry, gfs2_open_common);
647 			else
648 				error = finish_no_open(file, NULL);
649 		}
650 		gfs2_glock_dq_uninit(ghs);
651 		goto fail;
652 	} else if (error != -ENOENT) {
653 		goto fail_gunlock;
654 	}
655 
656 	error = gfs2_diradd_alloc_required(dir, name, &da);
657 	if (error < 0)
658 		goto fail_gunlock;
659 
660 	inode = new_inode(sdp->sd_vfs);
661 	error = -ENOMEM;
662 	if (!inode)
663 		goto fail_gunlock;
664 
665 	error = posix_acl_create(dir, &mode, &default_acl, &acl);
666 	if (error)
667 		goto fail_gunlock;
668 
669 	ip = GFS2_I(inode);
670 	error = gfs2_qa_get(ip);
671 	if (error)
672 		goto fail_free_acls;
673 
674 	inode->i_mode = mode;
675 	set_nlink(inode, S_ISDIR(mode) ? 2 : 1);
676 	inode->i_rdev = dev;
677 	inode->i_size = size;
678 	inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
679 	munge_mode_uid_gid(dip, inode);
680 	check_and_update_goal(dip);
681 	ip->i_goal = dip->i_goal;
682 	ip->i_diskflags = 0;
683 	ip->i_eattr = 0;
684 	ip->i_height = 0;
685 	ip->i_depth = 0;
686 	ip->i_entries = 0;
687 	ip->i_no_addr = 0; /* Temporarily zero until real addr is assigned */
688 
689 	switch(mode & S_IFMT) {
690 	case S_IFREG:
691 		if ((dip->i_diskflags & GFS2_DIF_INHERIT_JDATA) ||
692 		    gfs2_tune_get(sdp, gt_new_files_jdata))
693 			ip->i_diskflags |= GFS2_DIF_JDATA;
694 		gfs2_set_aops(inode);
695 		break;
696 	case S_IFDIR:
697 		ip->i_diskflags |= (dip->i_diskflags & GFS2_DIF_INHERIT_JDATA);
698 		ip->i_diskflags |= GFS2_DIF_JDATA;
699 		ip->i_entries = 2;
700 		break;
701 	}
702 
703 	/* Force SYSTEM flag on all files and subdirs of a SYSTEM directory */
704 	if (dip->i_diskflags & GFS2_DIF_SYSTEM)
705 		ip->i_diskflags |= GFS2_DIF_SYSTEM;
706 
707 	gfs2_set_inode_flags(inode);
708 
709 	if ((GFS2_I(d_inode(sdp->sd_root_dir)) == dip) ||
710 	    (dip->i_diskflags & GFS2_DIF_TOPDIR))
711 		aflags |= GFS2_AF_ORLOV;
712 
713 	if (default_acl || acl)
714 		blocks++;
715 
716 	error = alloc_dinode(ip, aflags, &blocks);
717 	if (error)
718 		goto fail_free_inode;
719 
720 	gfs2_set_inode_blocks(inode, blocks);
721 
722 	error = gfs2_glock_get(sdp, ip->i_no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl);
723 	if (error)
724 		goto fail_free_inode;
725 	flush_delayed_work(&ip->i_gl->gl_work);
726 	glock_set_object(ip->i_gl, ip);
727 
728 	error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, ghs + 1);
729 	if (error)
730 		goto fail_free_inode;
731 
732 	error = gfs2_trans_begin(sdp, blocks, 0);
733 	if (error)
734 		goto fail_free_inode;
735 
736 	if (blocks > 1) {
737 		ip->i_eattr = ip->i_no_addr + 1;
738 		gfs2_init_xattr(ip);
739 	}
740 	init_dinode(dip, ip, symname);
741 	gfs2_trans_end(sdp);
742 
743 	error = gfs2_glock_get(sdp, ip->i_no_addr, &gfs2_iopen_glops, CREATE, &io_gl);
744 	if (error)
745 		goto fail_free_inode;
746 
747 	BUG_ON(test_and_set_bit(GLF_INODE_CREATING, &io_gl->gl_flags));
748 
749 	error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh);
750 	if (error)
751 		goto fail_gunlock2;
752 
753 	gfs2_cancel_delete_work(ip->i_iopen_gh.gh_gl);
754 	glock_set_object(ip->i_iopen_gh.gh_gl, ip);
755 	gfs2_set_iop(inode);
756 	insert_inode_hash(inode);
757 
758 	free_vfs_inode = 0; /* After this point, the inode is no longer
759 			       considered free. Any failures need to undo
760 			       the gfs2 structures. */
761 	if (default_acl) {
762 		error = __gfs2_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
763 		if (error)
764 			goto fail_gunlock3;
765 		posix_acl_release(default_acl);
766 		default_acl = NULL;
767 	}
768 	if (acl) {
769 		error = __gfs2_set_acl(inode, acl, ACL_TYPE_ACCESS);
770 		if (error)
771 			goto fail_gunlock3;
772 		posix_acl_release(acl);
773 		acl = NULL;
774 	}
775 
776 	error = security_inode_init_security(&ip->i_inode, &dip->i_inode, name,
777 					     &gfs2_initxattrs, NULL);
778 	if (error)
779 		goto fail_gunlock3;
780 
781 	error = link_dinode(dip, name, ip, &da);
782 	if (error)
783 		goto fail_gunlock3;
784 
785 	mark_inode_dirty(inode);
786 	d_instantiate(dentry, inode);
787 	/* After instantiate, errors should result in evict which will destroy
788 	 * both inode and iopen glocks properly. */
789 	if (file) {
790 		file->f_mode |= FMODE_CREATED;
791 		error = finish_open(file, dentry, gfs2_open_common);
792 	}
793 	gfs2_glock_dq_uninit(ghs);
794 	gfs2_qa_put(ip);
795 	gfs2_glock_dq_uninit(ghs + 1);
796 	clear_bit(GLF_INODE_CREATING, &io_gl->gl_flags);
797 	gfs2_glock_put(io_gl);
798 	gfs2_qa_put(dip);
799 	return error;
800 
801 fail_gunlock3:
802 	glock_clear_object(io_gl, ip);
803 	gfs2_glock_dq_uninit(&ip->i_iopen_gh);
804 fail_gunlock2:
805 	clear_bit(GLF_INODE_CREATING, &io_gl->gl_flags);
806 	gfs2_glock_put(io_gl);
807 fail_free_inode:
808 	if (ip->i_gl) {
809 		glock_clear_object(ip->i_gl, ip);
810 		if (free_vfs_inode) /* else evict will do the put for us */
811 			gfs2_glock_put(ip->i_gl);
812 	}
813 	gfs2_rs_delete(ip, NULL);
814 	gfs2_qa_put(ip);
815 fail_free_acls:
816 	posix_acl_release(default_acl);
817 	posix_acl_release(acl);
818 fail_gunlock:
819 	gfs2_dir_no_add(&da);
820 	gfs2_glock_dq_uninit(ghs);
821 	if (!IS_ERR_OR_NULL(inode)) {
822 		clear_nlink(inode);
823 		if (!free_vfs_inode)
824 			mark_inode_dirty(inode);
825 		set_bit(free_vfs_inode ? GIF_FREE_VFS_INODE : GIF_ALLOC_FAILED,
826 			&GFS2_I(inode)->i_flags);
827 		iput(inode);
828 	}
829 	if (gfs2_holder_initialized(ghs + 1))
830 		gfs2_glock_dq_uninit(ghs + 1);
831 fail:
832 	gfs2_qa_put(dip);
833 	return error;
834 }
835 
836 /**
837  * gfs2_create - Create a file
838  * @dir: The directory in which to create the file
839  * @dentry: The dentry of the new file
840  * @mode: The mode of the new file
841  *
842  * Returns: errno
843  */
844 
845 static int gfs2_create(struct inode *dir, struct dentry *dentry,
846 		       umode_t mode, bool excl)
847 {
848 	return gfs2_create_inode(dir, dentry, NULL, S_IFREG | mode, 0, NULL, 0, excl);
849 }
850 
851 /**
852  * __gfs2_lookup - Look up a filename in a directory and return its inode
853  * @dir: The directory inode
854  * @dentry: The dentry of the new inode
855  * @file: File to be opened
856  *
857  *
858  * Returns: errno
859  */
860 
861 static struct dentry *__gfs2_lookup(struct inode *dir, struct dentry *dentry,
862 				    struct file *file)
863 {
864 	struct inode *inode;
865 	struct dentry *d;
866 	struct gfs2_holder gh;
867 	struct gfs2_glock *gl;
868 	int error;
869 
870 	inode = gfs2_lookupi(dir, &dentry->d_name, 0);
871 	if (inode == NULL) {
872 		d_add(dentry, NULL);
873 		return NULL;
874 	}
875 	if (IS_ERR(inode))
876 		return ERR_CAST(inode);
877 
878 	gl = GFS2_I(inode)->i_gl;
879 	error = gfs2_glock_nq_init(gl, LM_ST_SHARED, LM_FLAG_ANY, &gh);
880 	if (error) {
881 		iput(inode);
882 		return ERR_PTR(error);
883 	}
884 
885 	d = d_splice_alias(inode, dentry);
886 	if (IS_ERR(d)) {
887 		gfs2_glock_dq_uninit(&gh);
888 		return d;
889 	}
890 	if (file && S_ISREG(inode->i_mode))
891 		error = finish_open(file, dentry, gfs2_open_common);
892 
893 	gfs2_glock_dq_uninit(&gh);
894 	if (error) {
895 		dput(d);
896 		return ERR_PTR(error);
897 	}
898 	return d;
899 }
900 
901 static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry,
902 				  unsigned flags)
903 {
904 	return __gfs2_lookup(dir, dentry, NULL);
905 }
906 
907 /**
908  * gfs2_link - Link to a file
909  * @old_dentry: The inode to link
910  * @dir: Add link to this directory
911  * @dentry: The name of the link
912  *
913  * Link the inode in "old_dentry" into the directory "dir" with the
914  * name in "dentry".
915  *
916  * Returns: errno
917  */
918 
919 static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
920 		     struct dentry *dentry)
921 {
922 	struct gfs2_inode *dip = GFS2_I(dir);
923 	struct gfs2_sbd *sdp = GFS2_SB(dir);
924 	struct inode *inode = d_inode(old_dentry);
925 	struct gfs2_inode *ip = GFS2_I(inode);
926 	struct gfs2_holder ghs[2];
927 	struct buffer_head *dibh;
928 	struct gfs2_diradd da = { .bh = NULL, .save_loc = 1, };
929 	int error;
930 
931 	if (S_ISDIR(inode->i_mode))
932 		return -EPERM;
933 
934 	error = gfs2_qa_get(dip);
935 	if (error)
936 		return error;
937 
938 	gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
939 	gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1);
940 
941 	error = gfs2_glock_nq(ghs); /* parent */
942 	if (error)
943 		goto out_parent;
944 
945 	error = gfs2_glock_nq(ghs + 1); /* child */
946 	if (error)
947 		goto out_child;
948 
949 	error = -ENOENT;
950 	if (inode->i_nlink == 0)
951 		goto out_gunlock;
952 
953 	error = gfs2_permission(dir, MAY_WRITE | MAY_EXEC);
954 	if (error)
955 		goto out_gunlock;
956 
957 	error = gfs2_dir_check(dir, &dentry->d_name, NULL);
958 	switch (error) {
959 	case -ENOENT:
960 		break;
961 	case 0:
962 		error = -EEXIST;
963 	default:
964 		goto out_gunlock;
965 	}
966 
967 	error = -EINVAL;
968 	if (!dip->i_inode.i_nlink)
969 		goto out_gunlock;
970 	error = -EFBIG;
971 	if (dip->i_entries == (u32)-1)
972 		goto out_gunlock;
973 	error = -EPERM;
974 	if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
975 		goto out_gunlock;
976 	error = -EINVAL;
977 	if (!ip->i_inode.i_nlink)
978 		goto out_gunlock;
979 	error = -EMLINK;
980 	if (ip->i_inode.i_nlink == (u32)-1)
981 		goto out_gunlock;
982 
983 	error = gfs2_diradd_alloc_required(dir, &dentry->d_name, &da);
984 	if (error < 0)
985 		goto out_gunlock;
986 
987 	if (da.nr_blocks) {
988 		struct gfs2_alloc_parms ap = { .target = da.nr_blocks, };
989 		error = gfs2_quota_lock_check(dip, &ap);
990 		if (error)
991 			goto out_gunlock;
992 
993 		error = gfs2_inplace_reserve(dip, &ap);
994 		if (error)
995 			goto out_gunlock_q;
996 
997 		error = gfs2_trans_begin(sdp, gfs2_trans_da_blks(dip, &da, 2), 0);
998 		if (error)
999 			goto out_ipres;
1000 	} else {
1001 		error = gfs2_trans_begin(sdp, 2 * RES_DINODE + RES_LEAF, 0);
1002 		if (error)
1003 			goto out_ipres;
1004 	}
1005 
1006 	error = gfs2_meta_inode_buffer(ip, &dibh);
1007 	if (error)
1008 		goto out_end_trans;
1009 
1010 	error = gfs2_dir_add(dir, &dentry->d_name, ip, &da);
1011 	if (error)
1012 		goto out_brelse;
1013 
1014 	gfs2_trans_add_meta(ip->i_gl, dibh);
1015 	inc_nlink(&ip->i_inode);
1016 	ip->i_inode.i_ctime = current_time(&ip->i_inode);
1017 	ihold(inode);
1018 	d_instantiate(dentry, inode);
1019 	mark_inode_dirty(inode);
1020 
1021 out_brelse:
1022 	brelse(dibh);
1023 out_end_trans:
1024 	gfs2_trans_end(sdp);
1025 out_ipres:
1026 	if (da.nr_blocks)
1027 		gfs2_inplace_release(dip);
1028 out_gunlock_q:
1029 	if (da.nr_blocks)
1030 		gfs2_quota_unlock(dip);
1031 out_gunlock:
1032 	gfs2_dir_no_add(&da);
1033 	gfs2_glock_dq(ghs + 1);
1034 out_child:
1035 	gfs2_glock_dq(ghs);
1036 out_parent:
1037 	gfs2_qa_put(dip);
1038 	gfs2_holder_uninit(ghs);
1039 	gfs2_holder_uninit(ghs + 1);
1040 	return error;
1041 }
1042 
1043 /*
1044  * gfs2_unlink_ok - check to see that a inode is still in a directory
1045  * @dip: the directory
1046  * @name: the name of the file
1047  * @ip: the inode
1048  *
1049  * Assumes that the lock on (at least) @dip is held.
1050  *
1051  * Returns: 0 if the parent/child relationship is correct, errno if it isn't
1052  */
1053 
1054 static int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
1055 			  const struct gfs2_inode *ip)
1056 {
1057 	int error;
1058 
1059 	if (IS_IMMUTABLE(&ip->i_inode) || IS_APPEND(&ip->i_inode))
1060 		return -EPERM;
1061 
1062 	if ((dip->i_inode.i_mode & S_ISVTX) &&
1063 	    !uid_eq(dip->i_inode.i_uid, current_fsuid()) &&
1064 	    !uid_eq(ip->i_inode.i_uid, current_fsuid()) && !capable(CAP_FOWNER))
1065 		return -EPERM;
1066 
1067 	if (IS_APPEND(&dip->i_inode))
1068 		return -EPERM;
1069 
1070 	error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC);
1071 	if (error)
1072 		return error;
1073 
1074 	return gfs2_dir_check(&dip->i_inode, name, ip);
1075 }
1076 
1077 /**
1078  * gfs2_unlink_inode - Removes an inode from its parent dir and unlinks it
1079  * @dip: The parent directory
1080  * @name: The name of the entry in the parent directory
1081  * @inode: The inode to be removed
1082  *
1083  * Called with all the locks and in a transaction. This will only be
1084  * called for a directory after it has been checked to ensure it is empty.
1085  *
1086  * Returns: 0 on success, or an error
1087  */
1088 
1089 static int gfs2_unlink_inode(struct gfs2_inode *dip,
1090 			     const struct dentry *dentry)
1091 {
1092 	struct inode *inode = d_inode(dentry);
1093 	struct gfs2_inode *ip = GFS2_I(inode);
1094 	int error;
1095 
1096 	error = gfs2_dir_del(dip, dentry);
1097 	if (error)
1098 		return error;
1099 
1100 	ip->i_entries = 0;
1101 	inode->i_ctime = current_time(inode);
1102 	if (S_ISDIR(inode->i_mode))
1103 		clear_nlink(inode);
1104 	else
1105 		drop_nlink(inode);
1106 	mark_inode_dirty(inode);
1107 	if (inode->i_nlink == 0)
1108 		gfs2_unlink_di(inode);
1109 	return 0;
1110 }
1111 
1112 
1113 /**
1114  * gfs2_unlink - Unlink an inode (this does rmdir as well)
1115  * @dir: The inode of the directory containing the inode to unlink
1116  * @dentry: The file itself
1117  *
1118  * This routine uses the type of the inode as a flag to figure out
1119  * whether this is an unlink or an rmdir.
1120  *
1121  * Returns: errno
1122  */
1123 
1124 static int gfs2_unlink(struct inode *dir, struct dentry *dentry)
1125 {
1126 	struct gfs2_inode *dip = GFS2_I(dir);
1127 	struct gfs2_sbd *sdp = GFS2_SB(dir);
1128 	struct inode *inode = d_inode(dentry);
1129 	struct gfs2_inode *ip = GFS2_I(inode);
1130 	struct gfs2_holder ghs[3];
1131 	struct gfs2_rgrpd *rgd;
1132 	int error;
1133 
1134 	error = gfs2_rindex_update(sdp);
1135 	if (error)
1136 		return error;
1137 
1138 	error = -EROFS;
1139 
1140 	gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
1141 	gfs2_holder_init(ip->i_gl,  LM_ST_EXCLUSIVE, 0, ghs + 1);
1142 
1143 	rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr, 1);
1144 	if (!rgd)
1145 		goto out_inodes;
1146 
1147 	gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + 2);
1148 
1149 
1150 	error = gfs2_glock_nq(ghs); /* parent */
1151 	if (error)
1152 		goto out_parent;
1153 
1154 	error = gfs2_glock_nq(ghs + 1); /* child */
1155 	if (error)
1156 		goto out_child;
1157 
1158 	error = -ENOENT;
1159 	if (inode->i_nlink == 0)
1160 		goto out_rgrp;
1161 
1162 	if (S_ISDIR(inode->i_mode)) {
1163 		error = -ENOTEMPTY;
1164 		if (ip->i_entries > 2 || inode->i_nlink > 2)
1165 			goto out_rgrp;
1166 	}
1167 
1168 	error = gfs2_glock_nq(ghs + 2); /* rgrp */
1169 	if (error)
1170 		goto out_rgrp;
1171 
1172 	error = gfs2_unlink_ok(dip, &dentry->d_name, ip);
1173 	if (error)
1174 		goto out_gunlock;
1175 
1176 	error = gfs2_trans_begin(sdp, 2*RES_DINODE + 3*RES_LEAF + RES_RG_BIT, 0);
1177 	if (error)
1178 		goto out_gunlock;
1179 
1180 	error = gfs2_unlink_inode(dip, dentry);
1181 	gfs2_trans_end(sdp);
1182 
1183 out_gunlock:
1184 	gfs2_glock_dq(ghs + 2);
1185 out_rgrp:
1186 	gfs2_glock_dq(ghs + 1);
1187 out_child:
1188 	gfs2_glock_dq(ghs);
1189 out_parent:
1190 	gfs2_holder_uninit(ghs + 2);
1191 out_inodes:
1192 	gfs2_holder_uninit(ghs + 1);
1193 	gfs2_holder_uninit(ghs);
1194 	return error;
1195 }
1196 
1197 /**
1198  * gfs2_symlink - Create a symlink
1199  * @dir: The directory to create the symlink in
1200  * @dentry: The dentry to put the symlink in
1201  * @symname: The thing which the link points to
1202  *
1203  * Returns: errno
1204  */
1205 
1206 static int gfs2_symlink(struct inode *dir, struct dentry *dentry,
1207 			const char *symname)
1208 {
1209 	unsigned int size;
1210 
1211 	size = strlen(symname);
1212 	if (size >= gfs2_max_stuffed_size(GFS2_I(dir)))
1213 		return -ENAMETOOLONG;
1214 
1215 	return gfs2_create_inode(dir, dentry, NULL, S_IFLNK | S_IRWXUGO, 0, symname, size, 0);
1216 }
1217 
1218 /**
1219  * gfs2_mkdir - Make a directory
1220  * @dir: The parent directory of the new one
1221  * @dentry: The dentry of the new directory
1222  * @mode: The mode of the new directory
1223  *
1224  * Returns: errno
1225  */
1226 
1227 static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
1228 {
1229 	unsigned dsize = gfs2_max_stuffed_size(GFS2_I(dir));
1230 	return gfs2_create_inode(dir, dentry, NULL, S_IFDIR | mode, 0, NULL, dsize, 0);
1231 }
1232 
1233 /**
1234  * gfs2_mknod - Make a special file
1235  * @dir: The directory in which the special file will reside
1236  * @dentry: The dentry of the special file
1237  * @mode: The mode of the special file
1238  * @dev: The device specification of the special file
1239  *
1240  */
1241 
1242 static int gfs2_mknod(struct inode *dir, struct dentry *dentry, umode_t mode,
1243 		      dev_t dev)
1244 {
1245 	return gfs2_create_inode(dir, dentry, NULL, mode, dev, NULL, 0, 0);
1246 }
1247 
1248 /**
1249  * gfs2_atomic_open - Atomically open a file
1250  * @dir: The directory
1251  * @dentry: The proposed new entry
1252  * @file: The proposed new struct file
1253  * @flags: open flags
1254  * @mode: File mode
1255  *
1256  * Returns: error code or 0 for success
1257  */
1258 
1259 static int gfs2_atomic_open(struct inode *dir, struct dentry *dentry,
1260 			    struct file *file, unsigned flags,
1261 			    umode_t mode)
1262 {
1263 	struct dentry *d;
1264 	bool excl = !!(flags & O_EXCL);
1265 
1266 	if (!d_in_lookup(dentry))
1267 		goto skip_lookup;
1268 
1269 	d = __gfs2_lookup(dir, dentry, file);
1270 	if (IS_ERR(d))
1271 		return PTR_ERR(d);
1272 	if (d != NULL)
1273 		dentry = d;
1274 	if (d_really_is_positive(dentry)) {
1275 		if (!(file->f_mode & FMODE_OPENED))
1276 			return finish_no_open(file, d);
1277 		dput(d);
1278 		return excl && (flags & O_CREAT) ? -EEXIST : 0;
1279 	}
1280 
1281 	BUG_ON(d != NULL);
1282 
1283 skip_lookup:
1284 	if (!(flags & O_CREAT))
1285 		return -ENOENT;
1286 
1287 	return gfs2_create_inode(dir, dentry, file, S_IFREG | mode, 0, NULL, 0, excl);
1288 }
1289 
1290 /*
1291  * gfs2_ok_to_move - check if it's ok to move a directory to another directory
1292  * @this: move this
1293  * @to: to here
1294  *
1295  * Follow @to back to the root and make sure we don't encounter @this
1296  * Assumes we already hold the rename lock.
1297  *
1298  * Returns: errno
1299  */
1300 
1301 static int gfs2_ok_to_move(struct gfs2_inode *this, struct gfs2_inode *to)
1302 {
1303 	struct inode *dir = &to->i_inode;
1304 	struct super_block *sb = dir->i_sb;
1305 	struct inode *tmp;
1306 	int error = 0;
1307 
1308 	igrab(dir);
1309 
1310 	for (;;) {
1311 		if (dir == &this->i_inode) {
1312 			error = -EINVAL;
1313 			break;
1314 		}
1315 		if (dir == d_inode(sb->s_root)) {
1316 			error = 0;
1317 			break;
1318 		}
1319 
1320 		tmp = gfs2_lookupi(dir, &gfs2_qdotdot, 1);
1321 		if (!tmp) {
1322 			error = -ENOENT;
1323 			break;
1324 		}
1325 		if (IS_ERR(tmp)) {
1326 			error = PTR_ERR(tmp);
1327 			break;
1328 		}
1329 
1330 		iput(dir);
1331 		dir = tmp;
1332 	}
1333 
1334 	iput(dir);
1335 
1336 	return error;
1337 }
1338 
1339 /**
1340  * update_moved_ino - Update an inode that's being moved
1341  * @ip: The inode being moved
1342  * @ndip: The parent directory of the new filename
1343  * @dir_rename: True of ip is a directory
1344  *
1345  * Returns: errno
1346  */
1347 
1348 static int update_moved_ino(struct gfs2_inode *ip, struct gfs2_inode *ndip,
1349 			    int dir_rename)
1350 {
1351 	if (dir_rename)
1352 		return gfs2_dir_mvino(ip, &gfs2_qdotdot, ndip, DT_DIR);
1353 
1354 	ip->i_inode.i_ctime = current_time(&ip->i_inode);
1355 	mark_inode_dirty_sync(&ip->i_inode);
1356 	return 0;
1357 }
1358 
1359 
1360 /**
1361  * gfs2_rename - Rename a file
1362  * @odir: Parent directory of old file name
1363  * @odentry: The old dentry of the file
1364  * @ndir: Parent directory of new file name
1365  * @ndentry: The new dentry of the file
1366  *
1367  * Returns: errno
1368  */
1369 
1370 static int gfs2_rename(struct inode *odir, struct dentry *odentry,
1371 		       struct inode *ndir, struct dentry *ndentry)
1372 {
1373 	struct gfs2_inode *odip = GFS2_I(odir);
1374 	struct gfs2_inode *ndip = GFS2_I(ndir);
1375 	struct gfs2_inode *ip = GFS2_I(d_inode(odentry));
1376 	struct gfs2_inode *nip = NULL;
1377 	struct gfs2_sbd *sdp = GFS2_SB(odir);
1378 	struct gfs2_holder ghs[4], r_gh, rd_gh;
1379 	struct gfs2_rgrpd *nrgd;
1380 	unsigned int num_gh;
1381 	int dir_rename = 0;
1382 	struct gfs2_diradd da = { .nr_blocks = 0, .save_loc = 0, };
1383 	unsigned int x;
1384 	int error;
1385 
1386 	gfs2_holder_mark_uninitialized(&r_gh);
1387 	gfs2_holder_mark_uninitialized(&rd_gh);
1388 	if (d_really_is_positive(ndentry)) {
1389 		nip = GFS2_I(d_inode(ndentry));
1390 		if (ip == nip)
1391 			return 0;
1392 	}
1393 
1394 	error = gfs2_rindex_update(sdp);
1395 	if (error)
1396 		return error;
1397 
1398 	error = gfs2_qa_get(ndip);
1399 	if (error)
1400 		return error;
1401 
1402 	if (odip != ndip) {
1403 		error = gfs2_glock_nq_init(sdp->sd_rename_gl, LM_ST_EXCLUSIVE,
1404 					   0, &r_gh);
1405 		if (error)
1406 			goto out;
1407 
1408 		if (S_ISDIR(ip->i_inode.i_mode)) {
1409 			dir_rename = 1;
1410 			/* don't move a directory into its subdir */
1411 			error = gfs2_ok_to_move(ip, ndip);
1412 			if (error)
1413 				goto out_gunlock_r;
1414 		}
1415 	}
1416 
1417 	num_gh = 1;
1418 	gfs2_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs);
1419 	if (odip != ndip) {
1420 		gfs2_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE,GL_ASYNC,
1421 				 ghs + num_gh);
1422 		num_gh++;
1423 	}
1424 	gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs + num_gh);
1425 	num_gh++;
1426 
1427 	if (nip) {
1428 		gfs2_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC,
1429 				 ghs + num_gh);
1430 		num_gh++;
1431 	}
1432 
1433 	for (x = 0; x < num_gh; x++) {
1434 		error = gfs2_glock_nq(ghs + x);
1435 		if (error)
1436 			goto out_gunlock;
1437 	}
1438 	error = gfs2_glock_async_wait(num_gh, ghs);
1439 	if (error)
1440 		goto out_gunlock;
1441 
1442 	if (nip) {
1443 		/* Grab the resource group glock for unlink flag twiddling.
1444 		 * This is the case where the target dinode already exists
1445 		 * so we unlink before doing the rename.
1446 		 */
1447 		nrgd = gfs2_blk2rgrpd(sdp, nip->i_no_addr, 1);
1448 		if (!nrgd) {
1449 			error = -ENOENT;
1450 			goto out_gunlock;
1451 		}
1452 		error = gfs2_glock_nq_init(nrgd->rd_gl, LM_ST_EXCLUSIVE, 0,
1453 					   &rd_gh);
1454 		if (error)
1455 			goto out_gunlock;
1456 	}
1457 
1458 	error = -ENOENT;
1459 	if (ip->i_inode.i_nlink == 0)
1460 		goto out_gunlock;
1461 
1462 	/* Check out the old directory */
1463 
1464 	error = gfs2_unlink_ok(odip, &odentry->d_name, ip);
1465 	if (error)
1466 		goto out_gunlock;
1467 
1468 	/* Check out the new directory */
1469 
1470 	if (nip) {
1471 		error = gfs2_unlink_ok(ndip, &ndentry->d_name, nip);
1472 		if (error)
1473 			goto out_gunlock;
1474 
1475 		if (nip->i_inode.i_nlink == 0) {
1476 			error = -EAGAIN;
1477 			goto out_gunlock;
1478 		}
1479 
1480 		if (S_ISDIR(nip->i_inode.i_mode)) {
1481 			if (nip->i_entries < 2) {
1482 				gfs2_consist_inode(nip);
1483 				error = -EIO;
1484 				goto out_gunlock;
1485 			}
1486 			if (nip->i_entries > 2) {
1487 				error = -ENOTEMPTY;
1488 				goto out_gunlock;
1489 			}
1490 		}
1491 	} else {
1492 		error = gfs2_permission(ndir, MAY_WRITE | MAY_EXEC);
1493 		if (error)
1494 			goto out_gunlock;
1495 
1496 		error = gfs2_dir_check(ndir, &ndentry->d_name, NULL);
1497 		switch (error) {
1498 		case -ENOENT:
1499 			error = 0;
1500 			break;
1501 		case 0:
1502 			error = -EEXIST;
1503 		default:
1504 			goto out_gunlock;
1505 		}
1506 
1507 		if (odip != ndip) {
1508 			if (!ndip->i_inode.i_nlink) {
1509 				error = -ENOENT;
1510 				goto out_gunlock;
1511 			}
1512 			if (ndip->i_entries == (u32)-1) {
1513 				error = -EFBIG;
1514 				goto out_gunlock;
1515 			}
1516 			if (S_ISDIR(ip->i_inode.i_mode) &&
1517 			    ndip->i_inode.i_nlink == (u32)-1) {
1518 				error = -EMLINK;
1519 				goto out_gunlock;
1520 			}
1521 		}
1522 	}
1523 
1524 	/* Check out the dir to be renamed */
1525 
1526 	if (dir_rename) {
1527 		error = gfs2_permission(d_inode(odentry), MAY_WRITE);
1528 		if (error)
1529 			goto out_gunlock;
1530 	}
1531 
1532 	if (nip == NULL) {
1533 		error = gfs2_diradd_alloc_required(ndir, &ndentry->d_name, &da);
1534 		if (error)
1535 			goto out_gunlock;
1536 	}
1537 
1538 	if (da.nr_blocks) {
1539 		struct gfs2_alloc_parms ap = { .target = da.nr_blocks, };
1540 		error = gfs2_quota_lock_check(ndip, &ap);
1541 		if (error)
1542 			goto out_gunlock;
1543 
1544 		error = gfs2_inplace_reserve(ndip, &ap);
1545 		if (error)
1546 			goto out_gunlock_q;
1547 
1548 		error = gfs2_trans_begin(sdp, gfs2_trans_da_blks(ndip, &da, 4) +
1549 					 4 * RES_LEAF + 4, 0);
1550 		if (error)
1551 			goto out_ipreserv;
1552 	} else {
1553 		error = gfs2_trans_begin(sdp, 4 * RES_DINODE +
1554 					 5 * RES_LEAF + 4, 0);
1555 		if (error)
1556 			goto out_gunlock;
1557 	}
1558 
1559 	/* Remove the target file, if it exists */
1560 
1561 	if (nip)
1562 		error = gfs2_unlink_inode(ndip, ndentry);
1563 
1564 	error = update_moved_ino(ip, ndip, dir_rename);
1565 	if (error)
1566 		goto out_end_trans;
1567 
1568 	error = gfs2_dir_del(odip, odentry);
1569 	if (error)
1570 		goto out_end_trans;
1571 
1572 	error = gfs2_dir_add(ndir, &ndentry->d_name, ip, &da);
1573 	if (error)
1574 		goto out_end_trans;
1575 
1576 out_end_trans:
1577 	gfs2_trans_end(sdp);
1578 out_ipreserv:
1579 	if (da.nr_blocks)
1580 		gfs2_inplace_release(ndip);
1581 out_gunlock_q:
1582 	if (da.nr_blocks)
1583 		gfs2_quota_unlock(ndip);
1584 out_gunlock:
1585 	gfs2_dir_no_add(&da);
1586 	if (gfs2_holder_initialized(&rd_gh))
1587 		gfs2_glock_dq_uninit(&rd_gh);
1588 
1589 	while (x--) {
1590 		if (gfs2_holder_queued(ghs + x))
1591 			gfs2_glock_dq(ghs + x);
1592 		gfs2_holder_uninit(ghs + x);
1593 	}
1594 out_gunlock_r:
1595 	if (gfs2_holder_initialized(&r_gh))
1596 		gfs2_glock_dq_uninit(&r_gh);
1597 out:
1598 	gfs2_qa_put(ndip);
1599 	return error;
1600 }
1601 
1602 /**
1603  * gfs2_exchange - exchange two files
1604  * @odir: Parent directory of old file name
1605  * @odentry: The old dentry of the file
1606  * @ndir: Parent directory of new file name
1607  * @ndentry: The new dentry of the file
1608  * @flags: The rename flags
1609  *
1610  * Returns: errno
1611  */
1612 
1613 static int gfs2_exchange(struct inode *odir, struct dentry *odentry,
1614 			 struct inode *ndir, struct dentry *ndentry,
1615 			 unsigned int flags)
1616 {
1617 	struct gfs2_inode *odip = GFS2_I(odir);
1618 	struct gfs2_inode *ndip = GFS2_I(ndir);
1619 	struct gfs2_inode *oip = GFS2_I(odentry->d_inode);
1620 	struct gfs2_inode *nip = GFS2_I(ndentry->d_inode);
1621 	struct gfs2_sbd *sdp = GFS2_SB(odir);
1622 	struct gfs2_holder ghs[4], r_gh;
1623 	unsigned int num_gh;
1624 	unsigned int x;
1625 	umode_t old_mode = oip->i_inode.i_mode;
1626 	umode_t new_mode = nip->i_inode.i_mode;
1627 	int error;
1628 
1629 	gfs2_holder_mark_uninitialized(&r_gh);
1630 	error = gfs2_rindex_update(sdp);
1631 	if (error)
1632 		return error;
1633 
1634 	if (odip != ndip) {
1635 		error = gfs2_glock_nq_init(sdp->sd_rename_gl, LM_ST_EXCLUSIVE,
1636 					   0, &r_gh);
1637 		if (error)
1638 			goto out;
1639 
1640 		if (S_ISDIR(old_mode)) {
1641 			/* don't move a directory into its subdir */
1642 			error = gfs2_ok_to_move(oip, ndip);
1643 			if (error)
1644 				goto out_gunlock_r;
1645 		}
1646 
1647 		if (S_ISDIR(new_mode)) {
1648 			/* don't move a directory into its subdir */
1649 			error = gfs2_ok_to_move(nip, odip);
1650 			if (error)
1651 				goto out_gunlock_r;
1652 		}
1653 	}
1654 
1655 	num_gh = 1;
1656 	gfs2_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs);
1657 	if (odip != ndip) {
1658 		gfs2_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC,
1659 				 ghs + num_gh);
1660 		num_gh++;
1661 	}
1662 	gfs2_holder_init(oip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs + num_gh);
1663 	num_gh++;
1664 
1665 	gfs2_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs + num_gh);
1666 	num_gh++;
1667 
1668 	for (x = 0; x < num_gh; x++) {
1669 		error = gfs2_glock_nq(ghs + x);
1670 		if (error)
1671 			goto out_gunlock;
1672 	}
1673 
1674 	error = gfs2_glock_async_wait(num_gh, ghs);
1675 	if (error)
1676 		goto out_gunlock;
1677 
1678 	error = -ENOENT;
1679 	if (oip->i_inode.i_nlink == 0 || nip->i_inode.i_nlink == 0)
1680 		goto out_gunlock;
1681 
1682 	error = gfs2_unlink_ok(odip, &odentry->d_name, oip);
1683 	if (error)
1684 		goto out_gunlock;
1685 	error = gfs2_unlink_ok(ndip, &ndentry->d_name, nip);
1686 	if (error)
1687 		goto out_gunlock;
1688 
1689 	if (S_ISDIR(old_mode)) {
1690 		error = gfs2_permission(odentry->d_inode, MAY_WRITE);
1691 		if (error)
1692 			goto out_gunlock;
1693 	}
1694 	if (S_ISDIR(new_mode)) {
1695 		error = gfs2_permission(ndentry->d_inode, MAY_WRITE);
1696 		if (error)
1697 			goto out_gunlock;
1698 	}
1699 	error = gfs2_trans_begin(sdp, 4 * RES_DINODE + 4 * RES_LEAF, 0);
1700 	if (error)
1701 		goto out_gunlock;
1702 
1703 	error = update_moved_ino(oip, ndip, S_ISDIR(old_mode));
1704 	if (error)
1705 		goto out_end_trans;
1706 
1707 	error = update_moved_ino(nip, odip, S_ISDIR(new_mode));
1708 	if (error)
1709 		goto out_end_trans;
1710 
1711 	error = gfs2_dir_mvino(ndip, &ndentry->d_name, oip,
1712 			       IF2DT(old_mode));
1713 	if (error)
1714 		goto out_end_trans;
1715 
1716 	error = gfs2_dir_mvino(odip, &odentry->d_name, nip,
1717 			       IF2DT(new_mode));
1718 	if (error)
1719 		goto out_end_trans;
1720 
1721 	if (odip != ndip) {
1722 		if (S_ISDIR(new_mode) && !S_ISDIR(old_mode)) {
1723 			inc_nlink(&odip->i_inode);
1724 			drop_nlink(&ndip->i_inode);
1725 		} else if (S_ISDIR(old_mode) && !S_ISDIR(new_mode)) {
1726 			inc_nlink(&ndip->i_inode);
1727 			drop_nlink(&odip->i_inode);
1728 		}
1729 	}
1730 	mark_inode_dirty(&ndip->i_inode);
1731 	if (odip != ndip)
1732 		mark_inode_dirty(&odip->i_inode);
1733 
1734 out_end_trans:
1735 	gfs2_trans_end(sdp);
1736 out_gunlock:
1737 	while (x--) {
1738 		if (gfs2_holder_queued(ghs + x))
1739 			gfs2_glock_dq(ghs + x);
1740 		gfs2_holder_uninit(ghs + x);
1741 	}
1742 out_gunlock_r:
1743 	if (gfs2_holder_initialized(&r_gh))
1744 		gfs2_glock_dq_uninit(&r_gh);
1745 out:
1746 	return error;
1747 }
1748 
1749 static int gfs2_rename2(struct inode *odir, struct dentry *odentry,
1750 			struct inode *ndir, struct dentry *ndentry,
1751 			unsigned int flags)
1752 {
1753 	flags &= ~RENAME_NOREPLACE;
1754 
1755 	if (flags & ~RENAME_EXCHANGE)
1756 		return -EINVAL;
1757 
1758 	if (flags & RENAME_EXCHANGE)
1759 		return gfs2_exchange(odir, odentry, ndir, ndentry, flags);
1760 
1761 	return gfs2_rename(odir, odentry, ndir, ndentry);
1762 }
1763 
1764 /**
1765  * gfs2_get_link - Follow a symbolic link
1766  * @dentry: The dentry of the link
1767  * @inode: The inode of the link
1768  * @done: destructor for return value
1769  *
1770  * This can handle symlinks of any size.
1771  *
1772  * Returns: 0 on success or error code
1773  */
1774 
1775 static const char *gfs2_get_link(struct dentry *dentry,
1776 				 struct inode *inode,
1777 				 struct delayed_call *done)
1778 {
1779 	struct gfs2_inode *ip = GFS2_I(inode);
1780 	struct gfs2_holder i_gh;
1781 	struct buffer_head *dibh;
1782 	unsigned int size;
1783 	char *buf;
1784 	int error;
1785 
1786 	if (!dentry)
1787 		return ERR_PTR(-ECHILD);
1788 
1789 	gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &i_gh);
1790 	error = gfs2_glock_nq(&i_gh);
1791 	if (error) {
1792 		gfs2_holder_uninit(&i_gh);
1793 		return ERR_PTR(error);
1794 	}
1795 
1796 	size = (unsigned int)i_size_read(&ip->i_inode);
1797 	if (size == 0) {
1798 		gfs2_consist_inode(ip);
1799 		buf = ERR_PTR(-EIO);
1800 		goto out;
1801 	}
1802 
1803 	error = gfs2_meta_inode_buffer(ip, &dibh);
1804 	if (error) {
1805 		buf = ERR_PTR(error);
1806 		goto out;
1807 	}
1808 
1809 	buf = kzalloc(size + 1, GFP_NOFS);
1810 	if (!buf)
1811 		buf = ERR_PTR(-ENOMEM);
1812 	else
1813 		memcpy(buf, dibh->b_data + sizeof(struct gfs2_dinode), size);
1814 	brelse(dibh);
1815 out:
1816 	gfs2_glock_dq_uninit(&i_gh);
1817 	if (!IS_ERR(buf))
1818 		set_delayed_call(done, kfree_link, buf);
1819 	return buf;
1820 }
1821 
1822 /**
1823  * gfs2_permission -
1824  * @inode: The inode
1825  * @mask: The mask to be tested
1826  * @flags: Indicates whether this is an RCU path walk or not
1827  *
1828  * This may be called from the VFS directly, or from within GFS2 with the
1829  * inode locked, so we look to see if the glock is already locked and only
1830  * lock the glock if its not already been done.
1831  *
1832  * Returns: errno
1833  */
1834 
1835 int gfs2_permission(struct inode *inode, int mask)
1836 {
1837 	struct gfs2_inode *ip;
1838 	struct gfs2_holder i_gh;
1839 	int error;
1840 
1841 	gfs2_holder_mark_uninitialized(&i_gh);
1842 	ip = GFS2_I(inode);
1843 	if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) {
1844 		if (mask & MAY_NOT_BLOCK)
1845 			return -ECHILD;
1846 		error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);
1847 		if (error)
1848 			return error;
1849 	}
1850 
1851 	if ((mask & MAY_WRITE) && IS_IMMUTABLE(inode))
1852 		error = -EPERM;
1853 	else
1854 		error = generic_permission(inode, mask);
1855 	if (gfs2_holder_initialized(&i_gh))
1856 		gfs2_glock_dq_uninit(&i_gh);
1857 
1858 	return error;
1859 }
1860 
1861 static int __gfs2_setattr_simple(struct inode *inode, struct iattr *attr)
1862 {
1863 	setattr_copy(inode, attr);
1864 	mark_inode_dirty(inode);
1865 	return 0;
1866 }
1867 
1868 /**
1869  * gfs2_setattr_simple -
1870  * @ip:
1871  * @attr:
1872  *
1873  * Returns: errno
1874  */
1875 
1876 int gfs2_setattr_simple(struct inode *inode, struct iattr *attr)
1877 {
1878 	int error;
1879 
1880 	if (current->journal_info)
1881 		return __gfs2_setattr_simple(inode, attr);
1882 
1883 	error = gfs2_trans_begin(GFS2_SB(inode), RES_DINODE, 0);
1884 	if (error)
1885 		return error;
1886 
1887 	error = __gfs2_setattr_simple(inode, attr);
1888 	gfs2_trans_end(GFS2_SB(inode));
1889 	return error;
1890 }
1891 
1892 static int setattr_chown(struct inode *inode, struct iattr *attr)
1893 {
1894 	struct gfs2_inode *ip = GFS2_I(inode);
1895 	struct gfs2_sbd *sdp = GFS2_SB(inode);
1896 	kuid_t ouid, nuid;
1897 	kgid_t ogid, ngid;
1898 	int error;
1899 	struct gfs2_alloc_parms ap;
1900 
1901 	ouid = inode->i_uid;
1902 	ogid = inode->i_gid;
1903 	nuid = attr->ia_uid;
1904 	ngid = attr->ia_gid;
1905 
1906 	if (!(attr->ia_valid & ATTR_UID) || uid_eq(ouid, nuid))
1907 		ouid = nuid = NO_UID_QUOTA_CHANGE;
1908 	if (!(attr->ia_valid & ATTR_GID) || gid_eq(ogid, ngid))
1909 		ogid = ngid = NO_GID_QUOTA_CHANGE;
1910 	error = gfs2_qa_get(ip);
1911 	if (error)
1912 		return error;
1913 
1914 	error = gfs2_rindex_update(sdp);
1915 	if (error)
1916 		goto out;
1917 
1918 	error = gfs2_quota_lock(ip, nuid, ngid);
1919 	if (error)
1920 		goto out;
1921 
1922 	ap.target = gfs2_get_inode_blocks(&ip->i_inode);
1923 
1924 	if (!uid_eq(ouid, NO_UID_QUOTA_CHANGE) ||
1925 	    !gid_eq(ogid, NO_GID_QUOTA_CHANGE)) {
1926 		error = gfs2_quota_check(ip, nuid, ngid, &ap);
1927 		if (error)
1928 			goto out_gunlock_q;
1929 	}
1930 
1931 	error = gfs2_trans_begin(sdp, RES_DINODE + 2 * RES_QUOTA, 0);
1932 	if (error)
1933 		goto out_gunlock_q;
1934 
1935 	error = gfs2_setattr_simple(inode, attr);
1936 	if (error)
1937 		goto out_end_trans;
1938 
1939 	if (!uid_eq(ouid, NO_UID_QUOTA_CHANGE) ||
1940 	    !gid_eq(ogid, NO_GID_QUOTA_CHANGE)) {
1941 		gfs2_quota_change(ip, -(s64)ap.target, ouid, ogid);
1942 		gfs2_quota_change(ip, ap.target, nuid, ngid);
1943 	}
1944 
1945 out_end_trans:
1946 	gfs2_trans_end(sdp);
1947 out_gunlock_q:
1948 	gfs2_quota_unlock(ip);
1949 out:
1950 	gfs2_qa_put(ip);
1951 	return error;
1952 }
1953 
1954 /**
1955  * gfs2_setattr - Change attributes on an inode
1956  * @dentry: The dentry which is changing
1957  * @attr: The structure describing the change
1958  *
1959  * The VFS layer wants to change one or more of an inodes attributes.  Write
1960  * that change out to disk.
1961  *
1962  * Returns: errno
1963  */
1964 
1965 static int gfs2_setattr(struct dentry *dentry, struct iattr *attr)
1966 {
1967 	struct inode *inode = d_inode(dentry);
1968 	struct gfs2_inode *ip = GFS2_I(inode);
1969 	struct gfs2_holder i_gh;
1970 	int error;
1971 
1972 	error = gfs2_qa_get(ip);
1973 	if (error)
1974 		return error;
1975 
1976 	error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &i_gh);
1977 	if (error)
1978 		goto out;
1979 
1980 	error = -EPERM;
1981 	if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
1982 		goto error;
1983 
1984 	error = setattr_prepare(dentry, attr);
1985 	if (error)
1986 		goto error;
1987 
1988 	if (attr->ia_valid & ATTR_SIZE)
1989 		error = gfs2_setattr_size(inode, attr->ia_size);
1990 	else if (attr->ia_valid & (ATTR_UID | ATTR_GID))
1991 		error = setattr_chown(inode, attr);
1992 	else {
1993 		error = gfs2_setattr_simple(inode, attr);
1994 		if (!error && attr->ia_valid & ATTR_MODE)
1995 			error = posix_acl_chmod(inode, inode->i_mode);
1996 	}
1997 
1998 error:
1999 	if (!error)
2000 		mark_inode_dirty(inode);
2001 	gfs2_glock_dq_uninit(&i_gh);
2002 out:
2003 	gfs2_qa_put(ip);
2004 	return error;
2005 }
2006 
2007 /**
2008  * gfs2_getattr - Read out an inode's attributes
2009  * @path: Object to query
2010  * @stat: The inode's stats
2011  * @request_mask: Mask of STATX_xxx flags indicating the caller's interests
2012  * @flags: AT_STATX_xxx setting
2013  *
2014  * This may be called from the VFS directly, or from within GFS2 with the
2015  * inode locked, so we look to see if the glock is already locked and only
2016  * lock the glock if its not already been done. Note that its the NFS
2017  * readdirplus operation which causes this to be called (from filldir)
2018  * with the glock already held.
2019  *
2020  * Returns: errno
2021  */
2022 
2023 static int gfs2_getattr(const struct path *path, struct kstat *stat,
2024 			u32 request_mask, unsigned int flags)
2025 {
2026 	struct inode *inode = d_inode(path->dentry);
2027 	struct gfs2_inode *ip = GFS2_I(inode);
2028 	struct gfs2_holder gh;
2029 	u32 gfsflags;
2030 	int error;
2031 
2032 	gfs2_holder_mark_uninitialized(&gh);
2033 	if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) {
2034 		error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &gh);
2035 		if (error)
2036 			return error;
2037 	}
2038 
2039 	gfsflags = ip->i_diskflags;
2040 	if (gfsflags & GFS2_DIF_APPENDONLY)
2041 		stat->attributes |= STATX_ATTR_APPEND;
2042 	if (gfsflags & GFS2_DIF_IMMUTABLE)
2043 		stat->attributes |= STATX_ATTR_IMMUTABLE;
2044 
2045 	stat->attributes_mask |= (STATX_ATTR_APPEND |
2046 				  STATX_ATTR_COMPRESSED |
2047 				  STATX_ATTR_ENCRYPTED |
2048 				  STATX_ATTR_IMMUTABLE |
2049 				  STATX_ATTR_NODUMP);
2050 
2051 	generic_fillattr(inode, stat);
2052 
2053 	if (gfs2_holder_initialized(&gh))
2054 		gfs2_glock_dq_uninit(&gh);
2055 
2056 	return 0;
2057 }
2058 
2059 static int gfs2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
2060 		       u64 start, u64 len)
2061 {
2062 	struct gfs2_inode *ip = GFS2_I(inode);
2063 	struct gfs2_holder gh;
2064 	int ret;
2065 
2066 	inode_lock_shared(inode);
2067 
2068 	ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
2069 	if (ret)
2070 		goto out;
2071 
2072 	ret = iomap_fiemap(inode, fieinfo, start, len, &gfs2_iomap_ops);
2073 
2074 	gfs2_glock_dq_uninit(&gh);
2075 
2076 out:
2077 	inode_unlock_shared(inode);
2078 	return ret;
2079 }
2080 
2081 loff_t gfs2_seek_data(struct file *file, loff_t offset)
2082 {
2083 	struct inode *inode = file->f_mapping->host;
2084 	struct gfs2_inode *ip = GFS2_I(inode);
2085 	struct gfs2_holder gh;
2086 	loff_t ret;
2087 
2088 	inode_lock_shared(inode);
2089 	ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
2090 	if (!ret)
2091 		ret = iomap_seek_data(inode, offset, &gfs2_iomap_ops);
2092 	gfs2_glock_dq_uninit(&gh);
2093 	inode_unlock_shared(inode);
2094 
2095 	if (ret < 0)
2096 		return ret;
2097 	return vfs_setpos(file, ret, inode->i_sb->s_maxbytes);
2098 }
2099 
2100 loff_t gfs2_seek_hole(struct file *file, loff_t offset)
2101 {
2102 	struct inode *inode = file->f_mapping->host;
2103 	struct gfs2_inode *ip = GFS2_I(inode);
2104 	struct gfs2_holder gh;
2105 	loff_t ret;
2106 
2107 	inode_lock_shared(inode);
2108 	ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
2109 	if (!ret)
2110 		ret = iomap_seek_hole(inode, offset, &gfs2_iomap_ops);
2111 	gfs2_glock_dq_uninit(&gh);
2112 	inode_unlock_shared(inode);
2113 
2114 	if (ret < 0)
2115 		return ret;
2116 	return vfs_setpos(file, ret, inode->i_sb->s_maxbytes);
2117 }
2118 
2119 const struct inode_operations gfs2_file_iops = {
2120 	.permission = gfs2_permission,
2121 	.setattr = gfs2_setattr,
2122 	.getattr = gfs2_getattr,
2123 	.listxattr = gfs2_listxattr,
2124 	.fiemap = gfs2_fiemap,
2125 	.get_acl = gfs2_get_acl,
2126 	.set_acl = gfs2_set_acl,
2127 };
2128 
2129 const struct inode_operations gfs2_dir_iops = {
2130 	.create = gfs2_create,
2131 	.lookup = gfs2_lookup,
2132 	.link = gfs2_link,
2133 	.unlink = gfs2_unlink,
2134 	.symlink = gfs2_symlink,
2135 	.mkdir = gfs2_mkdir,
2136 	.rmdir = gfs2_unlink,
2137 	.mknod = gfs2_mknod,
2138 	.rename = gfs2_rename2,
2139 	.permission = gfs2_permission,
2140 	.setattr = gfs2_setattr,
2141 	.getattr = gfs2_getattr,
2142 	.listxattr = gfs2_listxattr,
2143 	.fiemap = gfs2_fiemap,
2144 	.get_acl = gfs2_get_acl,
2145 	.set_acl = gfs2_set_acl,
2146 	.atomic_open = gfs2_atomic_open,
2147 };
2148 
2149 const struct inode_operations gfs2_symlink_iops = {
2150 	.get_link = gfs2_get_link,
2151 	.permission = gfs2_permission,
2152 	.setattr = gfs2_setattr,
2153 	.getattr = gfs2_getattr,
2154 	.listxattr = gfs2_listxattr,
2155 	.fiemap = gfs2_fiemap,
2156 };
2157 
2158