lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 20 Sep 2007 12:45:02 +0400 From: Pavel Emelyanov <xemul@...nvz.org> To: Andrew Morton <akpm@...l.org> CC: "J. Bruce Fields" <bfields@...ldses.org>, Linux Kernel Mailing List <linux-kernel@...r.kernel.org>, devel@...nvz.org Subject: [PATCH] Rework /proc/locks via seq_files and seq_list helpers (v2) Currently /proc/locks is shown with a proc_read function, but its behavior is rather complex as it has to manually handle current offset and buffer length. On the other hand, files that show objects from lists can be easily reimplemented using the sequential files and the seq_list_XXX() helpers. This saves (as usually) 16 lines of code and more than 200 from the .text section. This patch looks rather ugly, as diff often uses curly braces as not-changed lines, but I haven't managed to organize the code to make diff look better. Except for move the whole proc related stuff upper/lower in the locks.c file... Fixed the problem, spotted by J. Bruce Fields, about the fl variable reuse. Signed-off-by: Pavel Emelyanov <xemul@...nvz.org> --- diff --git a/fs/locks.c b/fs/locks.c index a1c1c01..d5b9653 100644 --- a/fs/locks.c +++ b/fs/locks.c @@ -1354,6 +1354,7 @@ int fcntl_getlease(struct file *filp) int generic_setlease(struct file *filp, long arg, struct file_lock **flp) { struct file_lock *fl, **before, **my_before = NULL, *lease; + struct file_lock *new_fl = NULL; struct dentry *dentry = filp->f_path.dentry; struct inode *inode = dentry->d_inode; int error, rdlease_count = 0, wrlease_count = 0; @@ -1380,6 +1381,11 @@ int generic_setlease(struct file *filp, || (atomic_read(&inode->i_count) > 1))) goto out; + error = -ENOMEM; + new_fl = locks_alloc_lock(); + if (new_fl == NULL) + goto out; + /* * At this point, we know that if there is an exclusive * lease on this file, then we hold it on this filp @@ -1422,18 +1428,15 @@ int generic_setlease(struct file *filp, if (!leases_enable) goto out; - error = -ENOMEM; - fl = locks_alloc_lock(); - if (fl == NULL) - goto out; - - locks_copy_lock(fl, lease); - - locks_insert_lock(before, fl); + locks_copy_lock(new_fl, lease); + locks_insert_lock(before, new_fl); *flp = fl; - error = 0; + return 0; + out: + if (new_fl != NULL) + locks_free_lock(new_fl); return error; } EXPORT_SYMBOL(generic_setlease); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists