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