• Alexander Aring's avatar
    dlm: use fl_owner from lockd · dbee1ade
    Alexander Aring authored
    This patch is changing the fl_owner value in case of an nfs lock request
    to not be the pid of lockd. Instead this patch changes it to be the
    owner value that nfs is giving us.
    
    Currently there exists proved problems with this behaviour. One nfsd
    server was created to export a gfs2 filesystem mount. Two nfs clients
    doing a nfs mount of this export. Those two clients should conflict each
    other operating on the same nfs file.
    
    A small test program was written:
    
    int main(int argc, const char *argv[])
    {
    	struct flock fl = {
    		.l_type = F_WRLCK,
    		.l_whence = SEEK_SET,
    		.l_start = 1L,
    		.l_len = 1L,
    	};
    	int fd;
    
    	fd = open("filename", O_RDWR | O_CREAT, 0700);
    	printf("try to lock...\n");
    	fcntl(fd, F_SETLKW, &fl);
    	printf("locked!\n");
    	getc(stdin);
    
    	return 0;
    }
    
    Running on both clients at the same time and don't interrupting by
    pressing any key. It will show that both clients are able to acquire the
    lock which shouldn't be the case. The issue is here that the fl_owner
    value is the same and the lock context of both clients should be
    separated.
    
    This patch lets lockd define how to deal with lock contexts and chose
    hopefully the right fl_owner value. A test after this patch was made and
    the locks conflicts each other which should be the case.
    Acked-by: default avatarJeff Layton <jlayton@kernel.org>
    Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
    Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
    dbee1ade
plock.c 14 KB