diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-30 12:11:11 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-30 12:11:11 -0400 |
commit | d28619f1563140526e2f84eae436f39206f40a69 (patch) | |
tree | d93284016a0983c8f27b745a3c50738617e50995 /fs/udf | |
parent | 021fad8b706849c091f6e682bc5df3ce4f9ab4d7 (diff) | |
parent | f32764bd2bbb6ea003c158b1d276b4dc9f900348 (diff) |
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6:
quota: Convert quota statistics to generic percpu_counter
ext3 uses rb_node = NULL; to zero rb_root.
quota: Fixup dquot_transfer
reiserfs: Fix resuming of quotas on remount read-write
pohmelfs: Remove dead quota code
ufs: Remove dead quota code
udf: Remove dead quota code
quota: rename default quotactl methods to dquot_
quota: explicitly set ->dq_op and ->s_qcop
quota: drop remount argument to ->quota_on and ->quota_off
quota: move unmount handling into the filesystem
quota: kill the vfs_dq_off and vfs_dq_quota_on_remount wrappers
quota: move remount handling into the filesystem
ocfs2: Fix use after free on remount read-only
Fix up conflicts in fs/ext4/super.c and fs/ufs/file.c
Diffstat (limited to 'fs/udf')
-rw-r--r-- | fs/udf/balloc.c | 43 | ||||
-rw-r--r-- | fs/udf/file.c | 26 | ||||
-rw-r--r-- | fs/udf/ialloc.c | 21 | ||||
-rw-r--r-- | fs/udf/inode.c | 5 | ||||
-rw-r--r-- | fs/udf/namei.c | 20 | ||||
-rw-r--r-- | fs/udf/super.c | 13 | ||||
-rw-r--r-- | fs/udf/udfdecl.h | 1 |
7 files changed, 11 insertions, 118 deletions
diff --git a/fs/udf/balloc.c b/fs/udf/balloc.c index 9a9378b4eb5a..b608efaa4cee 100644 --- a/fs/udf/balloc.c +++ b/fs/udf/balloc.c | |||
@@ -21,7 +21,6 @@ | |||
21 | 21 | ||
22 | #include "udfdecl.h" | 22 | #include "udfdecl.h" |
23 | 23 | ||
24 | #include <linux/quotaops.h> | ||
25 | #include <linux/buffer_head.h> | 24 | #include <linux/buffer_head.h> |
26 | #include <linux/bitops.h> | 25 | #include <linux/bitops.h> |
27 | 26 | ||
@@ -159,8 +158,6 @@ static void udf_bitmap_free_blocks(struct super_block *sb, | |||
159 | udf_debug("byte=%2x\n", | 158 | udf_debug("byte=%2x\n", |
160 | ((char *)bh->b_data)[(bit + i) >> 3]); | 159 | ((char *)bh->b_data)[(bit + i) >> 3]); |
161 | } else { | 160 | } else { |
162 | if (inode) | ||
163 | dquot_free_block(inode, 1); | ||
164 | udf_add_free_space(sb, sbi->s_partition, 1); | 161 | udf_add_free_space(sb, sbi->s_partition, 1); |
165 | } | 162 | } |
166 | } | 163 | } |
@@ -210,15 +207,8 @@ static int udf_bitmap_prealloc_blocks(struct super_block *sb, | |||
210 | bit = block % (sb->s_blocksize << 3); | 207 | bit = block % (sb->s_blocksize << 3); |
211 | 208 | ||
212 | while (bit < (sb->s_blocksize << 3) && block_count > 0) { | 209 | while (bit < (sb->s_blocksize << 3) && block_count > 0) { |
213 | if (!udf_test_bit(bit, bh->b_data)) | 210 | if (!udf_clear_bit(bit, bh->b_data)) |
214 | goto out; | 211 | goto out; |
215 | else if (dquot_prealloc_block(inode, 1)) | ||
216 | goto out; | ||
217 | else if (!udf_clear_bit(bit, bh->b_data)) { | ||
218 | udf_debug("bit already cleared for block %d\n", bit); | ||
219 | dquot_free_block(inode, 1); | ||
220 | goto out; | ||
221 | } | ||
222 | block_count--; | 212 | block_count--; |
223 | alloc_count++; | 213 | alloc_count++; |
224 | bit++; | 214 | bit++; |
@@ -338,20 +328,6 @@ search_back: | |||
338 | } | 328 | } |
339 | 329 | ||
340 | got_block: | 330 | got_block: |
341 | |||
342 | /* | ||
343 | * Check quota for allocation of this block. | ||
344 | */ | ||
345 | if (inode) { | ||
346 | int ret = dquot_alloc_block(inode, 1); | ||
347 | |||
348 | if (ret) { | ||
349 | mutex_unlock(&sbi->s_alloc_mutex); | ||
350 | *err = ret; | ||
351 | return 0; | ||
352 | } | ||
353 | } | ||
354 | |||
355 | newblock = bit + (block_group << (sb->s_blocksize_bits + 3)) - | 331 | newblock = bit + (block_group << (sb->s_blocksize_bits + 3)) - |
356 | (sizeof(struct spaceBitmapDesc) << 3); | 332 | (sizeof(struct spaceBitmapDesc) << 3); |
357 | 333 | ||
@@ -401,10 +377,6 @@ static void udf_table_free_blocks(struct super_block *sb, | |||
401 | } | 377 | } |
402 | 378 | ||
403 | iinfo = UDF_I(table); | 379 | iinfo = UDF_I(table); |
404 | /* We do this up front - There are some error conditions that | ||
405 | could occure, but.. oh well */ | ||
406 | if (inode) | ||
407 | dquot_free_block(inode, count); | ||
408 | udf_add_free_space(sb, sbi->s_partition, count); | 380 | udf_add_free_space(sb, sbi->s_partition, count); |
409 | 381 | ||
410 | start = bloc->logicalBlockNum + offset; | 382 | start = bloc->logicalBlockNum + offset; |
@@ -649,10 +621,7 @@ static int udf_table_prealloc_blocks(struct super_block *sb, | |||
649 | epos.offset -= adsize; | 621 | epos.offset -= adsize; |
650 | 622 | ||
651 | alloc_count = (elen >> sb->s_blocksize_bits); | 623 | alloc_count = (elen >> sb->s_blocksize_bits); |
652 | if (inode && dquot_prealloc_block(inode, | 624 | if (alloc_count > block_count) { |
653 | alloc_count > block_count ? block_count : alloc_count)) | ||
654 | alloc_count = 0; | ||
655 | else if (alloc_count > block_count) { | ||
656 | alloc_count = block_count; | 625 | alloc_count = block_count; |
657 | eloc.logicalBlockNum += alloc_count; | 626 | eloc.logicalBlockNum += alloc_count; |
658 | elen -= (alloc_count << sb->s_blocksize_bits); | 627 | elen -= (alloc_count << sb->s_blocksize_bits); |
@@ -752,14 +721,6 @@ static int udf_table_new_block(struct super_block *sb, | |||
752 | newblock = goal_eloc.logicalBlockNum; | 721 | newblock = goal_eloc.logicalBlockNum; |
753 | goal_eloc.logicalBlockNum++; | 722 | goal_eloc.logicalBlockNum++; |
754 | goal_elen -= sb->s_blocksize; | 723 | goal_elen -= sb->s_blocksize; |
755 | if (inode) { | ||
756 | *err = dquot_alloc_block(inode, 1); | ||
757 | if (*err) { | ||
758 | brelse(goal_epos.bh); | ||
759 | mutex_unlock(&sbi->s_alloc_mutex); | ||
760 | return 0; | ||
761 | } | ||
762 | } | ||
763 | 724 | ||
764 | if (goal_elen) | 725 | if (goal_elen) |
765 | udf_write_aext(table, &goal_epos, &goal_eloc, goal_elen, 1); | 726 | udf_write_aext(table, &goal_epos, &goal_eloc, goal_elen, 1); |
diff --git a/fs/udf/file.c b/fs/udf/file.c index 0660280aa180..94e06d6bddbd 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c | |||
@@ -34,7 +34,6 @@ | |||
34 | #include <linux/errno.h> | 34 | #include <linux/errno.h> |
35 | #include <linux/smp_lock.h> | 35 | #include <linux/smp_lock.h> |
36 | #include <linux/pagemap.h> | 36 | #include <linux/pagemap.h> |
37 | #include <linux/quotaops.h> | ||
38 | #include <linux/buffer_head.h> | 37 | #include <linux/buffer_head.h> |
39 | #include <linux/aio.h> | 38 | #include <linux/aio.h> |
40 | #include <linux/smp_lock.h> | 39 | #include <linux/smp_lock.h> |
@@ -219,7 +218,7 @@ const struct file_operations udf_file_operations = { | |||
219 | .read = do_sync_read, | 218 | .read = do_sync_read, |
220 | .aio_read = generic_file_aio_read, | 219 | .aio_read = generic_file_aio_read, |
221 | .unlocked_ioctl = udf_ioctl, | 220 | .unlocked_ioctl = udf_ioctl, |
222 | .open = dquot_file_open, | 221 | .open = generic_file_open, |
223 | .mmap = generic_file_mmap, | 222 | .mmap = generic_file_mmap, |
224 | .write = do_sync_write, | 223 | .write = do_sync_write, |
225 | .aio_write = udf_file_aio_write, | 224 | .aio_write = udf_file_aio_write, |
@@ -229,29 +228,6 @@ const struct file_operations udf_file_operations = { | |||
229 | .llseek = generic_file_llseek, | 228 | .llseek = generic_file_llseek, |
230 | }; | 229 | }; |
231 | 230 | ||
232 | int udf_setattr(struct dentry *dentry, struct iattr *iattr) | ||
233 | { | ||
234 | struct inode *inode = dentry->d_inode; | ||
235 | int error; | ||
236 | |||
237 | error = inode_change_ok(inode, iattr); | ||
238 | if (error) | ||
239 | return error; | ||
240 | |||
241 | if (is_quota_modification(inode, iattr)) | ||
242 | dquot_initialize(inode); | ||
243 | |||
244 | if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) || | ||
245 | (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { | ||
246 | error = dquot_transfer(inode, iattr); | ||
247 | if (error) | ||
248 | return error; | ||
249 | } | ||
250 | |||
251 | return inode_setattr(inode, iattr); | ||
252 | } | ||
253 | |||
254 | const struct inode_operations udf_file_inode_operations = { | 231 | const struct inode_operations udf_file_inode_operations = { |
255 | .truncate = udf_truncate, | 232 | .truncate = udf_truncate, |
256 | .setattr = udf_setattr, | ||
257 | }; | 233 | }; |
diff --git a/fs/udf/ialloc.c b/fs/udf/ialloc.c index 2b5586c7f02a..18cd7111185d 100644 --- a/fs/udf/ialloc.c +++ b/fs/udf/ialloc.c | |||
@@ -20,7 +20,6 @@ | |||
20 | 20 | ||
21 | #include "udfdecl.h" | 21 | #include "udfdecl.h" |
22 | #include <linux/fs.h> | 22 | #include <linux/fs.h> |
23 | #include <linux/quotaops.h> | ||
24 | #include <linux/sched.h> | 23 | #include <linux/sched.h> |
25 | #include <linux/slab.h> | 24 | #include <linux/slab.h> |
26 | 25 | ||
@@ -32,13 +31,6 @@ void udf_free_inode(struct inode *inode) | |||
32 | struct super_block *sb = inode->i_sb; | 31 | struct super_block *sb = inode->i_sb; |
33 | struct udf_sb_info *sbi = UDF_SB(sb); | 32 | struct udf_sb_info *sbi = UDF_SB(sb); |
34 | 33 | ||
35 | /* | ||
36 | * Note: we must free any quota before locking the superblock, | ||
37 | * as writing the quota to disk may need the lock as well. | ||
38 | */ | ||
39 | dquot_free_inode(inode); | ||
40 | dquot_drop(inode); | ||
41 | |||
42 | clear_inode(inode); | 34 | clear_inode(inode); |
43 | 35 | ||
44 | mutex_lock(&sbi->s_alloc_mutex); | 36 | mutex_lock(&sbi->s_alloc_mutex); |
@@ -61,7 +53,7 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err) | |||
61 | struct super_block *sb = dir->i_sb; | 53 | struct super_block *sb = dir->i_sb; |
62 | struct udf_sb_info *sbi = UDF_SB(sb); | 54 | struct udf_sb_info *sbi = UDF_SB(sb); |
63 | struct inode *inode; | 55 | struct inode *inode; |
64 | int block, ret; | 56 | int block; |
65 | uint32_t start = UDF_I(dir)->i_location.logicalBlockNum; | 57 | uint32_t start = UDF_I(dir)->i_location.logicalBlockNum; |
66 | struct udf_inode_info *iinfo; | 58 | struct udf_inode_info *iinfo; |
67 | struct udf_inode_info *dinfo = UDF_I(dir); | 59 | struct udf_inode_info *dinfo = UDF_I(dir); |
@@ -146,17 +138,6 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err) | |||
146 | insert_inode_hash(inode); | 138 | insert_inode_hash(inode); |
147 | mark_inode_dirty(inode); | 139 | mark_inode_dirty(inode); |
148 | 140 | ||
149 | dquot_initialize(inode); | ||
150 | ret = dquot_alloc_inode(inode); | ||
151 | if (ret) { | ||
152 | dquot_drop(inode); | ||
153 | inode->i_flags |= S_NOQUOTA; | ||
154 | inode->i_nlink = 0; | ||
155 | iput(inode); | ||
156 | *err = ret; | ||
157 | return NULL; | ||
158 | } | ||
159 | |||
160 | *err = 0; | 141 | *err = 0; |
161 | return inode; | 142 | return inode; |
162 | } | 143 | } |
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 8a3fbd177cab..124852bcf6fe 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <linux/pagemap.h> | 36 | #include <linux/pagemap.h> |
37 | #include <linux/buffer_head.h> | 37 | #include <linux/buffer_head.h> |
38 | #include <linux/writeback.h> | 38 | #include <linux/writeback.h> |
39 | #include <linux/quotaops.h> | ||
40 | #include <linux/slab.h> | 39 | #include <linux/slab.h> |
41 | #include <linux/crc-itu-t.h> | 40 | #include <linux/crc-itu-t.h> |
42 | 41 | ||
@@ -71,9 +70,6 @@ static int udf_get_block(struct inode *, sector_t, struct buffer_head *, int); | |||
71 | 70 | ||
72 | void udf_delete_inode(struct inode *inode) | 71 | void udf_delete_inode(struct inode *inode) |
73 | { | 72 | { |
74 | if (!is_bad_inode(inode)) | ||
75 | dquot_initialize(inode); | ||
76 | |||
77 | truncate_inode_pages(&inode->i_data, 0); | 73 | truncate_inode_pages(&inode->i_data, 0); |
78 | 74 | ||
79 | if (is_bad_inode(inode)) | 75 | if (is_bad_inode(inode)) |
@@ -113,7 +109,6 @@ void udf_clear_inode(struct inode *inode) | |||
113 | (unsigned long long)iinfo->i_lenExtents); | 109 | (unsigned long long)iinfo->i_lenExtents); |
114 | } | 110 | } |
115 | 111 | ||
116 | dquot_drop(inode); | ||
117 | kfree(iinfo->i_ext.i_data); | 112 | kfree(iinfo->i_ext.i_data); |
118 | iinfo->i_ext.i_data = NULL; | 113 | iinfo->i_ext.i_data = NULL; |
119 | } | 114 | } |
diff --git a/fs/udf/namei.c b/fs/udf/namei.c index 585f733615dc..bf5fc674193c 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <linux/errno.h> | 27 | #include <linux/errno.h> |
28 | #include <linux/mm.h> | 28 | #include <linux/mm.h> |
29 | #include <linux/slab.h> | 29 | #include <linux/slab.h> |
30 | #include <linux/quotaops.h> | ||
31 | #include <linux/smp_lock.h> | 30 | #include <linux/smp_lock.h> |
32 | #include <linux/buffer_head.h> | 31 | #include <linux/buffer_head.h> |
33 | #include <linux/sched.h> | 32 | #include <linux/sched.h> |
@@ -563,8 +562,6 @@ static int udf_create(struct inode *dir, struct dentry *dentry, int mode, | |||
563 | int err; | 562 | int err; |
564 | struct udf_inode_info *iinfo; | 563 | struct udf_inode_info *iinfo; |
565 | 564 | ||
566 | dquot_initialize(dir); | ||
567 | |||
568 | lock_kernel(); | 565 | lock_kernel(); |
569 | inode = udf_new_inode(dir, mode, &err); | 566 | inode = udf_new_inode(dir, mode, &err); |
570 | if (!inode) { | 567 | if (!inode) { |
@@ -617,8 +614,6 @@ static int udf_mknod(struct inode *dir, struct dentry *dentry, int mode, | |||
617 | if (!old_valid_dev(rdev)) | 614 | if (!old_valid_dev(rdev)) |
618 | return -EINVAL; | 615 | return -EINVAL; |
619 | 616 | ||
620 | dquot_initialize(dir); | ||
621 | |||
622 | lock_kernel(); | 617 | lock_kernel(); |
623 | err = -EIO; | 618 | err = -EIO; |
624 | inode = udf_new_inode(dir, mode, &err); | 619 | inode = udf_new_inode(dir, mode, &err); |
@@ -664,8 +659,6 @@ static int udf_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
664 | struct udf_inode_info *dinfo = UDF_I(dir); | 659 | struct udf_inode_info *dinfo = UDF_I(dir); |
665 | struct udf_inode_info *iinfo; | 660 | struct udf_inode_info *iinfo; |
666 | 661 | ||
667 | dquot_initialize(dir); | ||
668 | |||
669 | lock_kernel(); | 662 | lock_kernel(); |
670 | err = -EMLINK; | 663 | err = -EMLINK; |
671 | if (dir->i_nlink >= (256 << sizeof(dir->i_nlink)) - 1) | 664 | if (dir->i_nlink >= (256 << sizeof(dir->i_nlink)) - 1) |
@@ -800,8 +793,6 @@ static int udf_rmdir(struct inode *dir, struct dentry *dentry) | |||
800 | struct fileIdentDesc *fi, cfi; | 793 | struct fileIdentDesc *fi, cfi; |
801 | struct kernel_lb_addr tloc; | 794 | struct kernel_lb_addr tloc; |
802 | 795 | ||
803 | dquot_initialize(dir); | ||
804 | |||
805 | retval = -ENOENT; | 796 | retval = -ENOENT; |
806 | lock_kernel(); | 797 | lock_kernel(); |
807 | fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); | 798 | fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); |
@@ -848,8 +839,6 @@ static int udf_unlink(struct inode *dir, struct dentry *dentry) | |||
848 | struct fileIdentDesc cfi; | 839 | struct fileIdentDesc cfi; |
849 | struct kernel_lb_addr tloc; | 840 | struct kernel_lb_addr tloc; |
850 | 841 | ||
851 | dquot_initialize(dir); | ||
852 | |||
853 | retval = -ENOENT; | 842 | retval = -ENOENT; |
854 | lock_kernel(); | 843 | lock_kernel(); |
855 | fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); | 844 | fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); |
@@ -904,8 +893,6 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry, | |||
904 | struct buffer_head *bh; | 893 | struct buffer_head *bh; |
905 | struct udf_inode_info *iinfo; | 894 | struct udf_inode_info *iinfo; |
906 | 895 | ||
907 | dquot_initialize(dir); | ||
908 | |||
909 | lock_kernel(); | 896 | lock_kernel(); |
910 | inode = udf_new_inode(dir, S_IFLNK | S_IRWXUGO, &err); | 897 | inode = udf_new_inode(dir, S_IFLNK | S_IRWXUGO, &err); |
911 | if (!inode) | 898 | if (!inode) |
@@ -1075,8 +1062,6 @@ static int udf_link(struct dentry *old_dentry, struct inode *dir, | |||
1075 | int err; | 1062 | int err; |
1076 | struct buffer_head *bh; | 1063 | struct buffer_head *bh; |
1077 | 1064 | ||
1078 | dquot_initialize(dir); | ||
1079 | |||
1080 | lock_kernel(); | 1065 | lock_kernel(); |
1081 | if (inode->i_nlink >= (256 << sizeof(inode->i_nlink)) - 1) { | 1066 | if (inode->i_nlink >= (256 << sizeof(inode->i_nlink)) - 1) { |
1082 | unlock_kernel(); | 1067 | unlock_kernel(); |
@@ -1139,9 +1124,6 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
1139 | struct kernel_lb_addr tloc; | 1124 | struct kernel_lb_addr tloc; |
1140 | struct udf_inode_info *old_iinfo = UDF_I(old_inode); | 1125 | struct udf_inode_info *old_iinfo = UDF_I(old_inode); |
1141 | 1126 | ||
1142 | dquot_initialize(old_dir); | ||
1143 | dquot_initialize(new_dir); | ||
1144 | |||
1145 | lock_kernel(); | 1127 | lock_kernel(); |
1146 | ofi = udf_find_entry(old_dir, &old_dentry->d_name, &ofibh, &ocfi); | 1128 | ofi = udf_find_entry(old_dir, &old_dentry->d_name, &ofibh, &ocfi); |
1147 | if (ofi) { | 1129 | if (ofi) { |
@@ -1387,7 +1369,6 @@ const struct export_operations udf_export_ops = { | |||
1387 | const struct inode_operations udf_dir_inode_operations = { | 1369 | const struct inode_operations udf_dir_inode_operations = { |
1388 | .lookup = udf_lookup, | 1370 | .lookup = udf_lookup, |
1389 | .create = udf_create, | 1371 | .create = udf_create, |
1390 | .setattr = udf_setattr, | ||
1391 | .link = udf_link, | 1372 | .link = udf_link, |
1392 | .unlink = udf_unlink, | 1373 | .unlink = udf_unlink, |
1393 | .symlink = udf_symlink, | 1374 | .symlink = udf_symlink, |
@@ -1400,5 +1381,4 @@ const struct inode_operations udf_symlink_inode_operations = { | |||
1400 | .readlink = generic_readlink, | 1381 | .readlink = generic_readlink, |
1401 | .follow_link = page_follow_link_light, | 1382 | .follow_link = page_follow_link_light, |
1402 | .put_link = page_put_link, | 1383 | .put_link = page_put_link, |
1403 | .setattr = udf_setattr, | ||
1404 | }; | 1384 | }; |
diff --git a/fs/udf/super.c b/fs/udf/super.c index 1e4543cbcd27..612d1e2e285a 100644 --- a/fs/udf/super.c +++ b/fs/udf/super.c | |||
@@ -557,6 +557,7 @@ static int udf_remount_fs(struct super_block *sb, int *flags, char *options) | |||
557 | { | 557 | { |
558 | struct udf_options uopt; | 558 | struct udf_options uopt; |
559 | struct udf_sb_info *sbi = UDF_SB(sb); | 559 | struct udf_sb_info *sbi = UDF_SB(sb); |
560 | int error = 0; | ||
560 | 561 | ||
561 | uopt.flags = sbi->s_flags; | 562 | uopt.flags = sbi->s_flags; |
562 | uopt.uid = sbi->s_uid; | 563 | uopt.uid = sbi->s_uid; |
@@ -582,17 +583,17 @@ static int udf_remount_fs(struct super_block *sb, int *flags, char *options) | |||
582 | *flags |= MS_RDONLY; | 583 | *flags |= MS_RDONLY; |
583 | } | 584 | } |
584 | 585 | ||
585 | if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) { | 586 | if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) |
586 | unlock_kernel(); | 587 | goto out_unlock; |
587 | return 0; | 588 | |
588 | } | ||
589 | if (*flags & MS_RDONLY) | 589 | if (*flags & MS_RDONLY) |
590 | udf_close_lvid(sb); | 590 | udf_close_lvid(sb); |
591 | else | 591 | else |
592 | udf_open_lvid(sb); | 592 | udf_open_lvid(sb); |
593 | 593 | ||
594 | out_unlock: | ||
594 | unlock_kernel(); | 595 | unlock_kernel(); |
595 | return 0; | 596 | return error; |
596 | } | 597 | } |
597 | 598 | ||
598 | /* Check Volume Structure Descriptors (ECMA 167 2/9.1) */ | 599 | /* Check Volume Structure Descriptors (ECMA 167 2/9.1) */ |
@@ -1939,7 +1940,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent) | |||
1939 | /* Fill in the rest of the superblock */ | 1940 | /* Fill in the rest of the superblock */ |
1940 | sb->s_op = &udf_sb_ops; | 1941 | sb->s_op = &udf_sb_ops; |
1941 | sb->s_export_op = &udf_export_ops; | 1942 | sb->s_export_op = &udf_export_ops; |
1942 | sb->dq_op = NULL; | 1943 | |
1943 | sb->s_dirt = 0; | 1944 | sb->s_dirt = 0; |
1944 | sb->s_magic = UDF_SUPER_MAGIC; | 1945 | sb->s_magic = UDF_SUPER_MAGIC; |
1945 | sb->s_time_gran = 1000; | 1946 | sb->s_time_gran = 1000; |
diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index 9079ff7d6255..2bac0354891f 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h | |||
@@ -131,7 +131,6 @@ extern int udf_write_fi(struct inode *inode, struct fileIdentDesc *, | |||
131 | 131 | ||
132 | /* file.c */ | 132 | /* file.c */ |
133 | extern long udf_ioctl(struct file *, unsigned int, unsigned long); | 133 | extern long udf_ioctl(struct file *, unsigned int, unsigned long); |
134 | extern int udf_setattr(struct dentry *dentry, struct iattr *iattr); | ||
135 | /* inode.c */ | 134 | /* inode.c */ |
136 | extern struct inode *udf_iget(struct super_block *, struct kernel_lb_addr *); | 135 | extern struct inode *udf_iget(struct super_block *, struct kernel_lb_addr *); |
137 | extern int udf_sync_inode(struct inode *); | 136 | extern int udf_sync_inode(struct inode *); |