Lines Matching +full:rcu +full:- +full:endian +full:- +full:offset
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
4 * Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved.
43 return GFS2_I(inode)->i_no_addr == no_addr; in iget_test()
50 GFS2_I(inode)->i_no_addr = no_addr; in iget_set()
51 inode->i_ino = no_addr; in iget_set()
71 * gfs2_set_iop - Sets inode operations
81 umode_t mode = inode->i_mode; in gfs2_set_iop()
84 inode->i_op = &gfs2_file_iops; in gfs2_set_iop()
86 inode->i_fop = &gfs2_file_fops_nolock; in gfs2_set_iop()
88 inode->i_fop = &gfs2_file_fops; in gfs2_set_iop()
90 inode->i_op = &gfs2_dir_iops; in gfs2_set_iop()
92 inode->i_fop = &gfs2_dir_fops_nolock; in gfs2_set_iop()
94 inode->i_fop = &gfs2_dir_fops; in gfs2_set_iop()
96 inode->i_op = &gfs2_symlink_iops; in gfs2_set_iop()
98 inode->i_op = &gfs2_file_iops; in gfs2_set_iop()
99 init_special_inode(inode, inode->i_mode, inode->i_rdev); in gfs2_set_iop()
104 * gfs2_inode_lookup - Lookup an inode
115 * placeholder because it doesn't otherwise make sense), the on-disk block type
118 * When @no_formal_ino is non-zero, this function will return ERR_PTR(-ESTALE)
138 return ERR_PTR(-ENOMEM); in gfs2_inode_lookup()
142 if (inode->i_state & I_NEW) { in gfs2_inode_lookup()
145 error = gfs2_glock_get(sdp, no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl); in gfs2_inode_lookup()
148 flush_delayed_work(&ip->i_gl->gl_work); in gfs2_inode_lookup()
162 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, in gfs2_inode_lookup()
167 error = -ESTALE; in gfs2_inode_lookup()
169 gfs2_inode_already_deleted(ip->i_gl, no_formal_ino)) in gfs2_inode_lookup()
180 glock_set_object(ip->i_gl, ip); in gfs2_inode_lookup()
181 set_bit(GIF_INVALID, &ip->i_flags); in gfs2_inode_lookup()
182 error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh); in gfs2_inode_lookup()
185 glock_set_object(ip->i_iopen_gh.gh_gl, ip); in gfs2_inode_lookup()
190 inode->i_atime.tv_sec = 1LL << (8 * sizeof(inode->i_atime.tv_sec) - 1); in gfs2_inode_lookup()
191 inode->i_atime.tv_nsec = 0; in gfs2_inode_lookup()
199 ip->i_no_formal_ino = no_formal_ino; in gfs2_inode_lookup()
200 inode->i_mode = DT2IF(type); in gfs2_inode_lookup()
209 if (no_formal_ino && ip->i_no_formal_ino && in gfs2_inode_lookup()
210 no_formal_ino != ip->i_no_formal_ino) { in gfs2_inode_lookup()
211 error = -ESTALE; in gfs2_inode_lookup()
212 if (inode->i_state & I_NEW) in gfs2_inode_lookup()
218 if (inode->i_state & I_NEW) in gfs2_inode_lookup()
233 * gfs2_lookup_by_inum - look up an inode by inode number
242 struct super_block *sb = sdp->sd_vfs; in gfs2_lookup_by_inum()
252 error = -EIO; in gfs2_lookup_by_inum()
253 if (GFS2_I(inode)->i_diskflags & GFS2_DIF_SYSTEM) in gfs2_lookup_by_inum()
276 return ERR_PTR(-ENOENT); in gfs2_lookup_simple()
283 * gfs2_lookupi - Look up a filename in a directory and return its inode
300 struct super_block *sb = dir->i_sb; in gfs2_lookupi()
307 if (!name->len || name->len > GFS2_FNAMESIZE) in gfs2_lookupi()
308 return ERR_PTR(-ENAMETOOLONG); in gfs2_lookupi()
310 if ((name->len == 1 && memcmp(name->name, ".", 1) == 0) || in gfs2_lookupi()
311 (name->len == 2 && memcmp(name->name, "..", 2) == 0 && in gfs2_lookupi()
312 dir == d_inode(sb->s_root))) { in gfs2_lookupi()
317 if (gfs2_glock_is_locked_by_me(dip->i_gl) == NULL) { in gfs2_lookupi()
318 error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh); in gfs2_lookupi()
335 if (error == -ENOENT) in gfs2_lookupi()
341 * create_ok - OK to create a new on-disk inode here?
354 error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC); in create_ok()
359 if (!dip->i_inode.i_nlink) in create_ok()
360 return -ENOENT; in create_ok()
362 if (dip->i_entries == (u32)-1) in create_ok()
363 return -EFBIG; in create_ok()
364 if (S_ISDIR(mode) && dip->i_inode.i_nlink == (u32)-1) in create_ok()
365 return -EMLINK; in create_ok()
373 if (GFS2_SB(&dip->i_inode)->sd_args.ar_suiddir && in munge_mode_uid_gid()
374 (dip->i_inode.i_mode & S_ISUID) && in munge_mode_uid_gid()
375 !uid_eq(dip->i_inode.i_uid, GLOBAL_ROOT_UID)) { in munge_mode_uid_gid()
376 if (S_ISDIR(inode->i_mode)) in munge_mode_uid_gid()
377 inode->i_mode |= S_ISUID; in munge_mode_uid_gid()
378 else if (!uid_eq(dip->i_inode.i_uid, current_fsuid())) in munge_mode_uid_gid()
379 inode->i_mode &= ~07111; in munge_mode_uid_gid()
380 inode->i_uid = dip->i_inode.i_uid; in munge_mode_uid_gid()
382 inode->i_uid = current_fsuid(); in munge_mode_uid_gid()
384 if (dip->i_inode.i_mode & S_ISGID) { in munge_mode_uid_gid()
385 if (S_ISDIR(inode->i_mode)) in munge_mode_uid_gid()
386 inode->i_mode |= S_ISGID; in munge_mode_uid_gid()
387 inode->i_gid = dip->i_inode.i_gid; in munge_mode_uid_gid()
389 inode->i_gid = current_fsgid(); in munge_mode_uid_gid()
394 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); in alloc_dinode()
410 error = gfs2_alloc_blocks(ip, &ip->i_no_addr, dblocks, 1, &ip->i_generation); in alloc_dinode()
411 ip->i_no_formal_ino = ip->i_generation; in alloc_dinode()
412 ip->i_inode.i_ino = ip->i_no_addr; in alloc_dinode()
413 ip->i_goal = ip->i_no_addr; in alloc_dinode()
428 struct gfs2_dinode *di = (struct gfs2_dinode *)dibh->b_data; in gfs2_init_dir()
432 dent->de_inum = di->di_num; /* already GFS2 endian */ in gfs2_init_dir()
433 dent->de_type = cpu_to_be16(DT_DIR); in gfs2_init_dir()
436 …gfs2_qstr2dirent(&gfs2_qdotdot, dibh->b_size - GFS2_DIRENT_SIZE(1) - sizeof(struct gfs2_dinode), d… in gfs2_init_dir()
438 dent->de_type = cpu_to_be16(DT_DIR); in gfs2_init_dir()
443 * gfs2_init_xattr - Initialise an xattr block for a new inode
452 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); in gfs2_init_xattr()
456 bh = gfs2_meta_new(ip->i_gl, ip->i_eattr); in gfs2_init_xattr()
457 gfs2_trans_add_meta(ip->i_gl, bh); in gfs2_init_xattr()
462 ea->ea_rec_len = cpu_to_be32(sdp->sd_jbsize); in gfs2_init_xattr()
463 ea->ea_type = GFS2_EATYPE_UNUSED; in gfs2_init_xattr()
464 ea->ea_flags = GFS2_EAFLAG_LAST; in gfs2_init_xattr()
470 * init_dinode - Fill in a new dinode structure
484 dibh = gfs2_meta_new(ip->i_gl, ip->i_no_addr); in init_dinode()
485 gfs2_trans_add_meta(ip->i_gl, dibh); in init_dinode()
486 di = (struct gfs2_dinode *)dibh->b_data; in init_dinode()
489 di->di_major = cpu_to_be32(MAJOR(ip->i_inode.i_rdev)); in init_dinode()
490 di->di_minor = cpu_to_be32(MINOR(ip->i_inode.i_rdev)); in init_dinode()
491 di->__pad1 = 0; in init_dinode()
492 di->__pad2 = 0; in init_dinode()
493 di->__pad3 = 0; in init_dinode()
494 memset(&di->__pad4, 0, sizeof(di->__pad4)); in init_dinode()
495 memset(&di->di_reserved, 0, sizeof(di->di_reserved)); in init_dinode()
498 switch(ip->i_inode.i_mode & S_IFMT) { in init_dinode()
503 memcpy(dibh->b_data + sizeof(struct gfs2_dinode), symname, ip->i_inode.i_size); in init_dinode()
512 * gfs2_trans_da_blocks - Calculate number of blocks to link inode
529 return da->nr_blocks + gfs2_rg_blocks(dip, da->nr_blocks) + in gfs2_trans_da_blks()
536 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); in link_dinode()
537 struct gfs2_alloc_parms ap = { .target = da->nr_blocks, }; in link_dinode()
540 if (da->nr_blocks) { in link_dinode()
558 error = gfs2_dir_add(&dip->i_inode, name, ip, da); in link_dinode()
574 for (xattr = xattr_array; xattr->name != NULL; xattr++) { in gfs2_initxattrs()
575 err = __gfs2_xattr_set(inode, xattr->name, xattr->value, in gfs2_initxattrs()
576 xattr->value_len, 0, in gfs2_initxattrs()
585 * gfs2_create_inode - Create a new inode
588 * @file: If non-NULL, the file which is being opened
602 const struct qstr *name = &dentry->d_name; in gfs2_create_inode()
607 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); in gfs2_create_inode()
614 if (!name->len || name->len > GFS2_FNAMESIZE) in gfs2_create_inode()
615 return -ENAMETOOLONG; in gfs2_create_inode()
625 error = gfs2_glock_nq_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs); in gfs2_create_inode()
634 inode = gfs2_dir_search(dir, &dentry->d_name, !S_ISREG(mode) || excl); in gfs2_create_inode()
637 if (S_ISDIR(inode->i_mode)) { in gfs2_create_inode()
639 inode = ERR_PTR(-EISDIR); in gfs2_create_inode()
645 if (S_ISREG(inode->i_mode)) in gfs2_create_inode()
652 } else if (error != -ENOENT) { in gfs2_create_inode()
660 inode = new_inode(sdp->sd_vfs); in gfs2_create_inode()
661 error = -ENOMEM; in gfs2_create_inode()
674 inode->i_mode = mode; in gfs2_create_inode()
676 inode->i_rdev = dev; in gfs2_create_inode()
677 inode->i_size = size; in gfs2_create_inode()
678 inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode); in gfs2_create_inode()
681 ip->i_goal = dip->i_goal; in gfs2_create_inode()
682 ip->i_diskflags = 0; in gfs2_create_inode()
683 ip->i_eattr = 0; in gfs2_create_inode()
684 ip->i_height = 0; in gfs2_create_inode()
685 ip->i_depth = 0; in gfs2_create_inode()
686 ip->i_entries = 0; in gfs2_create_inode()
687 ip->i_no_addr = 0; /* Temporarily zero until real addr is assigned */ in gfs2_create_inode()
691 if ((dip->i_diskflags & GFS2_DIF_INHERIT_JDATA) || in gfs2_create_inode()
693 ip->i_diskflags |= GFS2_DIF_JDATA; in gfs2_create_inode()
697 ip->i_diskflags |= (dip->i_diskflags & GFS2_DIF_INHERIT_JDATA); in gfs2_create_inode()
698 ip->i_diskflags |= GFS2_DIF_JDATA; in gfs2_create_inode()
699 ip->i_entries = 2; in gfs2_create_inode()
704 if (dip->i_diskflags & GFS2_DIF_SYSTEM) in gfs2_create_inode()
705 ip->i_diskflags |= GFS2_DIF_SYSTEM; in gfs2_create_inode()
709 if ((GFS2_I(d_inode(sdp->sd_root_dir)) == dip) || in gfs2_create_inode()
710 (dip->i_diskflags & GFS2_DIF_TOPDIR)) in gfs2_create_inode()
722 error = gfs2_glock_get(sdp, ip->i_no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl); in gfs2_create_inode()
725 flush_delayed_work(&ip->i_gl->gl_work); in gfs2_create_inode()
726 glock_set_object(ip->i_gl, ip); in gfs2_create_inode()
728 error = gfs2_glock_get(sdp, ip->i_no_addr, &gfs2_iopen_glops, CREATE, &io_gl); in gfs2_create_inode()
734 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, ghs + 1); in gfs2_create_inode()
743 ip->i_eattr = ip->i_no_addr + 1; in gfs2_create_inode()
749 BUG_ON(test_and_set_bit(GLF_INODE_CREATING, &io_gl->gl_flags)); in gfs2_create_inode()
751 error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh); in gfs2_create_inode()
776 error = security_inode_init_security(&ip->i_inode, &dip->i_inode, name, in gfs2_create_inode()
790 file->f_mode |= FMODE_CREATED; in gfs2_create_inode()
796 clear_bit(GLF_INODE_CREATING, &io_gl->gl_flags); in gfs2_create_inode()
803 gfs2_glock_dq_uninit(&ip->i_iopen_gh); in gfs2_create_inode()
805 clear_bit(GLF_INODE_CREATING, &io_gl->gl_flags); in gfs2_create_inode()
809 if (ip->i_gl) { in gfs2_create_inode()
810 glock_clear_object(ip->i_gl, ip); in gfs2_create_inode()
812 gfs2_glock_put(ip->i_gl); in gfs2_create_inode()
814 gfs2_rs_deltree(&ip->i_res); in gfs2_create_inode()
827 &GFS2_I(inode)->i_flags); in gfs2_create_inode()
838 * gfs2_create - Create a file
853 * __gfs2_lookup - Look up a filename in a directory and return its inode
871 inode = gfs2_lookupi(dir, &dentry->d_name, 0); in __gfs2_lookup()
879 gl = GFS2_I(inode)->i_gl; in __gfs2_lookup()
891 if (file && S_ISREG(inode->i_mode)) in __gfs2_lookup()
909 * gfs2_link - Link to a file
932 if (S_ISDIR(inode->i_mode)) in gfs2_link()
933 return -EPERM; in gfs2_link()
939 gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs); in gfs2_link()
940 gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1); in gfs2_link()
950 error = -ENOENT; in gfs2_link()
951 if (inode->i_nlink == 0) in gfs2_link()
958 error = gfs2_dir_check(dir, &dentry->d_name, NULL); in gfs2_link()
960 case -ENOENT: in gfs2_link()
963 error = -EEXIST; in gfs2_link()
968 error = -EINVAL; in gfs2_link()
969 if (!dip->i_inode.i_nlink) in gfs2_link()
971 error = -EFBIG; in gfs2_link()
972 if (dip->i_entries == (u32)-1) in gfs2_link()
974 error = -EPERM; in gfs2_link()
977 error = -EINVAL; in gfs2_link()
978 if (!ip->i_inode.i_nlink) in gfs2_link()
980 error = -EMLINK; in gfs2_link()
981 if (ip->i_inode.i_nlink == (u32)-1) in gfs2_link()
984 error = gfs2_diradd_alloc_required(dir, &dentry->d_name, &da); in gfs2_link()
1011 error = gfs2_dir_add(dir, &dentry->d_name, ip, &da); in gfs2_link()
1015 gfs2_trans_add_meta(ip->i_gl, dibh); in gfs2_link()
1016 inc_nlink(&ip->i_inode); in gfs2_link()
1017 ip->i_inode.i_ctime = current_time(&ip->i_inode); in gfs2_link()
1045 * gfs2_unlink_ok - check to see that a inode is still in a directory
1060 if (IS_IMMUTABLE(&ip->i_inode) || IS_APPEND(&ip->i_inode)) in gfs2_unlink_ok()
1061 return -EPERM; in gfs2_unlink_ok()
1063 if ((dip->i_inode.i_mode & S_ISVTX) && in gfs2_unlink_ok()
1064 !uid_eq(dip->i_inode.i_uid, current_fsuid()) && in gfs2_unlink_ok()
1065 !uid_eq(ip->i_inode.i_uid, current_fsuid()) && !capable(CAP_FOWNER)) in gfs2_unlink_ok()
1066 return -EPERM; in gfs2_unlink_ok()
1068 if (IS_APPEND(&dip->i_inode)) in gfs2_unlink_ok()
1069 return -EPERM; in gfs2_unlink_ok()
1071 error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC); in gfs2_unlink_ok()
1075 return gfs2_dir_check(&dip->i_inode, name, ip); in gfs2_unlink_ok()
1079 * gfs2_unlink_inode - Removes an inode from its parent dir and unlinks it
1101 ip->i_entries = 0; in gfs2_unlink_inode()
1102 inode->i_ctime = current_time(inode); in gfs2_unlink_inode()
1103 if (S_ISDIR(inode->i_mode)) in gfs2_unlink_inode()
1108 if (inode->i_nlink == 0) in gfs2_unlink_inode()
1115 * gfs2_unlink - Unlink an inode (this does rmdir as well)
1139 error = -EROFS; in gfs2_unlink()
1141 gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs); in gfs2_unlink()
1142 gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1); in gfs2_unlink()
1144 rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr, 1); in gfs2_unlink()
1148 gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + 2); in gfs2_unlink()
1159 error = -ENOENT; in gfs2_unlink()
1160 if (inode->i_nlink == 0) in gfs2_unlink()
1163 if (S_ISDIR(inode->i_mode)) { in gfs2_unlink()
1164 error = -ENOTEMPTY; in gfs2_unlink()
1165 if (ip->i_entries > 2 || inode->i_nlink > 2) in gfs2_unlink()
1173 error = gfs2_unlink_ok(dip, &dentry->d_name, ip); in gfs2_unlink()
1199 * gfs2_symlink - Create a symlink
1214 return -ENAMETOOLONG; in gfs2_symlink()
1220 * gfs2_mkdir - Make a directory
1235 * gfs2_mknod - Make a special file
1250 * gfs2_atomic_open - Atomically open a file
1276 if (!(file->f_mode & FMODE_OPENED)) in gfs2_atomic_open()
1279 return excl && (flags & O_CREAT) ? -EEXIST : 0; in gfs2_atomic_open()
1286 return -ENOENT; in gfs2_atomic_open()
1292 * gfs2_ok_to_move - check if it's ok to move a directory to another directory
1304 struct inode *dir = &to->i_inode; in gfs2_ok_to_move()
1305 struct super_block *sb = dir->i_sb; in gfs2_ok_to_move()
1312 if (dir == &this->i_inode) { in gfs2_ok_to_move()
1313 error = -EINVAL; in gfs2_ok_to_move()
1316 if (dir == d_inode(sb->s_root)) { in gfs2_ok_to_move()
1323 error = -ENOENT; in gfs2_ok_to_move()
1341 * update_moved_ino - Update an inode that's being moved
1355 ip->i_inode.i_ctime = current_time(&ip->i_inode); in update_moved_ino()
1356 mark_inode_dirty_sync(&ip->i_inode); in update_moved_ino()
1362 * gfs2_rename - Rename a file
1404 error = gfs2_glock_nq_init(sdp->sd_rename_gl, LM_ST_EXCLUSIVE, in gfs2_rename()
1409 if (S_ISDIR(ip->i_inode.i_mode)) { in gfs2_rename()
1419 gfs2_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs); in gfs2_rename()
1421 gfs2_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE,GL_ASYNC, in gfs2_rename()
1425 gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs + num_gh); in gfs2_rename()
1429 gfs2_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, in gfs2_rename()
1448 nrgd = gfs2_blk2rgrpd(sdp, nip->i_no_addr, 1); in gfs2_rename()
1450 error = -ENOENT; in gfs2_rename()
1453 error = gfs2_glock_nq_init(nrgd->rd_gl, LM_ST_EXCLUSIVE, 0, in gfs2_rename()
1459 error = -ENOENT; in gfs2_rename()
1460 if (ip->i_inode.i_nlink == 0) in gfs2_rename()
1465 error = gfs2_unlink_ok(odip, &odentry->d_name, ip); in gfs2_rename()
1472 error = gfs2_unlink_ok(ndip, &ndentry->d_name, nip); in gfs2_rename()
1476 if (nip->i_inode.i_nlink == 0) { in gfs2_rename()
1477 error = -EAGAIN; in gfs2_rename()
1481 if (S_ISDIR(nip->i_inode.i_mode)) { in gfs2_rename()
1482 if (nip->i_entries < 2) { in gfs2_rename()
1484 error = -EIO; in gfs2_rename()
1487 if (nip->i_entries > 2) { in gfs2_rename()
1488 error = -ENOTEMPTY; in gfs2_rename()
1497 error = gfs2_dir_check(ndir, &ndentry->d_name, NULL); in gfs2_rename()
1499 case -ENOENT: in gfs2_rename()
1503 error = -EEXIST; in gfs2_rename()
1509 if (!ndip->i_inode.i_nlink) { in gfs2_rename()
1510 error = -ENOENT; in gfs2_rename()
1513 if (ndip->i_entries == (u32)-1) { in gfs2_rename()
1514 error = -EFBIG; in gfs2_rename()
1517 if (S_ISDIR(ip->i_inode.i_mode) && in gfs2_rename()
1518 ndip->i_inode.i_nlink == (u32)-1) { in gfs2_rename()
1519 error = -EMLINK; in gfs2_rename()
1534 error = gfs2_diradd_alloc_required(ndir, &ndentry->d_name, &da); in gfs2_rename()
1573 error = gfs2_dir_add(ndir, &ndentry->d_name, ip, &da); in gfs2_rename()
1590 while (x--) { in gfs2_rename()
1604 * gfs2_exchange - exchange two files
1620 struct gfs2_inode *oip = GFS2_I(odentry->d_inode); in gfs2_exchange()
1621 struct gfs2_inode *nip = GFS2_I(ndentry->d_inode); in gfs2_exchange()
1626 umode_t old_mode = oip->i_inode.i_mode; in gfs2_exchange()
1627 umode_t new_mode = nip->i_inode.i_mode; in gfs2_exchange()
1636 error = gfs2_glock_nq_init(sdp->sd_rename_gl, LM_ST_EXCLUSIVE, in gfs2_exchange()
1657 gfs2_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs); in gfs2_exchange()
1659 gfs2_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, in gfs2_exchange()
1663 gfs2_holder_init(oip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs + num_gh); in gfs2_exchange()
1666 gfs2_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs + num_gh); in gfs2_exchange()
1679 error = -ENOENT; in gfs2_exchange()
1680 if (oip->i_inode.i_nlink == 0 || nip->i_inode.i_nlink == 0) in gfs2_exchange()
1683 error = gfs2_unlink_ok(odip, &odentry->d_name, oip); in gfs2_exchange()
1686 error = gfs2_unlink_ok(ndip, &ndentry->d_name, nip); in gfs2_exchange()
1691 error = gfs2_permission(odentry->d_inode, MAY_WRITE); in gfs2_exchange()
1696 error = gfs2_permission(ndentry->d_inode, MAY_WRITE); in gfs2_exchange()
1712 error = gfs2_dir_mvino(ndip, &ndentry->d_name, oip, in gfs2_exchange()
1717 error = gfs2_dir_mvino(odip, &odentry->d_name, nip, in gfs2_exchange()
1724 inc_nlink(&odip->i_inode); in gfs2_exchange()
1725 drop_nlink(&ndip->i_inode); in gfs2_exchange()
1727 inc_nlink(&ndip->i_inode); in gfs2_exchange()
1728 drop_nlink(&odip->i_inode); in gfs2_exchange()
1731 mark_inode_dirty(&ndip->i_inode); in gfs2_exchange()
1733 mark_inode_dirty(&odip->i_inode); in gfs2_exchange()
1738 while (x--) { in gfs2_exchange()
1757 return -EINVAL; in gfs2_rename2()
1766 * gfs2_get_link - Follow a symbolic link
1788 return ERR_PTR(-ECHILD); in gfs2_get_link()
1790 gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &i_gh); in gfs2_get_link()
1797 size = (unsigned int)i_size_read(&ip->i_inode); in gfs2_get_link()
1800 buf = ERR_PTR(-EIO); in gfs2_get_link()
1812 buf = ERR_PTR(-ENOMEM); in gfs2_get_link()
1814 memcpy(buf, dibh->b_data + sizeof(struct gfs2_dinode), size); in gfs2_get_link()
1824 * gfs2_permission -
1827 * @flags: Indicates whether this is an RCU path walk or not
1844 if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) { in gfs2_permission()
1846 return -ECHILD; in gfs2_permission()
1847 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh); in gfs2_permission()
1853 error = -EPERM; in gfs2_permission()
1870 * gfs2_setattr_simple -
1881 if (current->journal_info) in gfs2_setattr_simple()
1902 ouid = inode->i_uid; in setattr_chown()
1903 ogid = inode->i_gid; in setattr_chown()
1904 nuid = attr->ia_uid; in setattr_chown()
1905 ngid = attr->ia_gid; in setattr_chown()
1907 if (!(attr->ia_valid & ATTR_UID) || uid_eq(ouid, nuid)) in setattr_chown()
1909 if (!(attr->ia_valid & ATTR_GID) || gid_eq(ogid, ngid)) in setattr_chown()
1923 ap.target = gfs2_get_inode_blocks(&ip->i_inode); in setattr_chown()
1942 gfs2_quota_change(ip, -(s64)ap.target, ouid, ogid); in setattr_chown()
1956 * gfs2_setattr - Change attributes on an inode
1977 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &i_gh); in gfs2_setattr()
1981 error = -EPERM; in gfs2_setattr()
1989 if (attr->ia_valid & ATTR_SIZE) in gfs2_setattr()
1990 error = gfs2_setattr_size(inode, attr->ia_size); in gfs2_setattr()
1991 else if (attr->ia_valid & (ATTR_UID | ATTR_GID)) in gfs2_setattr()
1995 if (!error && attr->ia_valid & ATTR_MODE) in gfs2_setattr()
1996 error = posix_acl_chmod(inode, inode->i_mode); in gfs2_setattr()
2009 * gfs2_getattr - Read out an inode's attributes
2027 struct inode *inode = d_inode(path->dentry); in gfs2_getattr()
2034 if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) { in gfs2_getattr()
2035 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &gh); in gfs2_getattr()
2040 gfsflags = ip->i_diskflags; in gfs2_getattr()
2042 stat->attributes |= STATX_ATTR_APPEND; in gfs2_getattr()
2044 stat->attributes |= STATX_ATTR_IMMUTABLE; in gfs2_getattr()
2046 stat->attributes_mask |= (STATX_ATTR_APPEND | in gfs2_getattr()
2069 ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh); in gfs2_fiemap()
2082 loff_t gfs2_seek_data(struct file *file, loff_t offset) in gfs2_seek_data() argument
2084 struct inode *inode = file->f_mapping->host; in gfs2_seek_data()
2090 ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh); in gfs2_seek_data()
2092 ret = iomap_seek_data(inode, offset, &gfs2_iomap_ops); in gfs2_seek_data()
2098 return vfs_setpos(file, ret, inode->i_sb->s_maxbytes); in gfs2_seek_data()
2101 loff_t gfs2_seek_hole(struct file *file, loff_t offset) in gfs2_seek_hole() argument
2103 struct inode *inode = file->f_mapping->host; in gfs2_seek_hole()
2109 ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh); in gfs2_seek_hole()
2111 ret = iomap_seek_hole(inode, offset, &gfs2_iomap_ops); in gfs2_seek_hole()
2117 return vfs_setpos(file, ret, inode->i_sb->s_maxbytes); in gfs2_seek_hole()
2124 struct gfs2_glock *gl = ip->i_gl; in gfs2_update_time()