diff options
Diffstat (limited to 'fs/gfs2/ops_inode.c')
-rw-r--r-- | fs/gfs2/ops_inode.c | 62 |
1 files changed, 33 insertions, 29 deletions
diff --git a/fs/gfs2/ops_inode.c b/fs/gfs2/ops_inode.c index 9971a30eb78e..7633a8584b0d 100644 --- a/fs/gfs2/ops_inode.c +++ b/fs/gfs2/ops_inode.c | |||
@@ -17,10 +17,13 @@ | |||
17 | #include <linux/mm.h> | 17 | #include <linux/mm.h> |
18 | #include <linux/xattr.h> | 18 | #include <linux/xattr.h> |
19 | #include <linux/posix_acl.h> | 19 | #include <linux/posix_acl.h> |
20 | #include <linux/gfs2_ondisk.h> | ||
20 | #include <asm/semaphore.h> | 21 | #include <asm/semaphore.h> |
21 | #include <asm/uaccess.h> | 22 | #include <asm/uaccess.h> |
22 | 23 | ||
23 | #include "gfs2.h" | 24 | #include "gfs2.h" |
25 | #include "lm_interface.h" | ||
26 | #include "incore.h" | ||
24 | #include "acl.h" | 27 | #include "acl.h" |
25 | #include "bmap.h" | 28 | #include "bmap.h" |
26 | #include "dir.h" | 29 | #include "dir.h" |
@@ -36,6 +39,7 @@ | |||
36 | #include "rgrp.h" | 39 | #include "rgrp.h" |
37 | #include "trans.h" | 40 | #include "trans.h" |
38 | #include "unlinked.h" | 41 | #include "unlinked.h" |
42 | #include "util.h" | ||
39 | 43 | ||
40 | /** | 44 | /** |
41 | * gfs2_create - Create a file | 45 | * gfs2_create - Create a file |
@@ -49,7 +53,7 @@ | |||
49 | static int gfs2_create(struct inode *dir, struct dentry *dentry, | 53 | static int gfs2_create(struct inode *dir, struct dentry *dentry, |
50 | int mode, struct nameidata *nd) | 54 | int mode, struct nameidata *nd) |
51 | { | 55 | { |
52 | struct gfs2_inode *dip = get_v2ip(dir); | 56 | struct gfs2_inode *dip = dir->u.generic_ip; |
53 | struct gfs2_sbd *sdp = dip->i_sbd; | 57 | struct gfs2_sbd *sdp = dip->i_sbd; |
54 | struct gfs2_holder ghs[2]; | 58 | struct gfs2_holder ghs[2]; |
55 | struct inode *inode; | 59 | struct inode *inode; |
@@ -106,7 +110,7 @@ static int gfs2_create(struct inode *dir, struct dentry *dentry, | |||
106 | static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry, | 110 | static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry, |
107 | struct nameidata *nd) | 111 | struct nameidata *nd) |
108 | { | 112 | { |
109 | struct gfs2_inode *dip = get_v2ip(dir); | 113 | struct gfs2_inode *dip = dir->u.generic_ip; |
110 | struct gfs2_sbd *sdp = dip->i_sbd; | 114 | struct gfs2_sbd *sdp = dip->i_sbd; |
111 | struct inode *inode = NULL; | 115 | struct inode *inode = NULL; |
112 | int error; | 116 | int error; |
@@ -140,10 +144,10 @@ static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry, | |||
140 | static int gfs2_link(struct dentry *old_dentry, struct inode *dir, | 144 | static int gfs2_link(struct dentry *old_dentry, struct inode *dir, |
141 | struct dentry *dentry) | 145 | struct dentry *dentry) |
142 | { | 146 | { |
143 | struct gfs2_inode *dip = get_v2ip(dir); | 147 | struct gfs2_inode *dip = dir->u.generic_ip; |
144 | struct gfs2_sbd *sdp = dip->i_sbd; | 148 | struct gfs2_sbd *sdp = dip->i_sbd; |
145 | struct inode *inode = old_dentry->d_inode; | 149 | struct inode *inode = old_dentry->d_inode; |
146 | struct gfs2_inode *ip = get_v2ip(inode); | 150 | struct gfs2_inode *ip = inode->u.generic_ip; |
147 | struct gfs2_holder ghs[2]; | 151 | struct gfs2_holder ghs[2]; |
148 | int alloc_required; | 152 | int alloc_required; |
149 | int error; | 153 | int error; |
@@ -274,9 +278,9 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir, | |||
274 | 278 | ||
275 | static int gfs2_unlink(struct inode *dir, struct dentry *dentry) | 279 | static int gfs2_unlink(struct inode *dir, struct dentry *dentry) |
276 | { | 280 | { |
277 | struct gfs2_inode *dip = get_v2ip(dir); | 281 | struct gfs2_inode *dip = dir->u.generic_ip; |
278 | struct gfs2_sbd *sdp = dip->i_sbd; | 282 | struct gfs2_sbd *sdp = dip->i_sbd; |
279 | struct gfs2_inode *ip = get_v2ip(dentry->d_inode); | 283 | struct gfs2_inode *ip = dentry->d_inode->u.generic_ip; |
280 | struct gfs2_unlinked *ul; | 284 | struct gfs2_unlinked *ul; |
281 | struct gfs2_holder ghs[2]; | 285 | struct gfs2_holder ghs[2]; |
282 | int error; | 286 | int error; |
@@ -329,7 +333,7 @@ static int gfs2_unlink(struct inode *dir, struct dentry *dentry) | |||
329 | static int gfs2_symlink(struct inode *dir, struct dentry *dentry, | 333 | static int gfs2_symlink(struct inode *dir, struct dentry *dentry, |
330 | const char *symname) | 334 | const char *symname) |
331 | { | 335 | { |
332 | struct gfs2_inode *dip = get_v2ip(dir), *ip; | 336 | struct gfs2_inode *dip = dir->u.generic_ip, *ip; |
333 | struct gfs2_sbd *sdp = dip->i_sbd; | 337 | struct gfs2_sbd *sdp = dip->i_sbd; |
334 | struct gfs2_holder ghs[2]; | 338 | struct gfs2_holder ghs[2]; |
335 | struct inode *inode; | 339 | struct inode *inode; |
@@ -350,7 +354,7 @@ static int gfs2_symlink(struct inode *dir, struct dentry *dentry, | |||
350 | return PTR_ERR(inode); | 354 | return PTR_ERR(inode); |
351 | } | 355 | } |
352 | 356 | ||
353 | ip = get_gl2ip(ghs[1].gh_gl); | 357 | ip = ghs[1].gh_gl->gl_object; |
354 | 358 | ||
355 | ip->i_di.di_size = size; | 359 | ip->i_di.di_size = size; |
356 | 360 | ||
@@ -388,7 +392,7 @@ static int gfs2_symlink(struct inode *dir, struct dentry *dentry, | |||
388 | 392 | ||
389 | static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode) | 393 | static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode) |
390 | { | 394 | { |
391 | struct gfs2_inode *dip = get_v2ip(dir), *ip; | 395 | struct gfs2_inode *dip = dir->u.generic_ip, *ip; |
392 | struct gfs2_sbd *sdp = dip->i_sbd; | 396 | struct gfs2_sbd *sdp = dip->i_sbd; |
393 | struct gfs2_holder ghs[2]; | 397 | struct gfs2_holder ghs[2]; |
394 | struct inode *inode; | 398 | struct inode *inode; |
@@ -403,7 +407,7 @@ static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
403 | return PTR_ERR(inode); | 407 | return PTR_ERR(inode); |
404 | } | 408 | } |
405 | 409 | ||
406 | ip = get_gl2ip(ghs[1].gh_gl); | 410 | ip = ghs[1].gh_gl->gl_object; |
407 | 411 | ||
408 | ip->i_di.di_nlink = 2; | 412 | ip->i_di.di_nlink = 2; |
409 | ip->i_di.di_size = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode); | 413 | ip->i_di.di_size = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode); |
@@ -468,9 +472,9 @@ static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
468 | 472 | ||
469 | static int gfs2_rmdir(struct inode *dir, struct dentry *dentry) | 473 | static int gfs2_rmdir(struct inode *dir, struct dentry *dentry) |
470 | { | 474 | { |
471 | struct gfs2_inode *dip = get_v2ip(dir); | 475 | struct gfs2_inode *dip = dir->u.generic_ip; |
472 | struct gfs2_sbd *sdp = dip->i_sbd; | 476 | struct gfs2_sbd *sdp = dip->i_sbd; |
473 | struct gfs2_inode *ip = get_v2ip(dentry->d_inode); | 477 | struct gfs2_inode *ip = dentry->d_inode->u.generic_ip; |
474 | struct gfs2_unlinked *ul; | 478 | struct gfs2_unlinked *ul; |
475 | struct gfs2_holder ghs[2]; | 479 | struct gfs2_holder ghs[2]; |
476 | int error; | 480 | int error; |
@@ -534,7 +538,7 @@ static int gfs2_rmdir(struct inode *dir, struct dentry *dentry) | |||
534 | static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode, | 538 | static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode, |
535 | dev_t dev) | 539 | dev_t dev) |
536 | { | 540 | { |
537 | struct gfs2_inode *dip = get_v2ip(dir), *ip; | 541 | struct gfs2_inode *dip = dir->u.generic_ip, *ip; |
538 | struct gfs2_sbd *sdp = dip->i_sbd; | 542 | struct gfs2_sbd *sdp = dip->i_sbd; |
539 | struct gfs2_holder ghs[2]; | 543 | struct gfs2_holder ghs[2]; |
540 | struct inode *inode; | 544 | struct inode *inode; |
@@ -563,7 +567,7 @@ static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode, | |||
563 | return PTR_ERR(inode); | 567 | return PTR_ERR(inode); |
564 | } | 568 | } |
565 | 569 | ||
566 | ip = get_gl2ip(ghs[1].gh_gl); | 570 | ip = ghs[1].gh_gl->gl_object; |
567 | 571 | ||
568 | ip->i_di.di_major = major; | 572 | ip->i_di.di_major = major; |
569 | ip->i_di.di_minor = minor; | 573 | ip->i_di.di_minor = minor; |
@@ -602,9 +606,9 @@ static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode, | |||
602 | static int gfs2_rename(struct inode *odir, struct dentry *odentry, | 606 | static int gfs2_rename(struct inode *odir, struct dentry *odentry, |
603 | struct inode *ndir, struct dentry *ndentry) | 607 | struct inode *ndir, struct dentry *ndentry) |
604 | { | 608 | { |
605 | struct gfs2_inode *odip = get_v2ip(odir); | 609 | struct gfs2_inode *odip = odir->u.generic_ip; |
606 | struct gfs2_inode *ndip = get_v2ip(ndir); | 610 | struct gfs2_inode *ndip = ndir->u.generic_ip; |
607 | struct gfs2_inode *ip = get_v2ip(odentry->d_inode); | 611 | struct gfs2_inode *ip = odentry->d_inode->u.generic_ip; |
608 | struct gfs2_inode *nip = NULL; | 612 | struct gfs2_inode *nip = NULL; |
609 | struct gfs2_sbd *sdp = odip->i_sbd; | 613 | struct gfs2_sbd *sdp = odip->i_sbd; |
610 | struct gfs2_unlinked *ul; | 614 | struct gfs2_unlinked *ul; |
@@ -616,7 +620,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry, | |||
616 | int error; | 620 | int error; |
617 | 621 | ||
618 | if (ndentry->d_inode) { | 622 | if (ndentry->d_inode) { |
619 | nip = get_v2ip(ndentry->d_inode); | 623 | nip = ndentry->d_inode->u.generic_ip; |
620 | if (ip == nip) | 624 | if (ip == nip) |
621 | return 0; | 625 | return 0; |
622 | } | 626 | } |
@@ -848,7 +852,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry, | |||
848 | static int gfs2_readlink(struct dentry *dentry, char __user *user_buf, | 852 | static int gfs2_readlink(struct dentry *dentry, char __user *user_buf, |
849 | int user_size) | 853 | int user_size) |
850 | { | 854 | { |
851 | struct gfs2_inode *ip = get_v2ip(dentry->d_inode); | 855 | struct gfs2_inode *ip = dentry->d_inode->u.generic_ip; |
852 | char array[GFS2_FAST_NAME_SIZE], *buf = array; | 856 | char array[GFS2_FAST_NAME_SIZE], *buf = array; |
853 | unsigned int len = GFS2_FAST_NAME_SIZE; | 857 | unsigned int len = GFS2_FAST_NAME_SIZE; |
854 | int error; | 858 | int error; |
@@ -884,7 +888,7 @@ static int gfs2_readlink(struct dentry *dentry, char __user *user_buf, | |||
884 | 888 | ||
885 | static void *gfs2_follow_link(struct dentry *dentry, struct nameidata *nd) | 889 | static void *gfs2_follow_link(struct dentry *dentry, struct nameidata *nd) |
886 | { | 890 | { |
887 | struct gfs2_inode *ip = get_v2ip(dentry->d_inode); | 891 | struct gfs2_inode *ip = dentry->d_inode->u.generic_ip; |
888 | char array[GFS2_FAST_NAME_SIZE], *buf = array; | 892 | char array[GFS2_FAST_NAME_SIZE], *buf = array; |
889 | unsigned int len = GFS2_FAST_NAME_SIZE; | 893 | unsigned int len = GFS2_FAST_NAME_SIZE; |
890 | int error; | 894 | int error; |
@@ -910,7 +914,7 @@ static void *gfs2_follow_link(struct dentry *dentry, struct nameidata *nd) | |||
910 | 914 | ||
911 | static int gfs2_permission(struct inode *inode, int mask, struct nameidata *nd) | 915 | static int gfs2_permission(struct inode *inode, int mask, struct nameidata *nd) |
912 | { | 916 | { |
913 | struct gfs2_inode *ip = get_v2ip(inode); | 917 | struct gfs2_inode *ip = inode->u.generic_ip; |
914 | struct gfs2_holder i_gh; | 918 | struct gfs2_holder i_gh; |
915 | int error; | 919 | int error; |
916 | 920 | ||
@@ -930,7 +934,7 @@ static int gfs2_permission(struct inode *inode, int mask, struct nameidata *nd) | |||
930 | 934 | ||
931 | static int setattr_size(struct inode *inode, struct iattr *attr) | 935 | static int setattr_size(struct inode *inode, struct iattr *attr) |
932 | { | 936 | { |
933 | struct gfs2_inode *ip = get_v2ip(inode); | 937 | struct gfs2_inode *ip = inode->u.generic_ip; |
934 | int error; | 938 | int error; |
935 | 939 | ||
936 | if (attr->ia_size != ip->i_di.di_size) { | 940 | if (attr->ia_size != ip->i_di.di_size) { |
@@ -948,7 +952,7 @@ static int setattr_size(struct inode *inode, struct iattr *attr) | |||
948 | 952 | ||
949 | static int setattr_chown(struct inode *inode, struct iattr *attr) | 953 | static int setattr_chown(struct inode *inode, struct iattr *attr) |
950 | { | 954 | { |
951 | struct gfs2_inode *ip = get_v2ip(inode); | 955 | struct gfs2_inode *ip = inode->u.generic_ip; |
952 | struct gfs2_sbd *sdp = ip->i_sbd; | 956 | struct gfs2_sbd *sdp = ip->i_sbd; |
953 | struct buffer_head *dibh; | 957 | struct buffer_head *dibh; |
954 | uint32_t ouid, ogid, nuid, ngid; | 958 | uint32_t ouid, ogid, nuid, ngid; |
@@ -1025,7 +1029,7 @@ static int setattr_chown(struct inode *inode, struct iattr *attr) | |||
1025 | static int gfs2_setattr(struct dentry *dentry, struct iattr *attr) | 1029 | static int gfs2_setattr(struct dentry *dentry, struct iattr *attr) |
1026 | { | 1030 | { |
1027 | struct inode *inode = dentry->d_inode; | 1031 | struct inode *inode = dentry->d_inode; |
1028 | struct gfs2_inode *ip = get_v2ip(inode); | 1032 | struct gfs2_inode *ip = inode->u.generic_ip; |
1029 | struct gfs2_holder i_gh; | 1033 | struct gfs2_holder i_gh; |
1030 | int error; | 1034 | int error; |
1031 | 1035 | ||
@@ -1072,7 +1076,7 @@ static int gfs2_getattr(struct vfsmount *mnt, struct dentry *dentry, | |||
1072 | struct kstat *stat) | 1076 | struct kstat *stat) |
1073 | { | 1077 | { |
1074 | struct inode *inode = dentry->d_inode; | 1078 | struct inode *inode = dentry->d_inode; |
1075 | struct gfs2_inode *ip = get_v2ip(inode); | 1079 | struct gfs2_inode *ip = inode->u.generic_ip; |
1076 | struct gfs2_holder gh; | 1080 | struct gfs2_holder gh; |
1077 | int error; | 1081 | int error; |
1078 | 1082 | ||
@@ -1088,7 +1092,7 @@ static int gfs2_getattr(struct vfsmount *mnt, struct dentry *dentry, | |||
1088 | static int gfs2_setxattr(struct dentry *dentry, const char *name, | 1092 | static int gfs2_setxattr(struct dentry *dentry, const char *name, |
1089 | const void *data, size_t size, int flags) | 1093 | const void *data, size_t size, int flags) |
1090 | { | 1094 | { |
1091 | struct gfs2_inode *ip = get_v2ip(dentry->d_inode); | 1095 | struct gfs2_inode *ip = dentry->d_inode->u.generic_ip; |
1092 | struct gfs2_ea_request er; | 1096 | struct gfs2_ea_request er; |
1093 | 1097 | ||
1094 | memset(&er, 0, sizeof(struct gfs2_ea_request)); | 1098 | memset(&er, 0, sizeof(struct gfs2_ea_request)); |
@@ -1118,7 +1122,7 @@ static ssize_t gfs2_getxattr(struct dentry *dentry, const char *name, | |||
1118 | er.er_name_len = strlen(er.er_name); | 1122 | er.er_name_len = strlen(er.er_name); |
1119 | er.er_data_len = size; | 1123 | er.er_data_len = size; |
1120 | 1124 | ||
1121 | return gfs2_ea_get(get_v2ip(dentry->d_inode), &er); | 1125 | return gfs2_ea_get(dentry->d_inode->u.generic_ip, &er); |
1122 | } | 1126 | } |
1123 | 1127 | ||
1124 | static ssize_t gfs2_listxattr(struct dentry *dentry, char *buffer, size_t size) | 1128 | static ssize_t gfs2_listxattr(struct dentry *dentry, char *buffer, size_t size) |
@@ -1129,7 +1133,7 @@ static ssize_t gfs2_listxattr(struct dentry *dentry, char *buffer, size_t size) | |||
1129 | er.er_data = (size) ? buffer : NULL; | 1133 | er.er_data = (size) ? buffer : NULL; |
1130 | er.er_data_len = size; | 1134 | er.er_data_len = size; |
1131 | 1135 | ||
1132 | return gfs2_ea_list(get_v2ip(dentry->d_inode), &er); | 1136 | return gfs2_ea_list(dentry->d_inode->u.generic_ip, &er); |
1133 | } | 1137 | } |
1134 | 1138 | ||
1135 | static int gfs2_removexattr(struct dentry *dentry, const char *name) | 1139 | static int gfs2_removexattr(struct dentry *dentry, const char *name) |
@@ -1142,7 +1146,7 @@ static int gfs2_removexattr(struct dentry *dentry, const char *name) | |||
1142 | return -EOPNOTSUPP; | 1146 | return -EOPNOTSUPP; |
1143 | er.er_name_len = strlen(er.er_name); | 1147 | er.er_name_len = strlen(er.er_name); |
1144 | 1148 | ||
1145 | return gfs2_ea_remove(get_v2ip(dentry->d_inode), &er); | 1149 | return gfs2_ea_remove(dentry->d_inode->u.generic_ip, &er); |
1146 | } | 1150 | } |
1147 | 1151 | ||
1148 | struct inode_operations gfs2_file_iops = { | 1152 | struct inode_operations gfs2_file_iops = { |