From: Miklos Szeredi <mszeredi@suse.cz>
If fuse filesystem doesn't define it's own lock operations, then allow
the lock manager to work with fuse.
Adding lockd support for remote locking is also possible, but more
difficult, because of the need handle lock cancellation. It's also
rarely used, so leave it till later.
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
---
fs/fuse/file.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
Index: linux-2.6/fs/fuse/file.c
===================================================================
--- linux-2.6.orig/fs/fuse/file.c 2008-05-09 14:04:45.000000000 +0200
+++ linux-2.6/fs/fuse/file.c 2008-05-09 14:04:52.000000000 +0200
@@ -1341,6 +1341,11 @@ static int fuse_setlk(struct file *file,
pid_t pid = fl->fl_type != F_UNLCK ? current->tgid : 0;
int err;
+ if (fl->fl_lmops && fl->fl_lmops->fl_grant) {
+ /* NLM needs asynchronous locks, which we don't support yet */
+ return -ENOLCK;
+ }
+
/* Unlock on close is handled by the flush method */
if (fl->fl_flags & FL_CLOSE)
return 0;
@@ -1365,7 +1370,9 @@ static int fuse_file_lock(struct file *f
struct fuse_conn *fc = get_fuse_conn(inode);
int err;
- if (cmd == F_GETLK) {
+ if (cmd == F_CANCELLK) {
+ err = 0;
+ } else if (cmd == F_GETLK) {
if (fc->no_lock) {
posix_test_lock(file, fl);
err = 0;
@@ -1373,7 +1380,7 @@ static int fuse_file_lock(struct file *f
err = fuse_getlk(file, fl);
} else {
if (fc->no_lock)
- err = posix_lock_file_wait(file, fl);
+ err = posix_lock_file(file, fl, NULL);
else
err = fuse_setlk(file, fl, 0);
}
--
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
| Stoyan Gaydarov | From 2.4 to 2.6 to 2.7? |
| David Miller | [GIT]: Networking |
| Bernd Petrovitsch | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Stephen Rothwell | linux-next: Tree for July 18 |
git: | |
| Peter Karlsson | Git on Windows, CRLF issues |
| Jari Aalto | Re: On Tabs and Spaces |
| Stephan Beyer | git sequencer prototype |
| Linus Torvalds | "fatal: Untracked working tree file 'so-and-so' would be overwritten by merge" |
| GVG GVG | ssh_exchange_identification: Connection closed by remote host |
| Theo de Raadt | That whole "Linux stealing our code" thing |
| Jerome Santos | sshd.config and AllowUsers |
| Don Jackson | How to use (compact) flash cards with OpenBSD |
| Jim Winstead Jr. | Re: Root Disk/Book Disk Compatibility |
| Rick Emerson | Re: [comp.os.linux]: Re: File system issues! |
| Desmond A. Kirkpatrick | ATI GUP bug with Linux 'tickler' |
| Harald Zinnen | FTape QIC-80 Driver |
