xref: /openbmc/linux/fs/gfs2/inode.c (revision 4f56110a)
1 /*
2  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
3  * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
4  *
5  * This copyrighted material is made available to anyone wishing to use,
6  * modify, copy, or redistribute it subject to the terms and conditions
7  * of the GNU General Public License version 2.
8  */
9 
10 #include <linux/sched.h>
11 #include <linux/slab.h>
12 #include <linux/spinlock.h>
13 #include <linux/completion.h>
14 #include <linux/buffer_head.h>
15 #include <linux/posix_acl.h>
16 #include <linux/sort.h>
17 #include <linux/gfs2_ondisk.h>
18 #include <linux/crc32.h>
19 #include <linux/lm_interface.h>
20 #include <linux/security.h>
21 
22 #include "gfs2.h"
23 #include "incore.h"
24 #include "acl.h"
25 #include "bmap.h"
26 #include "dir.h"
27 #include "eattr.h"
28 #include "glock.h"
29 #include "glops.h"
30 #include "inode.h"
31 #include "log.h"
32 #include "meta_io.h"
33 #include "ops_address.h"
34 #include "ops_file.h"
35 #include "ops_inode.h"
36 #include "quota.h"
37 #include "rgrp.h"
38 #include "trans.h"
39 #include "util.h"
40 
41 /**
42  * gfs2_inode_attr_in - Copy attributes from the dinode into the VFS inode
43  * @ip: The GFS2 inode (with embedded disk inode data)
44  * @inode:  The Linux VFS inode
45  *
46  */
47 
48 void gfs2_inode_attr_in(struct gfs2_inode *ip)
49 {
50 	struct inode *inode = &ip->i_inode;
51 	struct gfs2_dinode_host *di = &ip->i_di;
52 
53 	inode->i_ino = ip->i_num.no_addr;
54 	i_size_write(inode, di->di_size);
55 	inode->i_atime.tv_sec = di->di_atime;
56 	inode->i_mtime.tv_sec = di->di_mtime;
57 	inode->i_ctime.tv_sec = di->di_ctime;
58 	inode->i_atime.tv_nsec = 0;
59 	inode->i_mtime.tv_nsec = 0;
60 	inode->i_ctime.tv_nsec = 0;
61 	inode->i_blocks = di->di_blocks <<
62 		(GFS2_SB(inode)->sd_sb.sb_bsize_shift - GFS2_BASIC_BLOCK_SHIFT);
63 
64 	if (di->di_flags & GFS2_DIF_IMMUTABLE)
65 		inode->i_flags |= S_IMMUTABLE;
66 	else
67 		inode->i_flags &= ~S_IMMUTABLE;
68 
69 	if (di->di_flags & GFS2_DIF_APPENDONLY)
70 		inode->i_flags |= S_APPEND;
71 	else
72 		inode->i_flags &= ~S_APPEND;
73 }
74 
75 /**
76  * gfs2_inode_attr_out - Copy attributes from VFS inode into the dinode
77  * @ip: The GFS2 inode
78  *
79  * Only copy out the attributes that we want the VFS layer
80  * to be able to modify.
81  */
82 
83 void gfs2_inode_attr_out(struct gfs2_inode *ip)
84 {
85 	struct inode *inode = &ip->i_inode;
86 	struct gfs2_dinode_host *di = &ip->i_di;
87 	di->di_atime = inode->i_atime.tv_sec;
88 	di->di_mtime = inode->i_mtime.tv_sec;
89 	di->di_ctime = inode->i_ctime.tv_sec;
90 }
91 
92 static int iget_test(struct inode *inode, void *opaque)
93 {
94 	struct gfs2_inode *ip = GFS2_I(inode);
95 	struct gfs2_inum_host *inum = opaque;
96 
97 	if (ip && ip->i_num.no_addr == inum->no_addr)
98 		return 1;
99 
100 	return 0;
101 }
102 
103 static int iget_set(struct inode *inode, void *opaque)
104 {
105 	struct gfs2_inode *ip = GFS2_I(inode);
106 	struct gfs2_inum_host *inum = opaque;
107 
108 	ip->i_num = *inum;
109 	return 0;
110 }
111 
112 struct inode *gfs2_ilookup(struct super_block *sb, struct gfs2_inum_host *inum)
113 {
114 	return ilookup5(sb, (unsigned long)inum->no_formal_ino,
115 			iget_test, inum);
116 }
117 
118 static struct inode *gfs2_iget(struct super_block *sb, struct gfs2_inum_host *inum)
119 {
120 	return iget5_locked(sb, (unsigned long)inum->no_formal_ino,
121 		     iget_test, iget_set, inum);
122 }
123 
124 /**
125  * gfs2_inode_lookup - Lookup an inode
126  * @sb: The super block
127  * @inum: The inode number
128  * @type: The type of the inode
129  *
130  * Returns: A VFS inode, or an error
131  */
132 
133 struct inode *gfs2_inode_lookup(struct super_block *sb, struct gfs2_inum_host *inum, unsigned int type)
134 {
135 	struct inode *inode = gfs2_iget(sb, inum);
136 	struct gfs2_inode *ip = GFS2_I(inode);
137 	struct gfs2_glock *io_gl;
138 	int error;
139 
140 	if (!inode)
141 		return ERR_PTR(-ENOBUFS);
142 
143 	if (inode->i_state & I_NEW) {
144 		struct gfs2_sbd *sdp = GFS2_SB(inode);
145 		umode_t mode = DT2IF(type);
146 		inode->i_private = ip;
147 		inode->i_mode = mode;
148 
149 		if (S_ISREG(mode)) {
150 			inode->i_op = &gfs2_file_iops;
151 			inode->i_fop = &gfs2_file_fops;
152 			inode->i_mapping->a_ops = &gfs2_file_aops;
153 		} else if (S_ISDIR(mode)) {
154 			inode->i_op = &gfs2_dir_iops;
155 			inode->i_fop = &gfs2_dir_fops;
156 		} else if (S_ISLNK(mode)) {
157 			inode->i_op = &gfs2_symlink_iops;
158 		} else {
159 			inode->i_op = &gfs2_dev_iops;
160 		}
161 
162 		error = gfs2_glock_get(sdp, inum->no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl);
163 		if (unlikely(error))
164 			goto fail;
165 		ip->i_gl->gl_object = ip;
166 
167 		error = gfs2_glock_get(sdp, inum->no_addr, &gfs2_iopen_glops, CREATE, &io_gl);
168 		if (unlikely(error))
169 			goto fail_put;
170 
171 		ip->i_vn = ip->i_gl->gl_vn - 1;
172 		error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh);
173 		if (unlikely(error))
174 			goto fail_iopen;
175 
176 		gfs2_glock_put(io_gl);
177 		unlock_new_inode(inode);
178 	}
179 
180 	return inode;
181 fail_iopen:
182 	gfs2_glock_put(io_gl);
183 fail_put:
184 	ip->i_gl->gl_object = NULL;
185 	gfs2_glock_put(ip->i_gl);
186 fail:
187 	iput(inode);
188 	return ERR_PTR(error);
189 }
190 
191 static int gfs2_dinode_in(struct gfs2_inode *ip, const void *buf)
192 {
193 	struct gfs2_dinode_host *di = &ip->i_di;
194 	const struct gfs2_dinode *str = buf;
195 
196 	if (ip->i_num.no_addr != be64_to_cpu(str->di_num.no_addr)) {
197 		if (gfs2_consist_inode(ip))
198 			gfs2_dinode_print(ip);
199 		return -EIO;
200 	}
201 	if (ip->i_num.no_formal_ino != be64_to_cpu(str->di_num.no_formal_ino))
202 		return -ESTALE;
203 
204 	ip->i_inode.i_mode = be32_to_cpu(str->di_mode);
205 	ip->i_inode.i_rdev = 0;
206 	switch (ip->i_inode.i_mode & S_IFMT) {
207 	case S_IFBLK:
208 	case S_IFCHR:
209 		ip->i_inode.i_rdev = MKDEV(be32_to_cpu(str->di_major),
210 					   be32_to_cpu(str->di_minor));
211 		break;
212 	};
213 
214 	ip->i_inode.i_uid = be32_to_cpu(str->di_uid);
215 	ip->i_inode.i_gid = be32_to_cpu(str->di_gid);
216 	/*
217 	 * We will need to review setting the nlink count here in the
218 	 * light of the forthcoming ro bind mount work. This is a reminder
219 	 * to do that.
220 	 */
221 	ip->i_inode.i_nlink = be32_to_cpu(str->di_nlink);
222 	di->di_size = be64_to_cpu(str->di_size);
223 	di->di_blocks = be64_to_cpu(str->di_blocks);
224 	di->di_atime = be64_to_cpu(str->di_atime);
225 	di->di_mtime = be64_to_cpu(str->di_mtime);
226 	di->di_ctime = be64_to_cpu(str->di_ctime);
227 
228 	di->di_goal_meta = be64_to_cpu(str->di_goal_meta);
229 	di->di_goal_data = be64_to_cpu(str->di_goal_data);
230 	di->di_generation = be64_to_cpu(str->di_generation);
231 
232 	di->di_flags = be32_to_cpu(str->di_flags);
233 	di->di_payload_format = be32_to_cpu(str->di_payload_format);
234 	di->di_height = be16_to_cpu(str->di_height);
235 
236 	di->di_depth = be16_to_cpu(str->di_depth);
237 	di->di_entries = be32_to_cpu(str->di_entries);
238 
239 	di->di_eattr = be64_to_cpu(str->di_eattr);
240 	return 0;
241 }
242 
243 /**
244  * gfs2_inode_refresh - Refresh the incore copy of the dinode
245  * @ip: The GFS2 inode
246  *
247  * Returns: errno
248  */
249 
250 int gfs2_inode_refresh(struct gfs2_inode *ip)
251 {
252 	struct buffer_head *dibh;
253 	int error;
254 
255 	error = gfs2_meta_inode_buffer(ip, &dibh);
256 	if (error)
257 		return error;
258 
259 	if (gfs2_metatype_check(GFS2_SB(&ip->i_inode), dibh, GFS2_METATYPE_DI)) {
260 		brelse(dibh);
261 		return -EIO;
262 	}
263 
264 	error = gfs2_dinode_in(ip, dibh->b_data);
265 	brelse(dibh);
266 	ip->i_vn = ip->i_gl->gl_vn;
267 
268 	return error;
269 }
270 
271 int gfs2_dinode_dealloc(struct gfs2_inode *ip)
272 {
273 	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
274 	struct gfs2_alloc *al;
275 	struct gfs2_rgrpd *rgd;
276 	int error;
277 
278 	if (ip->i_di.di_blocks != 1) {
279 		if (gfs2_consist_inode(ip))
280 			gfs2_dinode_print(ip);
281 		return -EIO;
282 	}
283 
284 	al = gfs2_alloc_get(ip);
285 
286 	error = gfs2_quota_hold(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
287 	if (error)
288 		goto out;
289 
290 	error = gfs2_rindex_hold(sdp, &al->al_ri_gh);
291 	if (error)
292 		goto out_qs;
293 
294 	rgd = gfs2_blk2rgrpd(sdp, ip->i_num.no_addr);
295 	if (!rgd) {
296 		gfs2_consist_inode(ip);
297 		error = -EIO;
298 		goto out_rindex_relse;
299 	}
300 
301 	error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0,
302 				   &al->al_rgd_gh);
303 	if (error)
304 		goto out_rindex_relse;
305 
306 	error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_STATFS + RES_QUOTA, 1);
307 	if (error)
308 		goto out_rg_gunlock;
309 
310 	gfs2_trans_add_gl(ip->i_gl);
311 
312 	gfs2_free_di(rgd, ip);
313 
314 	gfs2_trans_end(sdp);
315 	clear_bit(GLF_STICKY, &ip->i_gl->gl_flags);
316 
317 out_rg_gunlock:
318 	gfs2_glock_dq_uninit(&al->al_rgd_gh);
319 out_rindex_relse:
320 	gfs2_glock_dq_uninit(&al->al_ri_gh);
321 out_qs:
322 	gfs2_quota_unhold(ip);
323 out:
324 	gfs2_alloc_put(ip);
325 	return error;
326 }
327 
328 /**
329  * gfs2_change_nlink - Change nlink count on inode
330  * @ip: The GFS2 inode
331  * @diff: The change in the nlink count required
332  *
333  * Returns: errno
334  */
335 
336 int gfs2_change_nlink(struct gfs2_inode *ip, int diff)
337 {
338 	struct gfs2_sbd *sdp = ip->i_inode.i_sb->s_fs_info;
339 	struct buffer_head *dibh;
340 	u32 nlink;
341 	int error;
342 
343 	BUG_ON(diff != 1 && diff != -1);
344 	nlink = ip->i_inode.i_nlink + diff;
345 
346 	/* If we are reducing the nlink count, but the new value ends up being
347 	   bigger than the old one, we must have underflowed. */
348 	if (diff < 0 && nlink > ip->i_inode.i_nlink) {
349 		if (gfs2_consist_inode(ip))
350 			gfs2_dinode_print(ip);
351 		return -EIO;
352 	}
353 
354 	error = gfs2_meta_inode_buffer(ip, &dibh);
355 	if (error)
356 		return error;
357 
358 	if (diff > 0)
359 		inc_nlink(&ip->i_inode);
360 	else
361 		drop_nlink(&ip->i_inode);
362 
363 	ip->i_di.di_ctime = get_seconds();
364 
365 	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
366 	gfs2_dinode_out(ip, dibh->b_data);
367 	brelse(dibh);
368 	mark_inode_dirty(&ip->i_inode);
369 
370 	if (ip->i_inode.i_nlink == 0) {
371 		struct gfs2_rgrpd *rgd;
372 		struct gfs2_holder ri_gh, rg_gh;
373 
374 		error = gfs2_rindex_hold(sdp, &ri_gh);
375 		if (error)
376 			goto out;
377 		error = -EIO;
378 		rgd = gfs2_blk2rgrpd(sdp, ip->i_num.no_addr);
379 		if (!rgd)
380 			goto out_norgrp;
381 		error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &rg_gh);
382 		if (error)
383 			goto out_norgrp;
384 
385 		gfs2_unlink_di(&ip->i_inode); /* mark inode unlinked */
386 		gfs2_glock_dq_uninit(&rg_gh);
387 out_norgrp:
388 		gfs2_glock_dq_uninit(&ri_gh);
389 	}
390 out:
391 	return error;
392 }
393 
394 struct inode *gfs2_lookup_simple(struct inode *dip, const char *name)
395 {
396 	struct qstr qstr;
397 	gfs2_str2qstr(&qstr, name);
398 	return gfs2_lookupi(dip, &qstr, 1, NULL);
399 }
400 
401 
402 /**
403  * gfs2_lookupi - Look up a filename in a directory and return its inode
404  * @d_gh: An initialized holder for the directory glock
405  * @name: The name of the inode to look for
406  * @is_root: If 1, ignore the caller's permissions
407  * @i_gh: An uninitialized holder for the new inode glock
408  *
409  * There will always be a vnode (Linux VFS inode) for the d_gh inode unless
410  * @is_root is true.
411  *
412  * Returns: errno
413  */
414 
415 struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
416 			   int is_root, struct nameidata *nd)
417 {
418 	struct super_block *sb = dir->i_sb;
419 	struct gfs2_inode *dip = GFS2_I(dir);
420 	struct gfs2_holder d_gh;
421 	struct gfs2_inum_host inum;
422 	unsigned int type;
423 	int error = 0;
424 	struct inode *inode = NULL;
425 
426 	if (!name->len || name->len > GFS2_FNAMESIZE)
427 		return ERR_PTR(-ENAMETOOLONG);
428 
429 	if ((name->len == 1 && memcmp(name->name, ".", 1) == 0) ||
430 	    (name->len == 2 && memcmp(name->name, "..", 2) == 0 &&
431 	     dir == sb->s_root->d_inode)) {
432 		igrab(dir);
433 		return dir;
434 	}
435 
436 	error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh);
437 	if (error)
438 		return ERR_PTR(error);
439 
440 	if (!is_root) {
441 		error = permission(dir, MAY_EXEC, NULL);
442 		if (error)
443 			goto out;
444 	}
445 
446 	error = gfs2_dir_search(dir, name, &inum, &type);
447 	if (error)
448 		goto out;
449 
450 	inode = gfs2_inode_lookup(sb, &inum, type);
451 
452 out:
453 	gfs2_glock_dq_uninit(&d_gh);
454 	if (error == -ENOENT)
455 		return NULL;
456 	return inode;
457 }
458 
459 static int pick_formal_ino_1(struct gfs2_sbd *sdp, u64 *formal_ino)
460 {
461 	struct gfs2_inode *ip = GFS2_I(sdp->sd_ir_inode);
462 	struct buffer_head *bh;
463 	struct gfs2_inum_range_host ir;
464 	int error;
465 
466 	error = gfs2_trans_begin(sdp, RES_DINODE, 0);
467 	if (error)
468 		return error;
469 	mutex_lock(&sdp->sd_inum_mutex);
470 
471 	error = gfs2_meta_inode_buffer(ip, &bh);
472 	if (error) {
473 		mutex_unlock(&sdp->sd_inum_mutex);
474 		gfs2_trans_end(sdp);
475 		return error;
476 	}
477 
478 	gfs2_inum_range_in(&ir, bh->b_data + sizeof(struct gfs2_dinode));
479 
480 	if (ir.ir_length) {
481 		*formal_ino = ir.ir_start++;
482 		ir.ir_length--;
483 		gfs2_trans_add_bh(ip->i_gl, bh, 1);
484 		gfs2_inum_range_out(&ir,
485 				    bh->b_data + sizeof(struct gfs2_dinode));
486 		brelse(bh);
487 		mutex_unlock(&sdp->sd_inum_mutex);
488 		gfs2_trans_end(sdp);
489 		return 0;
490 	}
491 
492 	brelse(bh);
493 
494 	mutex_unlock(&sdp->sd_inum_mutex);
495 	gfs2_trans_end(sdp);
496 
497 	return 1;
498 }
499 
500 static int pick_formal_ino_2(struct gfs2_sbd *sdp, u64 *formal_ino)
501 {
502 	struct gfs2_inode *ip = GFS2_I(sdp->sd_ir_inode);
503 	struct gfs2_inode *m_ip = GFS2_I(sdp->sd_inum_inode);
504 	struct gfs2_holder gh;
505 	struct buffer_head *bh;
506 	struct gfs2_inum_range_host ir;
507 	int error;
508 
509 	error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
510 	if (error)
511 		return error;
512 
513 	error = gfs2_trans_begin(sdp, 2 * RES_DINODE, 0);
514 	if (error)
515 		goto out;
516 	mutex_lock(&sdp->sd_inum_mutex);
517 
518 	error = gfs2_meta_inode_buffer(ip, &bh);
519 	if (error)
520 		goto out_end_trans;
521 
522 	gfs2_inum_range_in(&ir, bh->b_data + sizeof(struct gfs2_dinode));
523 
524 	if (!ir.ir_length) {
525 		struct buffer_head *m_bh;
526 		u64 x, y;
527 		__be64 z;
528 
529 		error = gfs2_meta_inode_buffer(m_ip, &m_bh);
530 		if (error)
531 			goto out_brelse;
532 
533 		z = *(__be64 *)(m_bh->b_data + sizeof(struct gfs2_dinode));
534 		x = y = be64_to_cpu(z);
535 		ir.ir_start = x;
536 		ir.ir_length = GFS2_INUM_QUANTUM;
537 		x += GFS2_INUM_QUANTUM;
538 		if (x < y)
539 			gfs2_consist_inode(m_ip);
540 		z = cpu_to_be64(x);
541 		gfs2_trans_add_bh(m_ip->i_gl, m_bh, 1);
542 		*(__be64 *)(m_bh->b_data + sizeof(struct gfs2_dinode)) = z;
543 
544 		brelse(m_bh);
545 	}
546 
547 	*formal_ino = ir.ir_start++;
548 	ir.ir_length--;
549 
550 	gfs2_trans_add_bh(ip->i_gl, bh, 1);
551 	gfs2_inum_range_out(&ir, bh->b_data + sizeof(struct gfs2_dinode));
552 
553 out_brelse:
554 	brelse(bh);
555 out_end_trans:
556 	mutex_unlock(&sdp->sd_inum_mutex);
557 	gfs2_trans_end(sdp);
558 out:
559 	gfs2_glock_dq_uninit(&gh);
560 	return error;
561 }
562 
563 static int pick_formal_ino(struct gfs2_sbd *sdp, u64 *inum)
564 {
565 	int error;
566 
567 	error = pick_formal_ino_1(sdp, inum);
568 	if (error <= 0)
569 		return error;
570 
571 	error = pick_formal_ino_2(sdp, inum);
572 
573 	return error;
574 }
575 
576 /**
577  * create_ok - OK to create a new on-disk inode here?
578  * @dip:  Directory in which dinode is to be created
579  * @name:  Name of new dinode
580  * @mode:
581  *
582  * Returns: errno
583  */
584 
585 static int create_ok(struct gfs2_inode *dip, const struct qstr *name,
586 		     unsigned int mode)
587 {
588 	int error;
589 
590 	error = permission(&dip->i_inode, MAY_WRITE | MAY_EXEC, NULL);
591 	if (error)
592 		return error;
593 
594 	/*  Don't create entries in an unlinked directory  */
595 	if (!dip->i_inode.i_nlink)
596 		return -EPERM;
597 
598 	error = gfs2_dir_search(&dip->i_inode, name, NULL, NULL);
599 	switch (error) {
600 	case -ENOENT:
601 		error = 0;
602 		break;
603 	case 0:
604 		return -EEXIST;
605 	default:
606 		return error;
607 	}
608 
609 	if (dip->i_di.di_entries == (u32)-1)
610 		return -EFBIG;
611 	if (S_ISDIR(mode) && dip->i_inode.i_nlink == (u32)-1)
612 		return -EMLINK;
613 
614 	return 0;
615 }
616 
617 static void munge_mode_uid_gid(struct gfs2_inode *dip, unsigned int *mode,
618 			       unsigned int *uid, unsigned int *gid)
619 {
620 	if (GFS2_SB(&dip->i_inode)->sd_args.ar_suiddir &&
621 	    (dip->i_inode.i_mode & S_ISUID) && dip->i_inode.i_uid) {
622 		if (S_ISDIR(*mode))
623 			*mode |= S_ISUID;
624 		else if (dip->i_inode.i_uid != current->fsuid)
625 			*mode &= ~07111;
626 		*uid = dip->i_inode.i_uid;
627 	} else
628 		*uid = current->fsuid;
629 
630 	if (dip->i_inode.i_mode & S_ISGID) {
631 		if (S_ISDIR(*mode))
632 			*mode |= S_ISGID;
633 		*gid = dip->i_inode.i_gid;
634 	} else
635 		*gid = current->fsgid;
636 }
637 
638 static int alloc_dinode(struct gfs2_inode *dip, struct gfs2_inum_host *inum,
639 			u64 *generation)
640 {
641 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
642 	int error;
643 
644 	gfs2_alloc_get(dip);
645 
646 	dip->i_alloc.al_requested = RES_DINODE;
647 	error = gfs2_inplace_reserve(dip);
648 	if (error)
649 		goto out;
650 
651 	error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_STATFS, 0);
652 	if (error)
653 		goto out_ipreserv;
654 
655 	inum->no_addr = gfs2_alloc_di(dip, generation);
656 
657 	gfs2_trans_end(sdp);
658 
659 out_ipreserv:
660 	gfs2_inplace_release(dip);
661 out:
662 	gfs2_alloc_put(dip);
663 	return error;
664 }
665 
666 /**
667  * init_dinode - Fill in a new dinode structure
668  * @dip: the directory this inode is being created in
669  * @gl: The glock covering the new inode
670  * @inum: the inode number
671  * @mode: the file permissions
672  * @uid:
673  * @gid:
674  *
675  */
676 
677 static void init_dinode(struct gfs2_inode *dip, struct gfs2_glock *gl,
678 			const struct gfs2_inum_host *inum, unsigned int mode,
679 			unsigned int uid, unsigned int gid,
680 			const u64 *generation, dev_t dev)
681 {
682 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
683 	struct gfs2_dinode *di;
684 	struct buffer_head *dibh;
685 
686 	dibh = gfs2_meta_new(gl, inum->no_addr);
687 	gfs2_trans_add_bh(gl, dibh, 1);
688 	gfs2_metatype_set(dibh, GFS2_METATYPE_DI, GFS2_FORMAT_DI);
689 	gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
690 	di = (struct gfs2_dinode *)dibh->b_data;
691 
692 	di->di_num.no_formal_ino = cpu_to_be64(inum->no_formal_ino);
693 	di->di_num.no_addr = cpu_to_be64(inum->no_addr);
694 	di->di_mode = cpu_to_be32(mode);
695 	di->di_uid = cpu_to_be32(uid);
696 	di->di_gid = cpu_to_be32(gid);
697 	di->di_nlink = cpu_to_be32(0);
698 	di->di_size = cpu_to_be64(0);
699 	di->di_blocks = cpu_to_be64(1);
700 	di->di_atime = di->di_mtime = di->di_ctime = cpu_to_be64(get_seconds());
701 	di->di_major = cpu_to_be32(MAJOR(dev));
702 	di->di_minor = cpu_to_be32(MINOR(dev));
703 	di->di_goal_meta = di->di_goal_data = cpu_to_be64(inum->no_addr);
704 	di->di_generation = cpu_to_be64(*generation);
705 	di->di_flags = cpu_to_be32(0);
706 
707 	if (S_ISREG(mode)) {
708 		if ((dip->i_di.di_flags & GFS2_DIF_INHERIT_JDATA) ||
709 		    gfs2_tune_get(sdp, gt_new_files_jdata))
710 			di->di_flags |= cpu_to_be32(GFS2_DIF_JDATA);
711 		if ((dip->i_di.di_flags & GFS2_DIF_INHERIT_DIRECTIO) ||
712 		    gfs2_tune_get(sdp, gt_new_files_directio))
713 			di->di_flags |= cpu_to_be32(GFS2_DIF_DIRECTIO);
714 	} else if (S_ISDIR(mode)) {
715 		di->di_flags |= cpu_to_be32(dip->i_di.di_flags &
716 					    GFS2_DIF_INHERIT_DIRECTIO);
717 		di->di_flags |= cpu_to_be32(dip->i_di.di_flags &
718 					    GFS2_DIF_INHERIT_JDATA);
719 	}
720 
721 	di->__pad1 = 0;
722 	di->di_payload_format = cpu_to_be32(0);
723 	di->di_height = cpu_to_be32(0);
724 	di->__pad2 = 0;
725 	di->__pad3 = 0;
726 	di->di_depth = cpu_to_be16(0);
727 	di->di_entries = cpu_to_be32(0);
728 	memset(&di->__pad4, 0, sizeof(di->__pad4));
729 	di->di_eattr = cpu_to_be64(0);
730 	memset(&di->di_reserved, 0, sizeof(di->di_reserved));
731 
732 	brelse(dibh);
733 }
734 
735 static int make_dinode(struct gfs2_inode *dip, struct gfs2_glock *gl,
736 		       unsigned int mode, const struct gfs2_inum_host *inum,
737 		       const u64 *generation, dev_t dev)
738 {
739 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
740 	unsigned int uid, gid;
741 	int error;
742 
743 	munge_mode_uid_gid(dip, &mode, &uid, &gid);
744 	gfs2_alloc_get(dip);
745 
746 	error = gfs2_quota_lock(dip, uid, gid);
747 	if (error)
748 		goto out;
749 
750 	error = gfs2_quota_check(dip, uid, gid);
751 	if (error)
752 		goto out_quota;
753 
754 	error = gfs2_trans_begin(sdp, RES_DINODE + RES_QUOTA, 0);
755 	if (error)
756 		goto out_quota;
757 
758 	init_dinode(dip, gl, inum, mode, uid, gid, generation, dev);
759 	gfs2_quota_change(dip, +1, uid, gid);
760 	gfs2_trans_end(sdp);
761 
762 out_quota:
763 	gfs2_quota_unlock(dip);
764 out:
765 	gfs2_alloc_put(dip);
766 	return error;
767 }
768 
769 static int link_dinode(struct gfs2_inode *dip, const struct qstr *name,
770 		       struct gfs2_inode *ip)
771 {
772 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
773 	struct gfs2_alloc *al;
774 	int alloc_required;
775 	struct buffer_head *dibh;
776 	int error;
777 
778 	al = gfs2_alloc_get(dip);
779 
780 	error = gfs2_quota_lock(dip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
781 	if (error)
782 		goto fail;
783 
784 	error = alloc_required = gfs2_diradd_alloc_required(&dip->i_inode, name);
785 	if (alloc_required < 0)
786 		goto fail;
787 	if (alloc_required) {
788 		error = gfs2_quota_check(dip, dip->i_inode.i_uid, dip->i_inode.i_gid);
789 		if (error)
790 			goto fail_quota_locks;
791 
792 		al->al_requested = sdp->sd_max_dirres;
793 
794 		error = gfs2_inplace_reserve(dip);
795 		if (error)
796 			goto fail_quota_locks;
797 
798 		error = gfs2_trans_begin(sdp, sdp->sd_max_dirres +
799 					 al->al_rgd->rd_ri.ri_length +
800 					 2 * RES_DINODE +
801 					 RES_STATFS + RES_QUOTA, 0);
802 		if (error)
803 			goto fail_ipreserv;
804 	} else {
805 		error = gfs2_trans_begin(sdp, RES_LEAF + 2 * RES_DINODE, 0);
806 		if (error)
807 			goto fail_quota_locks;
808 	}
809 
810 	error = gfs2_dir_add(&dip->i_inode, name, &ip->i_num, IF2DT(ip->i_inode.i_mode));
811 	if (error)
812 		goto fail_end_trans;
813 
814 	error = gfs2_meta_inode_buffer(ip, &dibh);
815 	if (error)
816 		goto fail_end_trans;
817 	ip->i_inode.i_nlink = 1;
818 	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
819 	gfs2_dinode_out(ip, dibh->b_data);
820 	brelse(dibh);
821 	return 0;
822 
823 fail_end_trans:
824 	gfs2_trans_end(sdp);
825 
826 fail_ipreserv:
827 	if (dip->i_alloc.al_rgd)
828 		gfs2_inplace_release(dip);
829 
830 fail_quota_locks:
831 	gfs2_quota_unlock(dip);
832 
833 fail:
834 	gfs2_alloc_put(dip);
835 	return error;
836 }
837 
838 static int gfs2_security_init(struct gfs2_inode *dip, struct gfs2_inode *ip)
839 {
840 	int err;
841 	size_t len;
842 	void *value;
843 	char *name;
844 	struct gfs2_ea_request er;
845 
846 	err = security_inode_init_security(&ip->i_inode, &dip->i_inode,
847 					   &name, &value, &len);
848 
849 	if (err) {
850 		if (err == -EOPNOTSUPP)
851 			return 0;
852 		return err;
853 	}
854 
855 	memset(&er, 0, sizeof(struct gfs2_ea_request));
856 
857 	er.er_type = GFS2_EATYPE_SECURITY;
858 	er.er_name = name;
859 	er.er_data = value;
860 	er.er_name_len = strlen(name);
861 	er.er_data_len = len;
862 
863 	err = gfs2_ea_set_i(ip, &er);
864 
865 	kfree(value);
866 	kfree(name);
867 
868 	return err;
869 }
870 
871 /**
872  * gfs2_createi - Create a new inode
873  * @ghs: An array of two holders
874  * @name: The name of the new file
875  * @mode: the permissions on the new inode
876  *
877  * @ghs[0] is an initialized holder for the directory
878  * @ghs[1] is the holder for the inode lock
879  *
880  * If the return value is not NULL, the glocks on both the directory and the new
881  * file are held.  A transaction has been started and an inplace reservation
882  * is held, as well.
883  *
884  * Returns: An inode
885  */
886 
887 struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name,
888 			   unsigned int mode, dev_t dev)
889 {
890 	struct inode *inode;
891 	struct gfs2_inode *dip = ghs->gh_gl->gl_object;
892 	struct inode *dir = &dip->i_inode;
893 	struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
894 	struct gfs2_inum_host inum;
895 	int error;
896 	u64 generation;
897 
898 	if (!name->len || name->len > GFS2_FNAMESIZE)
899 		return ERR_PTR(-ENAMETOOLONG);
900 
901 	gfs2_holder_reinit(LM_ST_EXCLUSIVE, 0, ghs);
902 	error = gfs2_glock_nq(ghs);
903 	if (error)
904 		goto fail;
905 
906 	error = create_ok(dip, name, mode);
907 	if (error)
908 		goto fail_gunlock;
909 
910 	error = pick_formal_ino(sdp, &inum.no_formal_ino);
911 	if (error)
912 		goto fail_gunlock;
913 
914 	error = alloc_dinode(dip, &inum, &generation);
915 	if (error)
916 		goto fail_gunlock;
917 
918 	if (inum.no_addr < dip->i_num.no_addr) {
919 		gfs2_glock_dq(ghs);
920 
921 		error = gfs2_glock_nq_num(sdp, inum.no_addr,
922 					  &gfs2_inode_glops, LM_ST_EXCLUSIVE,
923 					  GL_SKIP, ghs + 1);
924 		if (error) {
925 			return ERR_PTR(error);
926 		}
927 
928 		gfs2_holder_reinit(LM_ST_EXCLUSIVE, 0, ghs);
929 		error = gfs2_glock_nq(ghs);
930 		if (error) {
931 			gfs2_glock_dq_uninit(ghs + 1);
932 			return ERR_PTR(error);
933 		}
934 
935 		error = create_ok(dip, name, mode);
936 		if (error)
937 			goto fail_gunlock2;
938 	} else {
939 		error = gfs2_glock_nq_num(sdp, inum.no_addr,
940 					  &gfs2_inode_glops, LM_ST_EXCLUSIVE,
941 					  GL_SKIP, ghs + 1);
942 		if (error)
943 			goto fail_gunlock;
944 	}
945 
946 	error = make_dinode(dip, ghs[1].gh_gl, mode, &inum, &generation, dev);
947 	if (error)
948 		goto fail_gunlock2;
949 
950 	inode = gfs2_inode_lookup(dir->i_sb, &inum, IF2DT(mode));
951 	if (IS_ERR(inode))
952 		goto fail_gunlock2;
953 
954 	error = gfs2_inode_refresh(GFS2_I(inode));
955 	if (error)
956 		goto fail_iput;
957 
958 	error = gfs2_acl_create(dip, GFS2_I(inode));
959 	if (error)
960 		goto fail_iput;
961 
962 	error = gfs2_security_init(dip, GFS2_I(inode));
963 	if (error)
964 		goto fail_iput;
965 
966 	error = link_dinode(dip, name, GFS2_I(inode));
967 	if (error)
968 		goto fail_iput;
969 
970 	if (!inode)
971 		return ERR_PTR(-ENOMEM);
972 	return inode;
973 
974 fail_iput:
975 	iput(inode);
976 fail_gunlock2:
977 	gfs2_glock_dq_uninit(ghs + 1);
978 fail_gunlock:
979 	gfs2_glock_dq(ghs);
980 fail:
981 	return ERR_PTR(error);
982 }
983 
984 /**
985  * gfs2_rmdiri - Remove a directory
986  * @dip: The parent directory of the directory to be removed
987  * @name: The name of the directory to be removed
988  * @ip: The GFS2 inode of the directory to be removed
989  *
990  * Assumes Glocks on dip and ip are held
991  *
992  * Returns: errno
993  */
994 
995 int gfs2_rmdiri(struct gfs2_inode *dip, const struct qstr *name,
996 		struct gfs2_inode *ip)
997 {
998 	struct qstr dotname;
999 	int error;
1000 
1001 	if (ip->i_di.di_entries != 2) {
1002 		if (gfs2_consist_inode(ip))
1003 			gfs2_dinode_print(ip);
1004 		return -EIO;
1005 	}
1006 
1007 	error = gfs2_dir_del(dip, name);
1008 	if (error)
1009 		return error;
1010 
1011 	error = gfs2_change_nlink(dip, -1);
1012 	if (error)
1013 		return error;
1014 
1015 	gfs2_str2qstr(&dotname, ".");
1016 	error = gfs2_dir_del(ip, &dotname);
1017 	if (error)
1018 		return error;
1019 
1020 	gfs2_str2qstr(&dotname, "..");
1021 	error = gfs2_dir_del(ip, &dotname);
1022 	if (error)
1023 		return error;
1024 
1025 	/* It looks odd, but it really should be done twice */
1026 	error = gfs2_change_nlink(ip, -1);
1027 	if (error)
1028 		return error;
1029 
1030 	error = gfs2_change_nlink(ip, -1);
1031 	if (error)
1032 		return error;
1033 
1034 	return error;
1035 }
1036 
1037 /*
1038  * gfs2_unlink_ok - check to see that a inode is still in a directory
1039  * @dip: the directory
1040  * @name: the name of the file
1041  * @ip: the inode
1042  *
1043  * Assumes that the lock on (at least) @dip is held.
1044  *
1045  * Returns: 0 if the parent/child relationship is correct, errno if it isn't
1046  */
1047 
1048 int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
1049 		   struct gfs2_inode *ip)
1050 {
1051 	struct gfs2_inum_host inum;
1052 	unsigned int type;
1053 	int error;
1054 
1055 	if (IS_IMMUTABLE(&ip->i_inode) || IS_APPEND(&ip->i_inode))
1056 		return -EPERM;
1057 
1058 	if ((dip->i_inode.i_mode & S_ISVTX) &&
1059 	    dip->i_inode.i_uid != current->fsuid &&
1060 	    ip->i_inode.i_uid != current->fsuid && !capable(CAP_FOWNER))
1061 		return -EPERM;
1062 
1063 	if (IS_APPEND(&dip->i_inode))
1064 		return -EPERM;
1065 
1066 	error = permission(&dip->i_inode, MAY_WRITE | MAY_EXEC, NULL);
1067 	if (error)
1068 		return error;
1069 
1070 	error = gfs2_dir_search(&dip->i_inode, name, &inum, &type);
1071 	if (error)
1072 		return error;
1073 
1074 	if (!gfs2_inum_equal(&inum, &ip->i_num))
1075 		return -ENOENT;
1076 
1077 	if (IF2DT(ip->i_inode.i_mode) != type) {
1078 		gfs2_consist_inode(dip);
1079 		return -EIO;
1080 	}
1081 
1082 	return 0;
1083 }
1084 
1085 /*
1086  * gfs2_ok_to_move - check if it's ok to move a directory to another directory
1087  * @this: move this
1088  * @to: to here
1089  *
1090  * Follow @to back to the root and make sure we don't encounter @this
1091  * Assumes we already hold the rename lock.
1092  *
1093  * Returns: errno
1094  */
1095 
1096 int gfs2_ok_to_move(struct gfs2_inode *this, struct gfs2_inode *to)
1097 {
1098 	struct inode *dir = &to->i_inode;
1099 	struct super_block *sb = dir->i_sb;
1100 	struct inode *tmp;
1101 	struct qstr dotdot;
1102 	int error = 0;
1103 
1104 	gfs2_str2qstr(&dotdot, "..");
1105 
1106 	igrab(dir);
1107 
1108 	for (;;) {
1109 		if (dir == &this->i_inode) {
1110 			error = -EINVAL;
1111 			break;
1112 		}
1113 		if (dir == sb->s_root->d_inode) {
1114 			error = 0;
1115 			break;
1116 		}
1117 
1118 		tmp = gfs2_lookupi(dir, &dotdot, 1, NULL);
1119 		if (IS_ERR(tmp)) {
1120 			error = PTR_ERR(tmp);
1121 			break;
1122 		}
1123 
1124 		iput(dir);
1125 		dir = tmp;
1126 	}
1127 
1128 	iput(dir);
1129 
1130 	return error;
1131 }
1132 
1133 /**
1134  * gfs2_readlinki - return the contents of a symlink
1135  * @ip: the symlink's inode
1136  * @buf: a pointer to the buffer to be filled
1137  * @len: a pointer to the length of @buf
1138  *
1139  * If @buf is too small, a piece of memory is kmalloc()ed and needs
1140  * to be freed by the caller.
1141  *
1142  * Returns: errno
1143  */
1144 
1145 int gfs2_readlinki(struct gfs2_inode *ip, char **buf, unsigned int *len)
1146 {
1147 	struct gfs2_holder i_gh;
1148 	struct buffer_head *dibh;
1149 	unsigned int x;
1150 	int error;
1151 
1152 	gfs2_holder_init(ip->i_gl, LM_ST_SHARED, GL_ATIME, &i_gh);
1153 	error = gfs2_glock_nq_atime(&i_gh);
1154 	if (error) {
1155 		gfs2_holder_uninit(&i_gh);
1156 		return error;
1157 	}
1158 
1159 	if (!ip->i_di.di_size) {
1160 		gfs2_consist_inode(ip);
1161 		error = -EIO;
1162 		goto out;
1163 	}
1164 
1165 	error = gfs2_meta_inode_buffer(ip, &dibh);
1166 	if (error)
1167 		goto out;
1168 
1169 	x = ip->i_di.di_size + 1;
1170 	if (x > *len) {
1171 		*buf = kmalloc(x, GFP_KERNEL);
1172 		if (!*buf) {
1173 			error = -ENOMEM;
1174 			goto out_brelse;
1175 		}
1176 	}
1177 
1178 	memcpy(*buf, dibh->b_data + sizeof(struct gfs2_dinode), x);
1179 	*len = x;
1180 
1181 out_brelse:
1182 	brelse(dibh);
1183 out:
1184 	gfs2_glock_dq_uninit(&i_gh);
1185 	return error;
1186 }
1187 
1188 /**
1189  * gfs2_glock_nq_atime - Acquire a hold on an inode's glock, and
1190  *       conditionally update the inode's atime
1191  * @gh: the holder to acquire
1192  *
1193  * Tests atime (access time) for gfs2_read, gfs2_readdir and gfs2_mmap
1194  * Update if the difference between the current time and the inode's current
1195  * atime is greater than an interval specified at mount.
1196  *
1197  * Returns: errno
1198  */
1199 
1200 int gfs2_glock_nq_atime(struct gfs2_holder *gh)
1201 {
1202 	struct gfs2_glock *gl = gh->gh_gl;
1203 	struct gfs2_sbd *sdp = gl->gl_sbd;
1204 	struct gfs2_inode *ip = gl->gl_object;
1205 	s64 curtime, quantum = gfs2_tune_get(sdp, gt_atime_quantum);
1206 	unsigned int state;
1207 	int flags;
1208 	int error;
1209 
1210 	if (gfs2_assert_warn(sdp, gh->gh_flags & GL_ATIME) ||
1211 	    gfs2_assert_warn(sdp, !(gh->gh_flags & GL_ASYNC)) ||
1212 	    gfs2_assert_warn(sdp, gl->gl_ops == &gfs2_inode_glops))
1213 		return -EINVAL;
1214 
1215 	state = gh->gh_state;
1216 	flags = gh->gh_flags;
1217 
1218 	error = gfs2_glock_nq(gh);
1219 	if (error)
1220 		return error;
1221 
1222 	if (test_bit(SDF_NOATIME, &sdp->sd_flags) ||
1223 	    (sdp->sd_vfs->s_flags & MS_RDONLY))
1224 		return 0;
1225 
1226 	curtime = get_seconds();
1227 	if (curtime - ip->i_di.di_atime >= quantum) {
1228 		gfs2_glock_dq(gh);
1229 		gfs2_holder_reinit(LM_ST_EXCLUSIVE, gh->gh_flags & ~LM_FLAG_ANY,
1230 				   gh);
1231 		error = gfs2_glock_nq(gh);
1232 		if (error)
1233 			return error;
1234 
1235 		/* Verify that atime hasn't been updated while we were
1236 		   trying to get exclusive lock. */
1237 
1238 		curtime = get_seconds();
1239 		if (curtime - ip->i_di.di_atime >= quantum) {
1240 			struct buffer_head *dibh;
1241 			struct gfs2_dinode *di;
1242 
1243 			error = gfs2_trans_begin(sdp, RES_DINODE, 0);
1244 			if (error == -EROFS)
1245 				return 0;
1246 			if (error)
1247 				goto fail;
1248 
1249 			error = gfs2_meta_inode_buffer(ip, &dibh);
1250 			if (error)
1251 				goto fail_end_trans;
1252 
1253 			ip->i_di.di_atime = curtime;
1254 
1255 			gfs2_trans_add_bh(ip->i_gl, dibh, 1);
1256 			di = (struct gfs2_dinode *)dibh->b_data;
1257 			di->di_atime = cpu_to_be64(ip->i_di.di_atime);
1258 			brelse(dibh);
1259 
1260 			gfs2_trans_end(sdp);
1261 		}
1262 
1263 		/* If someone else has asked for the glock,
1264 		   unlock and let them have it. Then reacquire
1265 		   in the original state. */
1266 		if (gfs2_glock_is_blocking(gl)) {
1267 			gfs2_glock_dq(gh);
1268 			gfs2_holder_reinit(state, flags, gh);
1269 			return gfs2_glock_nq(gh);
1270 		}
1271 	}
1272 
1273 	return 0;
1274 
1275 fail_end_trans:
1276 	gfs2_trans_end(sdp);
1277 fail:
1278 	gfs2_glock_dq(gh);
1279 	return error;
1280 }
1281 
1282 /**
1283  * glock_compare_atime - Compare two struct gfs2_glock structures for sort
1284  * @arg_a: the first structure
1285  * @arg_b: the second structure
1286  *
1287  * Returns: 1 if A > B
1288  *         -1 if A < B
1289  *          0 if A == B
1290  */
1291 
1292 static int glock_compare_atime(const void *arg_a, const void *arg_b)
1293 {
1294 	const struct gfs2_holder *gh_a = *(const struct gfs2_holder **)arg_a;
1295 	const struct gfs2_holder *gh_b = *(const struct gfs2_holder **)arg_b;
1296 	const struct lm_lockname *a = &gh_a->gh_gl->gl_name;
1297 	const struct lm_lockname *b = &gh_b->gh_gl->gl_name;
1298 
1299 	if (a->ln_number > b->ln_number)
1300 		return 1;
1301 	if (a->ln_number < b->ln_number)
1302 		return -1;
1303 	if (gh_a->gh_state == LM_ST_SHARED && gh_b->gh_state == LM_ST_EXCLUSIVE)
1304 		return 1;
1305 	if (gh_a->gh_state == LM_ST_SHARED && (gh_b->gh_flags & GL_ATIME))
1306 		return 1;
1307 
1308 	return 0;
1309 }
1310 
1311 /**
1312  * gfs2_glock_nq_m_atime - acquire multiple glocks where one may need an
1313  *      atime update
1314  * @num_gh: the number of structures
1315  * @ghs: an array of struct gfs2_holder structures
1316  *
1317  * Returns: 0 on success (all glocks acquired),
1318  *          errno on failure (no glocks acquired)
1319  */
1320 
1321 int gfs2_glock_nq_m_atime(unsigned int num_gh, struct gfs2_holder *ghs)
1322 {
1323 	struct gfs2_holder **p;
1324 	unsigned int x;
1325 	int error = 0;
1326 
1327 	if (!num_gh)
1328 		return 0;
1329 
1330 	if (num_gh == 1) {
1331 		ghs->gh_flags &= ~(LM_FLAG_TRY | GL_ASYNC);
1332 		if (ghs->gh_flags & GL_ATIME)
1333 			error = gfs2_glock_nq_atime(ghs);
1334 		else
1335 			error = gfs2_glock_nq(ghs);
1336 		return error;
1337 	}
1338 
1339 	p = kcalloc(num_gh, sizeof(struct gfs2_holder *), GFP_KERNEL);
1340 	if (!p)
1341 		return -ENOMEM;
1342 
1343 	for (x = 0; x < num_gh; x++)
1344 		p[x] = &ghs[x];
1345 
1346 	sort(p, num_gh, sizeof(struct gfs2_holder *), glock_compare_atime,NULL);
1347 
1348 	for (x = 0; x < num_gh; x++) {
1349 		p[x]->gh_flags &= ~(LM_FLAG_TRY | GL_ASYNC);
1350 
1351 		if (p[x]->gh_flags & GL_ATIME)
1352 			error = gfs2_glock_nq_atime(p[x]);
1353 		else
1354 			error = gfs2_glock_nq(p[x]);
1355 
1356 		if (error) {
1357 			while (x--)
1358 				gfs2_glock_dq(p[x]);
1359 			break;
1360 		}
1361 	}
1362 
1363 	kfree(p);
1364 	return error;
1365 }
1366 
1367 
1368 static int
1369 __gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr)
1370 {
1371 	struct buffer_head *dibh;
1372 	int error;
1373 
1374 	error = gfs2_meta_inode_buffer(ip, &dibh);
1375 	if (!error) {
1376 		error = inode_setattr(&ip->i_inode, attr);
1377 		gfs2_assert_warn(GFS2_SB(&ip->i_inode), !error);
1378 		gfs2_inode_attr_out(ip);
1379 
1380 		gfs2_trans_add_bh(ip->i_gl, dibh, 1);
1381 		gfs2_dinode_out(ip, dibh->b_data);
1382 		brelse(dibh);
1383 	}
1384 	return error;
1385 }
1386 
1387 /**
1388  * gfs2_setattr_simple -
1389  * @ip:
1390  * @attr:
1391  *
1392  * Called with a reference on the vnode.
1393  *
1394  * Returns: errno
1395  */
1396 
1397 int gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr)
1398 {
1399 	int error;
1400 
1401 	if (current->journal_info)
1402 		return __gfs2_setattr_simple(ip, attr);
1403 
1404 	error = gfs2_trans_begin(GFS2_SB(&ip->i_inode), RES_DINODE, 0);
1405 	if (error)
1406 		return error;
1407 
1408 	error = __gfs2_setattr_simple(ip, attr);
1409 	gfs2_trans_end(GFS2_SB(&ip->i_inode));
1410 	return error;
1411 }
1412 
1413