Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 38646
b: refs/heads/master
c: 8628de0
h: refs/heads/master
v: v3
  • Loading branch information
Steven Whitehouse committed Mar 31, 2006
1 parent c296328 commit ef91c7e
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 82 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 86579dd06deecfa6ac88d5e84e4d63c397cd6f6d
refs/heads/master: 8628de0583504138551a05ad44ca388467f0f552
15 changes: 5 additions & 10 deletions trunk/fs/gfs2/locking/nolock/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,14 +176,13 @@ static void nolock_sync_lvb(lm_lock_t *lock, char *lvb)
static int nolock_plock_get(lm_lockspace_t *lockspace, struct lm_lockname *name,
struct file *file, struct file_lock *fl)
{
struct file_lock *tmp;
struct file_lock tmp;
int ret;

lock_kernel();
tmp = posix_test_lock(file, fl);
ret = posix_test_lock(file, fl, &tmp);
fl->fl_type = F_UNLCK;
if (tmp)
memcpy(fl, tmp, sizeof(struct file_lock));
unlock_kernel();
if (ret)
memcpy(fl, &tmp, sizeof(struct file_lock));

return 0;
}
Expand All @@ -192,19 +191,15 @@ static int nolock_plock(lm_lockspace_t *lockspace, struct lm_lockname *name,
struct file *file, int cmd, struct file_lock *fl)
{
int error;
lock_kernel();
error = posix_lock_file_wait(file, fl);
unlock_kernel();
return error;
}

static int nolock_punlock(lm_lockspace_t *lockspace, struct lm_lockname *name,
struct file *file, struct file_lock *fl)
{
int error;
lock_kernel();
error = posix_lock_file_wait(file, fl);
unlock_kernel();
return error;
}

Expand Down
66 changes: 6 additions & 60 deletions trunk/fs/gfs2/ops_address.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,59 +96,6 @@ static int get_block_noalloc(struct inode *inode, sector_t lblock,
return error;
}

static int get_blocks(struct inode *inode, sector_t lblock,
unsigned long max_blocks, struct buffer_head *bh_result,
int create)
{
struct gfs2_inode *ip = inode->u.generic_ip;
int new = create;
uint64_t dblock;
uint32_t extlen;
int error;

error = gfs2_block_map(ip, lblock, &new, &dblock, &extlen);
if (error)
return error;

if (!dblock)
return 0;

map_bh(bh_result, inode->i_sb, dblock);
if (new)
set_buffer_new(bh_result);

if (extlen > max_blocks)
extlen = max_blocks;
bh_result->b_size = extlen << inode->i_blkbits;

return 0;
}

static int get_blocks_noalloc(struct inode *inode, sector_t lblock,
unsigned long max_blocks,
struct buffer_head *bh_result, int create)
{
struct gfs2_inode *ip = inode->u.generic_ip;
int new = 0;
uint64_t dblock;
uint32_t extlen;
int error;

error = gfs2_block_map(ip, lblock, &new, &dblock, &extlen);
if (error)
return error;

if (dblock) {
map_bh(bh_result, inode->i_sb, dblock);
if (extlen > max_blocks)
extlen = max_blocks;
bh_result->b_size = extlen << inode->i_blkbits;
} else if (gfs2_assert_withdraw(ip->i_sbd, !create))
error = -EIO;

return error;
}

/**
* gfs2_writepage - Write complete page
* @page: Page to write
Expand Down Expand Up @@ -527,16 +474,15 @@ static void discard_buffer(struct gfs2_sbd *sdp, struct buffer_head *bh)
unlock_buffer(bh);
}

static int gfs2_invalidatepage(struct page *page, unsigned long offset)
static void gfs2_invalidatepage(struct page *page, unsigned long offset)
{
struct gfs2_sbd *sdp = page->mapping->host->i_sb->s_fs_info;
struct buffer_head *head, *bh, *next;
unsigned int curr_off = 0;
int ret = 1;

BUG_ON(!PageLocked(page));
if (!page_has_buffers(page))
return 1;
return;

bh = head = page_buffers(page);
do {
Expand All @@ -551,9 +497,9 @@ static int gfs2_invalidatepage(struct page *page, unsigned long offset)
} while (bh != head);

if (!offset)
ret = try_to_release_page(page, 0);
try_to_release_page(page, 0);

return ret;
return;
}

static ssize_t gfs2_direct_IO_write(struct kiocb *iocb, const struct iovec *iov,
Expand Down Expand Up @@ -587,7 +533,7 @@ static ssize_t gfs2_direct_IO_write(struct kiocb *iocb, const struct iovec *iov,
goto out;

rv = __blockdev_direct_IO(WRITE, iocb, inode, inode->i_sb->s_bdev,
iov, offset, nr_segs, get_blocks_noalloc,
iov, offset, nr_segs, gfs2_get_block,
NULL, DIO_OWN_LOCKING);
out:
gfs2_glock_dq_m(1, &gh);
Expand Down Expand Up @@ -619,7 +565,7 @@ static ssize_t gfs2_direct_IO(int rw, struct kiocb *iocb,
return -EINVAL;

return __blockdev_direct_IO(READ, iocb, inode, inode->i_sb->s_bdev, iov,
offset, nr_segs, get_blocks, NULL,
offset, nr_segs, gfs2_get_block, NULL,
DIO_OWN_LOCKING);
}

Expand Down
19 changes: 8 additions & 11 deletions trunk/fs/gfs2/ops_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -833,20 +833,15 @@ static int gfs2_lock(struct file *file, int cmd, struct file_lock *fl)

if (sdp->sd_args.ar_localflocks) {
if (IS_GETLK(cmd)) {
struct file_lock *tmp;
lock_kernel();
tmp = posix_test_lock(file, fl);
struct file_lock tmp;
int ret;
ret = posix_test_lock(file, fl, &tmp);
fl->fl_type = F_UNLCK;
if (tmp)
memcpy(fl, tmp, sizeof(struct file_lock));
unlock_kernel();
if (ret)
memcpy(fl, &tmp, sizeof(struct file_lock));
return 0;
} else {
int error;
lock_kernel();
error = posix_lock_file_wait(file, fl);
unlock_kernel();
return error;
return posix_lock_file_wait(file, fl);
}
}

Expand Down Expand Up @@ -983,6 +978,8 @@ struct file_operations gfs2_file_fops = {
.lock = gfs2_lock,
.sendfile = gfs2_sendfile,
.flock = gfs2_flock,
.splice_read = generic_file_splice_read,
.splice_write = generic_file_splice_write,
};

struct file_operations gfs2_dir_fops = {
Expand Down

0 comments on commit ef91c7e

Please sign in to comment.