Prev: procfs: Kill BKL in llseek on proc base
Next: net/wireless/libertas: do not call wiphy_unregister() w/o wiphy_register()
From: Christoph Hellwig on 13 Apr 2010 14:10 On Mon, Apr 12, 2010 at 07:34:17PM +0200, Arnd Bergmann wrote: > > - make sure every file operation either has a ->llseek instead or > > calls nonseekable_open from ->open > > I still think it would be better to always set llseek if we do that, > even if nonseekable_open is already there. I can come up with scripts > that check that case, but checking that the open function always > calls nonseekable_open when it returns success is beyond my grep > skills ;-) Yes, it's not quite easily greppable. Making no seek allowed the implicit default will fortunately allow us to get rid of that oddness. > > - walk through the instances now using default_llseek and chose > > a better implementation for this particular instance. Often > > this will be just removing the the lssek method as not allowing > > seeks is the right thing to do for character drivers, even if it > > is a behaviour change from the current version which usually > > is the result of sloppy coding. > > This part is really hard. While in many cases, the driver maintainer > might know what user space is potentially opening some character > device, it's really hard to tell for outsiders whether the behaviour > should be no_llseek (then the default) or noop_llseek to work around > broken user space. That's why it's last on the list. > I think the rule set for the conversion needs to be one that can > be done purely based on the code. How about this: > > For each file operation { > if (uses f_pos) { > if (same module uses BKL) > -> default_llseek > else > -> generic_file_llseek > } else { > if (driver maintained) > -> no_llseek (with maintainer ACK) > else > -> noop_llseek > } > } > > Once that is done, we can turn the default into nonseekable > behavior and start removing instances of explicit no_llseek > and nonseekable_open. That plan sounds good to me. > Should we also rename default_llseek to deprecated_llseek in the > process, to go along with the approach for ioctl? I wouldn't bother. If you can actually work on your plan default_llseek should be gone soon enough. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Frederic Weisbecker on 13 Apr 2010 16:50 On Tue, Apr 13, 2010 at 11:26:27AM +0200, Arnd Bergmann wrote: > On Monday 12 April 2010, Frederic Weisbecker wrote: > > On Mon, Apr 12, 2010 at 07:34:17PM +0200, Arnd Bergmann wrote: > > > > > > I think the rule set for the conversion needs to be one that can > > > be done purely based on the code. How about this: > > > > > > For each file operation { > > > if (uses f_pos) { > > > if (same module uses BKL) > > > -> default_llseek > > > else > > > -> generic_file_llseek > > > } else { > > > if (driver maintained) > > > -> no_llseek (with maintainer ACK) > > > else > > > -> noop_llseek > > > } > > > } > > > > It is also hard to determine a given driver really doesn't use > > the bkl. A sole lock_kernel() grep in its files is not sufficient. > > But a manual second pass should do the trick. > > Why not? In my 2.6.33 based series, I have removed all implicit > uses of the BKL, so we can be sure that it doesn't use the BKL > unless the module is part of that series. The only two cases > I can think of are: > > - ioctl callback, which we should do in the same change, like I > originally did. If a driver defines ->ioctl(), make it use > deprecated_ioctl() and default_llseek()/deprecated_llseek. > > - Any of the file systems from Jan's series. > > Arnd Ok looks like a good plan then. Thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
First
|
Prev
|
Pages: 1 2 3 4 5 6 Prev: procfs: Kill BKL in llseek on proc base Next: net/wireless/libertas: do not call wiphy_unregister() w/o wiphy_register() |