git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.5.x5
[linux-2.6.git]
/
fs
/
udf
/
balloc.c
diff --git
a/fs/udf/balloc.c
b/fs/udf/balloc.c
index
235418f
..
b9ded26
100644
(file)
--- a/
fs/udf/balloc.c
+++ b/
fs/udf/balloc.c
@@
-28,7
+28,7
@@
#include <linux/quotaops.h>
#include <linux/buffer_head.h>
#include <linux/quotaops.h>
#include <linux/buffer_head.h>
-#include <
asm
/bitops.h>
+#include <
linux
/bitops.h>
#include "udf_i.h"
#include "udf_sb.h"
#include "udf_i.h"
#include "udf_sb.h"
@@
-148,6
+148,7
@@
static void udf_bitmap_free_blocks(struct super_block * sb,
struct udf_bitmap *bitmap,
kernel_lb_addr bloc, uint32_t offset, uint32_t count)
{
struct udf_bitmap *bitmap,
kernel_lb_addr bloc, uint32_t offset, uint32_t count)
{
+ struct udf_sb_info *sbi = UDF_SB(sb);
struct buffer_head * bh = NULL;
unsigned long block;
unsigned long block_group;
struct buffer_head * bh = NULL;
unsigned long block;
unsigned long block_group;
@@
-156,7
+157,7
@@
static void udf_bitmap_free_blocks(struct super_block * sb,
int bitmap_nr;
unsigned long overflow;
int bitmap_nr;
unsigned long overflow;
-
lock_super(sb
);
+
down(&sbi->s_alloc_sem
);
if (bloc.logicalBlockNum < 0 ||
(bloc.logicalBlockNum + count) > UDF_SB_PARTLEN(sb, bloc.partitionReferenceNum))
{
if (bloc.logicalBlockNum < 0 ||
(bloc.logicalBlockNum + count) > UDF_SB_PARTLEN(sb, bloc.partitionReferenceNum))
{
@@
-215,7
+216,7
@@
error_return:
sb->s_dirt = 1;
if (UDF_SB_LVIDBH(sb))
mark_buffer_dirty(UDF_SB_LVIDBH(sb));
sb->s_dirt = 1;
if (UDF_SB_LVIDBH(sb))
mark_buffer_dirty(UDF_SB_LVIDBH(sb));
- u
nlock_super(sb
);
+ u
p(&sbi->s_alloc_sem
);
return;
}
return;
}
@@
-224,13
+225,13
@@
static int udf_bitmap_prealloc_blocks(struct super_block * sb,
struct udf_bitmap *bitmap, uint16_t partition, uint32_t first_block,
uint32_t block_count)
{
struct udf_bitmap *bitmap, uint16_t partition, uint32_t first_block,
uint32_t block_count)
{
+ struct udf_sb_info *sbi = UDF_SB(sb);
int alloc_count = 0;
int bit, block, block_group, group_start;
int nr_groups, bitmap_nr;
struct buffer_head *bh;
int alloc_count = 0;
int bit, block, block_group, group_start;
int nr_groups, bitmap_nr;
struct buffer_head *bh;
- lock_super(sb);
-
+ down(&sbi->s_alloc_sem);
if (first_block < 0 || first_block >= UDF_SB_PARTLEN(sb, partition))
goto out;
if (first_block < 0 || first_block >= UDF_SB_PARTLEN(sb, partition))
goto out;
@@
-279,7
+280,7
@@
out:
mark_buffer_dirty(UDF_SB_LVIDBH(sb));
}
sb->s_dirt = 1;
mark_buffer_dirty(UDF_SB_LVIDBH(sb));
}
sb->s_dirt = 1;
- u
nlock_super(sb
);
+ u
p(&sbi->s_alloc_sem
);
return alloc_count;
}
return alloc_count;
}
@@
-287,6
+288,7
@@
static int udf_bitmap_new_block(struct super_block * sb,
struct inode * inode,
struct udf_bitmap *bitmap, uint16_t partition, uint32_t goal, int *err)
{
struct inode * inode,
struct udf_bitmap *bitmap, uint16_t partition, uint32_t goal, int *err)
{
+ struct udf_sb_info *sbi = UDF_SB(sb);
int newbit, bit=0, block, block_group, group_start;
int end_goal, nr_groups, bitmap_nr, i;
struct buffer_head *bh = NULL;
int newbit, bit=0, block, block_group, group_start;
int end_goal, nr_groups, bitmap_nr, i;
struct buffer_head *bh = NULL;
@@
-294,7
+296,7
@@
static int udf_bitmap_new_block(struct super_block * sb,
int newblock = 0;
*err = -ENOSPC;
int newblock = 0;
*err = -ENOSPC;
-
lock_super(sb
);
+
down(&sbi->s_alloc_sem
);
repeat:
if (goal < 0 || goal >= UDF_SB_PARTLEN(sb, partition))
repeat:
if (goal < 0 || goal >= UDF_SB_PARTLEN(sb, partition))
@@
-367,7
+369,7
@@
repeat:
}
if (i >= (nr_groups*2))
{
}
if (i >= (nr_groups*2))
{
- u
nlock_super(sb
);
+ u
p(&sbi->s_alloc_sem
);
return newblock;
}
if (bit < sb->s_blocksize << 3)
return newblock;
}
if (bit < sb->s_blocksize << 3)
@@
-376,7
+378,7
@@
repeat:
bit = udf_find_next_one_bit(bh->b_data, sb->s_blocksize << 3, group_start << 3);
if (bit >= sb->s_blocksize << 3)
{
bit = udf_find_next_one_bit(bh->b_data, sb->s_blocksize << 3, group_start << 3);
if (bit >= sb->s_blocksize << 3)
{
- u
nlock_super(sb
);
+ u
p(&sbi->s_alloc_sem
);
return 0;
}
return 0;
}
@@
-390,7
+392,7
@@
got_block:
*/
if (inode && DQUOT_ALLOC_BLOCK(inode, 1))
{
*/
if (inode && DQUOT_ALLOC_BLOCK(inode, 1))
{
- u
nlock_super(sb
);
+ u
p(&sbi->s_alloc_sem
);
*err = -EDQUOT;
return 0;
}
*err = -EDQUOT;
return 0;
}
@@
-413,13
+415,13
@@
got_block:
mark_buffer_dirty(UDF_SB_LVIDBH(sb));
}
sb->s_dirt = 1;
mark_buffer_dirty(UDF_SB_LVIDBH(sb));
}
sb->s_dirt = 1;
- u
nlock_super(sb
);
+ u
p(&sbi->s_alloc_sem
);
*err = 0;
return newblock;
error_return:
*err = -EIO;
*err = 0;
return newblock;
error_return:
*err = -EIO;
- u
nlock_super(sb
);
+ u
p(&sbi->s_alloc_sem
);
return 0;
}
return 0;
}
@@
-428,6
+430,7
@@
static void udf_table_free_blocks(struct super_block * sb,
struct inode * table,
kernel_lb_addr bloc, uint32_t offset, uint32_t count)
{
struct inode * table,
kernel_lb_addr bloc, uint32_t offset, uint32_t count)
{
+ struct udf_sb_info *sbi = UDF_SB(sb);
uint32_t start, end;
uint32_t nextoffset, oextoffset, elen;
kernel_lb_addr nbloc, obloc, eloc;
uint32_t start, end;
uint32_t nextoffset, oextoffset, elen;
kernel_lb_addr nbloc, obloc, eloc;
@@
-435,7
+438,7
@@
static void udf_table_free_blocks(struct super_block * sb,
int8_t etype;
int i;
int8_t etype;
int i;
-
lock_super(sb
);
+
down(&sbi->s_alloc_sem
);
if (bloc.logicalBlockNum < 0 ||
(bloc.logicalBlockNum + count) > UDF_SB_PARTLEN(sb, bloc.partitionReferenceNum))
{
if (bloc.logicalBlockNum < 0 ||
(bloc.logicalBlockNum + count) > UDF_SB_PARTLEN(sb, bloc.partitionReferenceNum))
{
@@
-669,7
+672,7
@@
static void udf_table_free_blocks(struct super_block * sb,
error_return:
sb->s_dirt = 1;
error_return:
sb->s_dirt = 1;
- u
nlock_super(sb
);
+ u
p(&sbi->s_alloc_sem
);
return;
}
return;
}
@@
-678,6
+681,7
@@
static int udf_table_prealloc_blocks(struct super_block * sb,
struct inode *table, uint16_t partition, uint32_t first_block,
uint32_t block_count)
{
struct inode *table, uint16_t partition, uint32_t first_block,
uint32_t block_count)
{
+ struct udf_sb_info *sbi = UDF_SB(sb);
int alloc_count = 0;
uint32_t extoffset, elen, adsize;
kernel_lb_addr bloc, eloc;
int alloc_count = 0;
uint32_t extoffset, elen, adsize;
kernel_lb_addr bloc, eloc;
@@
-694,8
+698,7
@@
static int udf_table_prealloc_blocks(struct super_block * sb,
else
return 0;
else
return 0;
- lock_super(sb);
-
+ down(&sbi->s_alloc_sem);
extoffset = sizeof(struct unallocSpaceEntry);
bloc = UDF_I_LOCATION(table);
extoffset = sizeof(struct unallocSpaceEntry);
bloc = UDF_I_LOCATION(table);
@@
-739,7
+742,7
@@
static int udf_table_prealloc_blocks(struct super_block * sb,
mark_buffer_dirty(UDF_SB_LVIDBH(sb));
sb->s_dirt = 1;
}
mark_buffer_dirty(UDF_SB_LVIDBH(sb));
sb->s_dirt = 1;
}
- u
nlock_super(sb
);
+ u
p(&sbi->s_alloc_sem
);
return alloc_count;
}
return alloc_count;
}
@@
-747,6
+750,7
@@
static int udf_table_new_block(struct super_block * sb,
struct inode * inode,
struct inode *table, uint16_t partition, uint32_t goal, int *err)
{
struct inode * inode,
struct inode *table, uint16_t partition, uint32_t goal, int *err)
{
+ struct udf_sb_info *sbi = UDF_SB(sb);
uint32_t spread = 0xFFFFFFFF, nspread = 0xFFFFFFFF;
uint32_t newblock = 0, adsize;
uint32_t extoffset, goal_extoffset, elen, goal_elen = 0;
uint32_t spread = 0xFFFFFFFF, nspread = 0xFFFFFFFF;
uint32_t newblock = 0, adsize;
uint32_t extoffset, goal_extoffset, elen, goal_elen = 0;
@@
-763,8
+767,7
@@
static int udf_table_new_block(struct super_block * sb,
else
return newblock;
else
return newblock;
- lock_super(sb);
-
+ down(&sbi->s_alloc_sem);
if (goal < 0 || goal >= UDF_SB_PARTLEN(sb, partition))
goal = 0;
if (goal < 0 || goal >= UDF_SB_PARTLEN(sb, partition))
goal = 0;
@@
-814,7
+817,7
@@
static int udf_table_new_block(struct super_block * sb,
if (spread == 0xFFFFFFFF)
{
udf_release_data(goal_bh);
if (spread == 0xFFFFFFFF)
{
udf_release_data(goal_bh);
- u
nlock_super(sb
);
+ u
p(&sbi->s_alloc_sem
);
return 0;
}
return 0;
}
@@
-830,7
+833,7
@@
static int udf_table_new_block(struct super_block * sb,
if (inode && DQUOT_ALLOC_BLOCK(inode, 1))
{
udf_release_data(goal_bh);
if (inode && DQUOT_ALLOC_BLOCK(inode, 1))
{
udf_release_data(goal_bh);
- u
nlock_super(sb
);
+ u
p(&sbi->s_alloc_sem
);
*err = -EDQUOT;
return 0;
}
*err = -EDQUOT;
return 0;
}
@@
-849,7
+852,7
@@
static int udf_table_new_block(struct super_block * sb,
}
sb->s_dirt = 1;
}
sb->s_dirt = 1;
- u
nlock_super(sb
);
+ u
p(&sbi->s_alloc_sem
);
*err = 0;
return newblock;
}
*err = 0;
return newblock;
}