aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/acl.c
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2006-06-14 15:32:57 -0400
committerSteven Whitehouse <swhiteho@redhat.com>2006-06-14 15:32:57 -0400
commitfeaa7bba026c181ce071d5a4884f7f9dd26207a1 (patch)
treec858deb225917265cb07820730e9764674d133e8 /fs/gfs2/acl.c
parent22da645fd6675b7abc55cf937ddf6132f343e5b9 (diff)
[GFS2] Fix unlinked file handling
This patch fixes the way we have been dealing with unlinked, but still open files. It removes all limits (other than memory for inodes, as per every other filesystem) on numbers of these which we can support on GFS2. It also means that (like other fs) its the responsibility of the last process to close the file to deallocate the storage, rather than the person who did the unlinking. Note that with GFS2, those two events might take place on different nodes. Also there are a number of other changes: o We use the Linux inode subsystem as it was intended to be used, wrt allocating GFS2 inodes o The Linux inode cache is now the point which we use for local enforcement of only holding one copy of the inode in core at once (previous to this we used the glock layer). o We no longer use the unlinked "special" file. We just ignore it completely. This makes unlinking more efficient. o We now use the 4th block allocation state. The previously unused state is used to track unlinked but still open inodes. o gfs2_inoded is no longer needed o Several fields are now no longer needed (and removed) from the in core struct gfs2_inode o Several fields are no longer needed (and removed) from the in core superblock There are a number of future possible optimisations and clean ups which have been made possible by this patch. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/acl.c')
-rw-r--r--fs/gfs2/acl.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/gfs2/acl.c b/fs/gfs2/acl.c
index 343dbe3e87bb..9ef4cf2c03db 100644
--- a/fs/gfs2/acl.c
+++ b/fs/gfs2/acl.c
@@ -73,7 +73,7 @@ int gfs2_acl_validate_set(struct gfs2_inode *ip, int access,
73 73
74int gfs2_acl_validate_remove(struct gfs2_inode *ip, int access) 74int gfs2_acl_validate_remove(struct gfs2_inode *ip, int access)
75{ 75{
76 if (!ip->i_sbd->sd_args.ar_posix_acl) 76 if (!GFS2_SB(&ip->i_inode)->sd_args.ar_posix_acl)
77 return -EOPNOTSUPP; 77 return -EOPNOTSUPP;
78 if (current->fsuid != ip->i_di.di_uid && !capable(CAP_FOWNER)) 78 if (current->fsuid != ip->i_di.di_uid && !capable(CAP_FOWNER))
79 return -EPERM; 79 return -EPERM;
@@ -160,7 +160,7 @@ int gfs2_check_acl_locked(struct inode *inode, int mask)
160 struct posix_acl *acl = NULL; 160 struct posix_acl *acl = NULL;
161 int error; 161 int error;
162 162
163 error = acl_get(inode->u.generic_ip, ACL_ACCESS, &acl, NULL, NULL, NULL); 163 error = acl_get(GFS2_I(inode), ACL_ACCESS, &acl, NULL, NULL, NULL);
164 if (error) 164 if (error)
165 return error; 165 return error;
166 166
@@ -175,7 +175,7 @@ int gfs2_check_acl_locked(struct inode *inode, int mask)
175 175
176int gfs2_check_acl(struct inode *inode, int mask) 176int gfs2_check_acl(struct inode *inode, int mask)
177{ 177{
178 struct gfs2_inode *ip = inode->u.generic_ip; 178 struct gfs2_inode *ip = GFS2_I(inode);
179 struct gfs2_holder i_gh; 179 struct gfs2_holder i_gh;
180 int error; 180 int error;
181 181
@@ -192,7 +192,7 @@ int gfs2_check_acl(struct inode *inode, int mask)
192 192
193static int munge_mode(struct gfs2_inode *ip, mode_t mode) 193static int munge_mode(struct gfs2_inode *ip, mode_t mode)
194{ 194{
195 struct gfs2_sbd *sdp = ip->i_sbd; 195 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
196 struct buffer_head *dibh; 196 struct buffer_head *dibh;
197 int error; 197 int error;
198 198
@@ -217,7 +217,7 @@ static int munge_mode(struct gfs2_inode *ip, mode_t mode)
217 217
218int gfs2_acl_create(struct gfs2_inode *dip, struct gfs2_inode *ip) 218int gfs2_acl_create(struct gfs2_inode *dip, struct gfs2_inode *ip)
219{ 219{
220 struct gfs2_sbd *sdp = dip->i_sbd; 220 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
221 struct posix_acl *acl = NULL, *clone; 221 struct posix_acl *acl = NULL, *clone;
222 struct gfs2_ea_request er; 222 struct gfs2_ea_request er;
223 mode_t mode = ip->i_di.di_mode; 223 mode_t mode = ip->i_di.di_mode;