mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-21 21:02:24 +00:00
[GFS2] Remove lock methods for lock_nolock protocol
GFS2 supports two modes of locking - lock_nolock for single node filesystem and lock_dlm for cluster mode locking. The gfs2 lock methods are removed from file operation table for lock_nolock protocol. This would allow VFS to handle posix lock and flock logics just like other in-tree filesystems without duplication. Signed-off-by: S. Wendy Cheng <wcheng@redhat.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
parent
bcd405599f
commit
c97bfe4351
@ -131,14 +131,21 @@ static struct inode *gfs2_iget_skip(struct super_block *sb,
|
|||||||
|
|
||||||
void gfs2_set_iop(struct inode *inode)
|
void gfs2_set_iop(struct inode *inode)
|
||||||
{
|
{
|
||||||
|
struct gfs2_sbd *sdp = GFS2_SB(inode);
|
||||||
umode_t mode = inode->i_mode;
|
umode_t mode = inode->i_mode;
|
||||||
|
|
||||||
if (S_ISREG(mode)) {
|
if (S_ISREG(mode)) {
|
||||||
inode->i_op = &gfs2_file_iops;
|
inode->i_op = &gfs2_file_iops;
|
||||||
inode->i_fop = &gfs2_file_fops;
|
if (sdp->sd_args.ar_localflocks)
|
||||||
|
inode->i_fop = &gfs2_file_fops_nolock;
|
||||||
|
else
|
||||||
|
inode->i_fop = &gfs2_file_fops;
|
||||||
} else if (S_ISDIR(mode)) {
|
} else if (S_ISDIR(mode)) {
|
||||||
inode->i_op = &gfs2_dir_iops;
|
inode->i_op = &gfs2_dir_iops;
|
||||||
inode->i_fop = &gfs2_dir_fops;
|
if (sdp->sd_args.ar_localflocks)
|
||||||
|
inode->i_fop = &gfs2_dir_fops_nolock;
|
||||||
|
else
|
||||||
|
inode->i_fop = &gfs2_dir_fops;
|
||||||
} else if (S_ISLNK(mode)) {
|
} else if (S_ISLNK(mode)) {
|
||||||
inode->i_op = &gfs2_symlink_iops;
|
inode->i_op = &gfs2_symlink_iops;
|
||||||
} else {
|
} else {
|
||||||
|
@ -615,15 +615,6 @@ static int gfs2_lock(struct file *file, int cmd, struct file_lock *fl)
|
|||||||
if (__mandatory_lock(&ip->i_inode))
|
if (__mandatory_lock(&ip->i_inode))
|
||||||
return -ENOLCK;
|
return -ENOLCK;
|
||||||
|
|
||||||
if (sdp->sd_args.ar_localflocks) {
|
|
||||||
if (IS_GETLK(cmd)) {
|
|
||||||
posix_test_lock(file, fl);
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
return posix_lock_file_wait(file, fl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmd == F_CANCELLK) {
|
if (cmd == F_CANCELLK) {
|
||||||
/* Hack: */
|
/* Hack: */
|
||||||
cmd = F_SETLK;
|
cmd = F_SETLK;
|
||||||
@ -716,9 +707,6 @@ static int gfs2_flock(struct file *file, int cmd, struct file_lock *fl)
|
|||||||
if (__mandatory_lock(&ip->i_inode))
|
if (__mandatory_lock(&ip->i_inode))
|
||||||
return -ENOLCK;
|
return -ENOLCK;
|
||||||
|
|
||||||
if (sdp->sd_args.ar_localflocks)
|
|
||||||
return flock_lock_file_wait(file, fl);
|
|
||||||
|
|
||||||
if (fl->fl_type == F_UNLCK) {
|
if (fl->fl_type == F_UNLCK) {
|
||||||
do_unflock(file, fl);
|
do_unflock(file, fl);
|
||||||
return 0;
|
return 0;
|
||||||
@ -755,3 +743,27 @@ const struct file_operations gfs2_dir_fops = {
|
|||||||
.flock = gfs2_flock,
|
.flock = gfs2_flock,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const struct file_operations gfs2_file_fops_nolock = {
|
||||||
|
.llseek = gfs2_llseek,
|
||||||
|
.read = do_sync_read,
|
||||||
|
.aio_read = generic_file_aio_read,
|
||||||
|
.write = do_sync_write,
|
||||||
|
.aio_write = generic_file_aio_write,
|
||||||
|
.unlocked_ioctl = gfs2_ioctl,
|
||||||
|
.mmap = gfs2_mmap,
|
||||||
|
.open = gfs2_open,
|
||||||
|
.release = gfs2_close,
|
||||||
|
.fsync = gfs2_fsync,
|
||||||
|
.splice_read = generic_file_splice_read,
|
||||||
|
.splice_write = generic_file_splice_write,
|
||||||
|
.setlease = gfs2_setlease,
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct file_operations gfs2_dir_fops_nolock = {
|
||||||
|
.readdir = gfs2_readdir,
|
||||||
|
.unlocked_ioctl = gfs2_ioctl,
|
||||||
|
.open = gfs2_open,
|
||||||
|
.release = gfs2_close,
|
||||||
|
.fsync = gfs2_fsync,
|
||||||
|
};
|
||||||
|
|
||||||
|
@ -18,6 +18,8 @@ extern const struct inode_operations gfs2_symlink_iops;
|
|||||||
extern const struct inode_operations gfs2_dev_iops;
|
extern const struct inode_operations gfs2_dev_iops;
|
||||||
extern const struct file_operations gfs2_file_fops;
|
extern const struct file_operations gfs2_file_fops;
|
||||||
extern const struct file_operations gfs2_dir_fops;
|
extern const struct file_operations gfs2_dir_fops;
|
||||||
|
extern const struct file_operations gfs2_file_fops_nolock;
|
||||||
|
extern const struct file_operations gfs2_dir_fops_nolock;
|
||||||
|
|
||||||
extern void gfs2_set_inode_flags(struct inode *inode);
|
extern void gfs2_set_inode_flags(struct inode *inode);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user